◎ Example mariadb_ctl.erb
export MARIADB_JOB_DIR=/var/vcap/jobs/mysql
RUN_DIR=/var/vcap/sys/run/mysql
datadir=/var/vcap/store/mysql
LOG_DIR=/var/vcap/sys/log/mysql
LOG_FILE=$LOG_DIR/maria-ctl.log
export JOB_INDEX=<%= index %>
STATE_FILE=/var/vcap/store/mysql/state.txt
MYSQL_DAEMON_FILE=/var/vcap/packages/mariadb_ctrl/mysql_daemon.sh
MYSQL_CLIENT_FILE=/var/vcap/packages/mariadb/bin/mysql
MYSQL_SERVER_FILE=/var/vcap/packages/mariadb/support-files/mysql.server
DB_SEED_SCRIPT_FILE=$MARIADB_JOB_DIR/bin/mysql_database_seed.sh
package_dir=/var/vcap/packages/mariadb_ctrl
executable_name=mariadb_ctrl-executable
MYSQL_UPGRADE_SCRIPT_FILE=$package_dir/mysql_upgrade.sh
MYSQL_SHOW_DATABASES_SCRIPT_FILE=$package_dir/show_databases.sh
export MY_NAME=mariadb_ctl
export RUN_DIR=/var/vcap/sys/run/$MY_NAME
export PIDFILE=$RUN_DIR/$MY_NAME.pid
DATABASE_SEED_ATTEMPTS=30
source /var/vcap/packages/common/utils.sh
if [ ! -f /usr/local/bin/mysql ]; then
log "Adding mysql to path"
ln -s /var/vcap/packages/mariadb/bin/mysql /usr/local/bin
export PATH=$PATH:/var/vcap/packages/xtrabackup/bin
◎ add perl libraries to perl env
export PERL5LIB=$PERL5LIB:/var/vcap/packages/xtrabackup/lib/perl/5.18.2
◎ The start script must always exit 0 if there's a chance Maria could start successfully,
◎ as if monit sees a pid for Maria but this script exited with error, it will assume
◎ someone else started the process in the background.
◎ This will latch the status to "Execution failed" until someone manually calls
monit unmonitor && monit monitor, at which point monit would find the pid and reset the status to 'running'
if [[ ! -d "$RUN_DIR" ]]; then
log "start script: directory $RUN_DIR does not exist, creating it now"
log "start script: checking for existing instance of $MY_NAME"
$(source /var/vcap/packages/common/utils.sh; pid_guard $PIDFILE $MY_NAME)
log "start script: pg_exit_code: $pg_exit_code"
if [ $pg_exit_code -eq 1 ]; then
log "start script: $MY_NAME already running. Exiting 0 so that monit doesn't think that execution failed"
log "start script: writing pid $ for $MY_NAME to $PIDFILE"
log "start script: checking if mysqld_safe is already running... "
pgrep -f /var/vcap/packages/mariadb/bin/mysqld_safe
// Exit code of 0 means we did find a process, so we should exit.
if [ $result_code -eq 0 ]; then
log "start script: mysqld_safe already running - exiting with 0 so that monit doesn't think that execution failed"
log "start script: mysqld_safe not already running - continue"
/var/vcap/packages/syslog_aggregator/setup_syslog_forwarder.sh $MARIADB_JOB_DIR/config
chown vcap:vcap $LOG_FILE
date >> $LOG_FILE 2>> $LOG_FILE
It is surprisingly hard to get the config file location passed in
on the command line to the mysql.server script. This is easier.
ln -sf $MARIADB_JOB_DIR/config/my.cnf $CONFIG_DIR/my.cnf