45 lines
1.5 KiB
Bash
Executable File
45 lines
1.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
set -eo pipefail
|
|
|
|
get_max_mem(){
|
|
if [ -e /sys/fs/cgroup/memory.max ]; then
|
|
# Read /sys/fs/cgroup/memory.max
|
|
MAX=$(cat /sys/fs/cgroup/memory.max)
|
|
# If it's "max", then the container has no limit, and we must detect the available RAM
|
|
if [ "${MAX}" = "max" ]; then
|
|
echo $(($(cat /proc/meminfo | grep MemTotal | sed -E 's/MemTotal:\s+([0-9]+)\s+kB/\1/')/1024))
|
|
else
|
|
echo $(($(cat /sys/fs/cgroup/memory.max)/1024/1024))
|
|
fi
|
|
else
|
|
echo $(($(cat /proc/meminfo | grep MemTotal | sed -E 's/MemTotal:\s+([0-9]+)\s+kB/\1/')/1024))
|
|
fi
|
|
}
|
|
|
|
if mount | grep -q ' /etc/my.cnf '; then
|
|
echo "/etc/my.cnf is mounted, skiping config from env vars"
|
|
else
|
|
echo "Configuring from env vars"
|
|
for VAR in $(printenv | grep -E '^MYSQL_CONF_' | sed -E 's/MYSQL_CONF_([^=]+)=.*/\1/' | sort -V); do
|
|
DIRECTIVE=$(echo ${VAR} | sed -E 's/^[0-9]+_//')
|
|
VALUE=$(printenv MYSQL_CONF_${VAR})
|
|
|
|
if [ "${DIRECTIVE}" = "section" ]; then
|
|
echo "[${VALUE}]" >> /etc/my.cnf.d/env.cnf
|
|
else
|
|
|
|
# Allow some memory related settings to be expressed as a %
|
|
if echo ${DIRECTIVE} | grep -q -E "^(innodb_buffer_pool_size)$"; then
|
|
if echo ${VALUE} | grep -q -E "[0-9]+%$"; then
|
|
PERCENT=$(echo $VALUE | sed -E 's|%$||')
|
|
MAX_MEM=$(get_max_mem)
|
|
VALUE=$((${MAX_MEM}*${PERCENT}/100))MB
|
|
fi
|
|
fi
|
|
echo "Adding ${DIRECTIVE} = ${VALUE} in /etc/my.cnf.d/env.cnf"
|
|
echo "${DIRECTIVE} = ${VALUE}" >> /etc/my.cnf.d/env.cnf
|
|
fi
|
|
done
|
|
fi
|