MYSQL5.5から利用出来る以下のOptionを検証してみました。
--dump-slave --apply-slave-statements --include-master-host-port
前回はマスターで取得したデータはマスターのバイナリーログでリカバリー、
スレーブで取得したバックアップはスレーブのバイナリーログでリカバリーするように
–master-data=2オプションを付与してバックアップしてリカバリーを検証。
MYSQLDUMPを利用したオンラインバックアップと差分ログ適用
MYSQL5.5から追加されたdump-slaveオプションを利用すると、
追加のスレーブ作成が簡単に出来ます。(STOP SLAVE ~ START SLAVEコマンドも含まれます。)
先ずはSlaveデータベースにてレプリケーション対象のDBをバックアップします。
[root@HOME002 backup]# mysqldump --single-transaction --flush-logs --dump-slave --apply-slave-statements --include-master-host-port --databases test > DUMP_AT_SLAVE.sql -u root -p Enter password: [root@HOME002 backup]# ls -l 合計 12 -rw-r--r-- 1 root root 4357 1月 27 16:18 DUMP_AT_SLAVE.sql [root@HOME002 backup]#
ダンプファイルは以下のようにスレーブのレプリケーションを停止して、
対象DBを再作成してマスターのログPOSITIONに合わせてからデータリストア後に
レプリケーションを再開しています。
[root@HOME002 backup]# cat DUMP_AT_SLAVE.sql -- MySQL dump 10.13 Distrib 5.5.29, for linux2.6 (i686) -- -- Host: localhost Database: test -- ------------------------------------------------------ -- Server version 5.5.29-log 省略..... -- -- stop slave statement to make a recovery dump) -- STOP SLAVE; -- -- Position to start replication or point-in-time recovery from (the master of this slave) -- CHANGE MASTER TO MASTER_HOST='HOME001', MASTER_PORT='3306', MASTER_LOG_FILE='mysql-bin.000008', MASTER_LOG_POS=107; -- -- Current Database: `test` -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `test`; -- -- Table structure for table `TABLE001` -- 省略..... -- -- start slave statement to make a recovery dump) -- START SLAVE; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; -- Dump completed on 2013-01-27 16:18:36 [root@HOME002 backup]#
上記のダンプファイルのCHANGE MASTERの部分に以下のスレーブユーザー設定を追記
MASTER_USER = 'slave_user',MASTER_PASSWORD = 'slave_password',
そして、新規Slaveの/etc/my.cnfにホストIDなどを追加しておけば、
直ぐにSlaveを追加する事が出来ます。
また、マスターのログとPOSITIONを参照しているのでマスターのDBが破損した場合も
リストアしてマスターのPOSITIONを確認した上でバイナリーログのリストアが可能です。
参考までにオプションを変更した場合のバックアップの違いは以下の通りです。
[root@HOME002 backup]# mysqldump --single-transaction --flush-logs --dump-slave --apply-slave-statements --include-master-host-port --databases test > DUMP_AT_SLAVE.sql -u root -p Enter password: [root@HOME002 backup]# mysqldump --single-transaction --flush-logs --master-data=2 --databases test > DUMP_WITH_MASTER.sql -u root -p Enter password: [root@HOME002 backup]# [root@HOME002 backup]# ls -l 合計 24 -rw-r--r-- 1 root root 4617 1月 27 17:37 DUMP_AT_SLAVE.sql -rw-r--r-- 1 root root 4409 1月 27 17:39 DUMP_WITH_MASTER.sql [root@HOME002 backup]# diff DUMP_AT_SLAVE.sql DUMP_WITH_MASTER.sql 19c19 < -- stop slave statement to make a recovery dump) --- > -- Position to start replication or point-in-time recovery from 22,28c22 < STOP SLAVE; < < -- < -- Position to start replication or point-in-time recovery from (the master of this slave) < -- < < CHANGE MASTER TO MASTER_HOST='HOME001', MASTER_PORT='3306', MASTER_LOG_FILE='mysql-bin.000008', MASTER_LOG_POS=126 2; --- > -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000016', MASTER_LOG_POS=107; 63,68d56 < < -- < -- start slave statement to make a recovery dump) < -- < < START SLAVE; 79c67 < -- Dump completed on 2013-01-27 17:37:42 --- > -- Dump completed on 2013-01-27 17:39:13 [root@HOME002 backup]#
参考サイト
MySQLコミュニティ騒然!MySQL 5.5.4が与えるインパクト。
MySQL 5.5新機能徹底解説
MYSQLDUMPを利用したオンラインバックアップと差分ログ適用