MySQLのXtraBackupを使用したレプリケーション環境構築

1. 概要

本記事では、XtraBackupによるホットバックアップを利用してMySQLのマスター・スレーブ構成を構築する手順について説明します。

2. 環境情報

  • マスターデータベース:MySQL 5.5.54
  • スレーブデータベース:MySQL 5.7.25

3. 構築手順

  1. バックアップデータをスレーブサーバにコピーします。
  2. スレーブ側のMySQLインストール手順は省略します。
  3. スレーブの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を組み合わせて、特定の時間点まで復旧できます。

  1. バックアップを適用したデータベースを準備します。
  2. 増分バックアップ後のbinlogをSQL形式に変換します。
# mysqlbinlog --start-position=31060438 mysql-bin.000006 >> /tmp/tmp.sql
# cat /tmp/tmp.sql | grep -C 20 -i "drop table"
  1. drop文直前の位置(例:41060438)までを抽出します。
# mysqlbinlog --start-position=31060438 --stop-position=41060438 mysql-bin.000006 > /tmp/tmp2019.sql
  1. SQLファイルを適用します。
# mysql -uroot -p < /tmp/tmp2019.sql

タグ: MySQL XtraBackup Replication GTID mysqlbinlog

5月19日 11:11 投稿