mariadb/images/mariadb/root/entrypoint.d/10-mariadb-conf.sh

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