Blame root/usr/bin/run-mysqld-slave

d27be39
#!/bin/bash
d27be39
#
d27be39
# This is an entrypoint that runs the MySQL server in the 'slave' mode.
d27be39
#
d27be39
export_vars=$(cgroup-limits); export $export_vars
d27be39
source ${CONTAINER_SCRIPTS_PATH}/common.sh
d27be39
set -eu
d27be39
d27be39
# Just run normal server if the data directory is already initialized
d27be39
if [ -d "${MYSQL_DATADIR}/mysql" ]; then
d27be39
  exec /usr/bin/run-mysqld "$@"
d27be39
fi
d27be39
d27be39
export MYSQL_RUNNING_AS_SLAVE=1
d27be39
d27be39
[ -f ${CONTAINER_SCRIPTS_PATH}/validate_replication_variables.sh ] && source ${CONTAINER_SCRIPTS_PATH}/validate_replication_variables.sh
d27be39
d27be39
# Generate the unique 'server-id' for this master
d27be39
export MYSQL_SERVER_ID=$(server_id)
d27be39
log_info "The 'slave' server-id is ${MYSQL_SERVER_ID}"
d27be39
d27be39
# Process the MySQL configuration files
d27be39
envsubst < ${CONTAINER_SCRIPTS_PATH}/my-base.cnf.template > /etc/my.cnf.d/base.cnf
d27be39
envsubst < ${CONTAINER_SCRIPTS_PATH}/my-paas.cnf.template > /etc/my.cnf.d/paas.cnf
d27be39
envsubst < ${CONTAINER_SCRIPTS_PATH}/my-slave.cnf.template > /etc/my.cnf.d/slave.cnf
d27be39
envsubst < ${CONTAINER_SCRIPTS_PATH}/my-repl-gtid.cnf.template > /etc/my.cnf.d/repl-gtid.cnf
d27be39
envsubst < ${CONTAINER_SCRIPTS_PATH}/my-tuning.cnf.template > /etc/my.cnf.d/tuning.cnf
d27be39
d27be39
# Initialize MySQL database and wait for the MySQL master to accept
d27be39
# connections.
d27be39
initialize_database "$@"
d27be39
wait_for_mysql_master
d27be39
d27be39
# Get binlog file and position from master
d27be39
STATUS_INFO=$(mysql --host "$MYSQL_MASTER_SERVICE_NAME" "-u${MYSQL_MASTER_USER}" "-p${MYSQL_MASTER_PASSWORD}" replication -e 'SELECT gtid from replication limit 1\G')
d27be39
GTID_VALUE=$(echo "$STATUS_INFO" | grep 'gtid:' | head -n 1 | sed -e 's/^\s*gtid: //')
d27be39
d27be39
# checking STATUS_INFO here because empty GTID_VALUE is valid value
d27be39
if [ -z "${STATUS_INFO}" ] ; then
d27be39
  echo "Could not read GTID value from master"
d27be39
  exit 1
d27be39
fi
d27be39
d27be39
mysql $mysql_flags <
d27be39
  STOP SLAVE;
d27be39
  SET GLOBAL gtid_slave_pos = "${GTID_VALUE}";
d27be39
  CHANGE MASTER TO MASTER_HOST='${MYSQL_MASTER_SERVICE_NAME}',MASTER_USER='${MYSQL_MASTER_USER}', MASTER_PASSWORD='${MYSQL_MASTER_PASSWORD}', MASTER_USE_GTID=slave_pos;
d27be39
  START SLAVE;
d27be39
EOSQL
d27be39
d27be39
log_info 'Sourcing post-init.sh ...'
d27be39
[ -f ${CONTAINER_SCRIPTS_PATH}/post-init.sh ] && source ${CONTAINER_SCRIPTS_PATH}/post-init.sh
d27be39
d27be39
# Restart the MySQL server with public IP bindings
d27be39
shutdown_local_mysql
d27be39
unset_env_vars
d27be39
log_volume_info $MYSQL_DATADIR
d27be39
log_info 'Running final exec -- Only MySQL server logs after this point'
d27be39
exec ${MYSQL_PREFIX}/libexec/mysqld --defaults-file=$MYSQL_DEFAULTS_FILE \
d27be39
  --report-host=$(hostname -i) "$@" 2>&1