#!/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