start_slave.sh
#!/bin/sh
# replicationを開始するscript
master_host="db-master"
master_user="root"
master_password="hogehoge"
slave_host="localhost"
slave_user="root"
slave_password="hogehoge"
target_db="fugafuga"
dump_file="/root/db_master_dump.sql"
while ! mysqladmin ping -h $master_host --silent; do
sleep 1
done
# masterのdumpを取得する
# mysqldumpのオプションについて
# --master-data
# masterのbinlogファイル、positionを出力する
# https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html#option_mysqldump_master-data
#
# --single-transaction
# https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html#option_mysqldump_single-transaction
mysqldump -u$master_user -p$master_password -h $master_host --databases $target_db --master-data --single-transaction --events > $dump_file
# slave停止 & リセット
mysql -h$slave_host -u$slave_user -p$slave_password -e "STOP SLAVE"
mysql -h$slave_host -u$slave_user -p$slave_password -e "RESET SLAVE"
# slaveにmasterの向き先を設定する
mysql -h$slave_host -u$slave_user -p$slave_password -e "CHANGE MASTER TO MASTER_HOST='$master_host', MASTER_USER='$master_user', MASTER_PASSWORD='$master_password'"
# slaveにdumpを流し込む
# dumpに CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.XXXXXX', MASTER_LOG_POS=XXXXX; が含まれているため、
# MASTER_LOG_FILE、MASTER_LOG_POSの設定もされる。
mysql -h$slave_host -u$slave_user -p$slave_password < $dump_file
# slave再開
mysql -h$slave_host -u$slave_user -p$slave_password -e "START SLAVE"