11#! /bin/bash
22
3+ set -m
4+ set -e
5+
36VOLUME_HOME=" /var/lib/mysql"
47CONF_FILE=" /etc/mysql/conf.d/my.cnf"
58LOG=" /var/log/mysql/error.log"
@@ -11,33 +14,30 @@ chmod 644 /etc/mysql/conf.d/mysqld_charset.cnf
1114StartMySQL ()
1215{
1316 /usr/bin/mysqld_safe > /dev/null 2>&1 &
14-
1517 # Time out in 1 minute
16- LOOP_LIMIT=13
18+ LOOP_LIMIT=60
1719 for (( i= 0 ; ; i++ )) ; do
1820 if [ ${i} -eq ${LOOP_LIMIT} ]; then
1921 echo " Time out. Error log is shown as below:"
2022 tail -n 100 ${LOG}
2123 exit 1
2224 fi
2325 echo " => Waiting for confirmation of MySQL service startup, trying ${i} /${LOOP_LIMIT} ..."
24- sleep 5
26+ sleep 1
2527 mysql -uroot -e " status" > /dev/null 2>&1 && break
2628 done
2729}
2830
2931CreateMySQLUser ()
3032{
31- StartMySQL
32-
33- # Setup DB
34- if [ " $ON_CREATE_DB " = " **False**" ]; then
35- unset ON_CREATE_DB
36- else
37- echo " Creating MySQL database ${ON_CREATE_DB} "
38- mysql -uroot -e " CREATE DATABASE IF NOT EXISTS ${ON_CREATE_DB} ;"
39- echo " Database created!"
40- fi
33+ # Setup DB
34+ if [ " $ON_CREATE_DB " = " **False**" ]; then
35+ unset ON_CREATE_DB
36+ else
37+ echo " Creating MySQL database ${ON_CREATE_DB} "
38+ mysql -uroot -e " CREATE DATABASE IF NOT EXISTS ${ON_CREATE_DB} ;"
39+ echo " Database created!"
40+ fi
4141
4242 if [ " $MYSQL_PASS " = " **Random**" ]; then
4343 unset MYSQL_PASS
@@ -49,10 +49,7 @@ CreateMySQLUser()
4949
5050 mysql -uroot -e " CREATE USER '${MYSQL_USER} '@'%' IDENTIFIED BY '$PASS '"
5151 mysql -uroot -e " GRANT ALL PRIVILEGES ON *.* TO '${MYSQL_USER} '@'%' WITH GRANT OPTION"
52-
53-
5452 echo " => Done!"
55-
5653 echo " ========================================================================"
5754 echo " You can now connect to this MySQL Server using:"
5855 echo " "
@@ -61,20 +58,14 @@ CreateMySQLUser()
6158 echo " Please remember to change the above password as soon as possible!"
6259 echo " MySQL user 'root' has no password but only allows local connections"
6360 echo " ========================================================================"
64-
65- mysqladmin -uroot shutdown
6661}
6762
6863ImportSql ()
6964{
70- StartMySQL
71-
7265 for FILE in ${STARTUP_SQL} ; do
7366 echo " => Importing SQL file ${FILE} "
7467 mysql -uroot < " ${FILE} "
7568 done
76-
77- mysqladmin -uroot shutdown
7869}
7970
8071# Main
@@ -86,6 +77,39 @@ if [ ${REPLICATION_SLAVE} == "**False**" ]; then
8677 unset REPLICATION_SLAVE
8778fi
8879
80+ # Set MySQL REPLICATION - MASTER
81+ if [ -n " ${REPLICATION_MASTER} " ]; then
82+ echo " => Configuring MySQL replication as master (1/2) ..."
83+ if [ ! -f /replication_set.1 ]; then
84+ RAND=" $( date +%s | rev | cut -c 1-2) $( echo ${RANDOM} ) "
85+ echo " => Writting configuration file '${CONF_FILE} ' with server-id=${RAND} "
86+ sed -i " s/^#server-id.*/server-id = ${RAND} /" ${CONF_FILE}
87+ sed -i " s/^#log-bin.*/log-bin = mysql-bin/" ${CONF_FILE}
88+ touch /replication_set.1
89+ else
90+ echo " => MySQL replication master already configured, skip"
91+ fi
92+ fi
93+
94+ # Set MySQL REPLICATION - SLAVE
95+ if [ -n " ${REPLICATION_SLAVE} " ]; then
96+ echo " => Configuring MySQL replication as slave (1/2) ..."
97+ if [ -n " ${MYSQL_PORT_3306_TCP_ADDR} " ] && [ -n " ${MYSQL_PORT_3306_TCP_PORT} " ]; then
98+ if [ ! -f /replication_set.1 ]; then
99+ RAND=" $( date +%s | rev | cut -c 1-2) $( echo ${RANDOM} ) "
100+ echo " => Writting configuration file '${CONF_FILE} ' with server-id=${RAND} "
101+ sed -i " s/^#server-id.*/server-id = ${RAND} /" ${CONF_FILE}
102+ sed -i " s/^#log-bin.*/log-bin = mysql-bin/" ${CONF_FILE}
103+ touch /replication_set.1
104+ else
105+ echo " => MySQL replicaiton slave already configured, skip"
106+ fi
107+ else
108+ echo " => Cannot configure slave, please link it to another MySQL container with alias as 'mysql'"
109+ exit 1
110+ fi
111+ fi
112+
89113# Initialize empty data volume and create MySQL user
90114if [[ ! -d $VOLUME_HOME /mysql ]]; then
91115 echo " => An empty or uninitialized MySQL volume is detected in $VOLUME_HOME "
@@ -96,11 +120,15 @@ if [[ ! -d $VOLUME_HOME/mysql ]]; then
96120 mysql_install_db > /dev/null 2>&1
97121 echo " => Done!"
98122 echo " => Creating admin user ..."
123+ StartMySQL
99124 CreateMySQLUser
100125else
101126 echo " => Using an existing volume of MySQL"
127+ StartMySQL
102128fi
103129
130+ tail -F $LOG &
131+
104132# Import Startup SQL
105133if [ -n " ${STARTUP_SQL} " ]; then
106134 if [ ! -f /sql_imported ]; then
@@ -110,44 +138,31 @@ if [ -n "${STARTUP_SQL}" ]; then
110138 fi
111139fi
112140
113-
114141# Set MySQL REPLICATION - MASTER
115- if [ -n " ${REPLICATION_MASTER} " ]; then
116- echo " => Configuring MySQL replication as master ..."
117- if [ ! -f /replication_configured ]; then
118- RAND=" $( date +%s | rev | cut -c 1-2) $( echo ${RANDOM} ) "
119- echo " => Writting configuration file '${CONF_FILE} ' with server-id=${RAND} "
120- sed -i " s/^#server-id.*/server-id = ${RAND} /" ${CONF_FILE}
121- sed -i " s/^#log-bin.*/log-bin = mysql-bin/" ${CONF_FILE}
122- echo " => Starting MySQL ..."
123- StartMySQL
142+ if [ -n " ${REPLICATION_MASTER} " ]; then
143+ echo " => Configuring MySQL replication as master (2/2) ..."
144+ if [ ! -f /replication_set.2 ]; then
124145 echo " => Creating a log user ${REPLICATION_USER} :${REPLICATION_PASS} "
125146 mysql -uroot -e " CREATE USER '${REPLICATION_USER} '@'%' IDENTIFIED BY '${REPLICATION_PASS} '"
126147 mysql -uroot -e " GRANT REPLICATION SLAVE ON *.* TO '${REPLICATION_USER} '@'%'"
148+ mysql -uroot -e " reset master"
127149 echo " => Done!"
128- mysqladmin -uroot shutdown
129- touch /replication_configured
150+ touch /replication_set.2
130151 else
131152 echo " => MySQL replication master already configured, skip"
132153 fi
133154fi
134155
135156# Set MySQL REPLICATION - SLAVE
136- if [ -n " ${REPLICATION_SLAVE} " ]; then
137- echo " => Configuring MySQL replication as slave ..."
157+ if [ -n " ${REPLICATION_SLAVE} " ]; then
158+ echo " => Configuring MySQL replication as slave (2/2) ..."
138159 if [ -n " ${MYSQL_PORT_3306_TCP_ADDR} " ] && [ -n " ${MYSQL_PORT_3306_TCP_PORT} " ]; then
139- if [ ! -f /replication_configured ]; then
140- RAND=" $( date +%s | rev | cut -c 1-2) $( echo ${RANDOM} ) "
141- echo " => Writting configuration file '${CONF_FILE} ' with server-id=${RAND} "
142- sed -i " s/^#server-id.*/server-id = ${RAND} /" ${CONF_FILE}
143- sed -i " s/^#log-bin.*/log-bin = mysql-bin/" ${CONF_FILE}
144- echo " => Starting MySQL ..."
145- StartMySQL
160+ if [ ! -f /replication_set.2 ]; then
146161 echo " => Setting master connection info on slave"
147162 mysql -uroot -e " CHANGE MASTER TO MASTER_HOST='${MYSQL_PORT_3306_TCP_ADDR} ',MASTER_USER='${MYSQL_ENV_REPLICATION_USER} ',MASTER_PASSWORD='${MYSQL_ENV_REPLICATION_PASS} ',MASTER_PORT=${MYSQL_PORT_3306_TCP_PORT} , MASTER_CONNECT_RETRY=30"
163+ mysql -uroot -e " start slave"
148164 echo " => Done!"
149- mysqladmin -uroot shutdown
150- touch /replication_configured
165+ touch /replication_set.2
151166 else
152167 echo " => MySQL replicaiton slave already configured, skip"
153168 fi
@@ -157,5 +172,4 @@ if [ -n "${REPLICATION_SLAVE}" ]; then
157172 fi
158173fi
159174
160- tail -F $LOG &
161- exec mysqld_safe
175+ fg %1
0 commit comments