1. 概要
本記事では、XtraBackupによるホットバックアップを利用してMySQLのマスター・スレーブ構成を構築する手順について説明します。
2. 環境情報
- マスターデータベース:MySQL 5.5.54
- スレーブデータベース:MySQL 5.7.25
3. 構築手順
- バックアップデータをスレーブサーバにコピーします。
- スレーブ側のMySQLインストール手順は省略します。
- スレーブのMySQLを停止し、既存のデータを削除します。
スレーブのインストールディレクトリ構造:
$ tree -L 1
.
├── data
├── log
├── my.cnf
├── run
└── tmp
dataディレクトリ内、およびlog内のbinlog、ibdata1ファイルを削除します。
4. バックアップデータ一覧
# ll
total 24
drwxr-x--- 9 mysql mysql 4096 Nov 14 15:14 20191110_0_full
drwxr-x--- 9 mysql mysql 4096 Nov 14 15:14 20191111_1_incremental
drwxr-x--- 9 mysql mysql 4096 Nov 14 15:15 20191112_2_incremental
drwxr-x--- 9 mysql mysql 4096 Nov 14 15:15 20191113_3_incremental
drwxr-x--- 9 mysql mysql 4096 Nov 14 15:15 20191114_4_incremental
5. バックアップの適用
# innobackupex --apply-log --redo-only 20191110_0_full
# innobackupex --apply-log --redo-only --incremental-dir=20191111_1_incremental 20191110_0_full
# innobackupex --apply-log --redo-only --incremental-dir=20191112_2_incremental 20191110_0_full
# innobackupex --apply-log --redo-only --incremental-dir=20191113_3_incremental 20191110_0_full
# innobackupex --apply-log --incremental-dir=20191114_4_incremental 20191110_0_full
# innobackupex --apply-log 20191110_0_full
# innobackupex --defaults-file=/u02/my3306/my.cnf --copy-back 20191110_0_full
6. ファイル権限の変更
# chown -R mysql:mysql /u02/my3306
7. MySQLの起動
su - mysql -c "/usr/local/mysql/bin/mysqld_safe --defaults-file=/u02/my3306/my.cnf &"
8. バイナリログ情報の取得
最後の増分バックアップディレクトリにあるxtrabackup_binlog_infoファイルを開きます。
$ cat xtrabackup_binlog_info
mysql-bin.000617 31060438
9. レプリケーション用ユーザの作成
# mysql -uroot -p -S /u02/my3306/run/mysql.sock
mysql> grant replication slave on *.* to 'repl'@'xxx' identified by 'xxxx';
10. スレーブ側でのマスター設定
change master to
master_host = 'xxx',
master_user = 'repl',
master_password = 'xxxx',
master_port = 3306,
master_log_file = 'mysql-bin.000617',
master_log_pos = 31060438;
11. GTIDを使用する場合
reset master;
set @@GLOBAL.GTID_PURGED="xxx:1-132464";
change master to
master_host = 'xxx',
master_user = 'repl',
master_password = 'xxxx',
master_port = 3306,
MASTER_AUTO_POSITION = 1;
12. エラーハンドリング
バージョン差によりエラーが発生した場合は以下のコマンドを実行します:
# mysql_upgrade -u root -p -S /u02/my3306/run/mysql.sock
13. 指定時間復旧手順
バックアップとbinlogを組み合わせて、特定の時間点まで復旧できます。
- バックアップを適用したデータベースを準備します。
- 増分バックアップ後のbinlogをSQL形式に変換します。
# mysqlbinlog --start-position=31060438 mysql-bin.000006 >> /tmp/tmp.sql
# cat /tmp/tmp.sql | grep -C 20 -i "drop table"
- drop文直前の位置(例:41060438)までを抽出します。
# mysqlbinlog --start-position=31060438 --stop-position=41060438 mysql-bin.000006 > /tmp/tmp2019.sql
- SQLファイルを適用します。
# mysql -uroot -p < /tmp/tmp2019.sql