MYSQLを利用してsemi-synchronous-replicationしていても人的ミスでデータが無くなってしまう事もあるので、
バックアップは必ず定期的に計画的な運用の一環として行っておく。
レプリケーションしている場合は、負荷の高いマスターDBでダンプを取得しないでも運用・バックアップ専用スレーブで
バックアップ取得すれば利用者にも迷惑かけずにデータ保護する事が出来る。
——————————————
1:スレーブDBにてダンプ取得 2:マスターに取得したダンプをコピー 3:マスターにて意図的にテーブルTruncate
4:スレーブのデータも消えている事を確認 5:マスターDBにデータをリストア 6:スレーブにてDBが復旧している事を確認。
——————————————
スレーブで取得したデータをマスターでもリストアするので一応”master-data=2”を付けてバックアップ
master-data=2オプションはバックアップ時点のバイナリーログの位置情報をダンプファイル
に記録するオプションで、バイナリーログによるロールフォワードに利用されます。
[root@HOME002 mysql]# mysqldump --single-transaction --flush-logs --master-data=2 --databases test > MYSQL_dump20130111.sql -u root -p Enter password: [root@HOME002 mysql]#
こちらが”master-data=1”でダンプした場合。” CHANGE MASTER TO MASTER_LOG_FILE=, MASTER_LOG_POS=”がコメントアウトされて無い。
[root@HOME002 mysql]# mysqldump --single-transaction --flush-logs --master-data=1 --databases test > MYSQL_dump20130111.sql -u root -p Enter password: [root@HOME002 mysql]#
ダンプデータをスレーブからマスターに転送
[root@HOME002 mysql]# scp MYSQL_dump20130111.sql root@home001:/home/mysql/ root@home001's password: MYSQL_dump20130111.sql 100% 3211 3.1KB/s 00: [root@HOME002 mysql]#
マスターDBにてデータを削除(仮ミスオペ)し、リストア
mysql> truncate table TABLE001;
Query OK, 0 rows affected (0.40 sec)
mysql> select * from TABLE001;
Empty set (0.00 sec)
mysql> exit
Bye
[root@HOME001 mysql]# mysql -u root -p test < MYSQL_dump20130111.sql;
Enter password:
[root@HOME001 mysql]#
[/SHELL]
マスターとスレーブにてデータが復旧されている事を確認