はじめに
XtraBackupを利用して、MySQLのレプリケーションを構成します。
非常に簡単です。
XtraBackup概要
- https://www.percona.com/doc/percona-xtrabackup/2.4/index.html
- オンラインでデータディレクトリを丸ごとバックアップできるため、リストアが高速
- 単体ではInnoDBのDBのみバックアップされるが、ラッパースクリプトinnobackupexを利用することで下記もバックアップされる。
- MySQLシステムデータベース(mysql, performance_schema)
- MyISAMデータファイル
- InnoDBテーブル定義ファイル(.frm)
メリット
- バックアップ成果物はMySQLデータディレクトリそのものなので、ログ適用→フォルダの入れ替えによるリストアとなり、作業が楽
- リストアが高速。12GBのデータベースのリストアが5分程度で完了(gzip解凍時間込み)
- レプリケーション構築も簡単
- --no-lockオプションにより、ロックフリーでのバックアップが可能
デメリット
- mysqldumpに比べて圧縮後のバックアップファイルサイズが大きい
- バックアップ取得はそれなりに時間がかかる
特記事項
- --compressで圧縮できるが、qpressのインストールが必要(XtraBackupと同じリポジトリにある)。ファイル単位で圧縮される。
- --decompressで解凍できるが、圧縮ファイルが残るので、別途手動削除が必要。
- 圧縮速度を高めるためにストリームを多重化し、マルチスレッドで処理することが可能
手順
master
1.バックアップ
非圧縮
command
# mkdir /tmp/xtrabackup
# innobackupex --user=root --password=XXXXXXXX /tmp/xtrabackup
# ll /tmp/xtrabackup
drwxr-x--- 6 root root 4096 Apr 27 12:05 2017-04-27_12-05-05
# ll /tmp/xtrabackup/2017-04-27_12-05-05
total 12340
-rw-r----- 1 root root 425 Apr 27 12:05 backup-my.cnf
drwxr-x--- 2 root root 55 Apr 27 12:05 example
-rw-r----- 1 root root 300 Apr 27 12:05 ib_buffer_pool
-rw-r----- 1 root root 12582912 Apr 27 12:05 ibdata1
drwxr-x--- 2 root root 4096 Apr 27 12:05 mysql
drwxr-x--- 2 root root 8192 Apr 27 12:05 performance_schema
drwxr-x--- 2 root root 8192 Apr 27 12:05 sys
-rw-r----- 1 root root 21 Apr 27 12:05 xtrabackup_binlog_info
-rw-r----- 1 root root 113 Apr 27 12:05 xtrabackup_checkpoints
-rw-r----- 1 root root 471 Apr 27 12:05 xtrabackup_info
-rw-r----- 1 root root 2560 Apr 27 12:05 xtrabackup_logfile
gzip圧縮
command
# innobackupex --user=root --password=XXXXXXXX --stream=tar /tmp/xtrabackup | gzip - > /tmp/xtrabackup/master_xtra.tgz
slave
1.masterからバックアップファイルを転送
/tmp/xtrabackupに置くと仮定
2.リストア
a.解凍
command
# cd /tmp/xtrabackup
# tar zxvf master_xtra.tgz
# rm master_xtra.tgz
b.ログ適用(必須)
command
# innobackupex --apply-log /tmp/xtrabackup/
c.mysql停止
command
# service mysqld stop
d.データディレクトリ退避
削除でもいいです。
command
# mv /var/lib/mysql /var/lib/mysql.bk
e.リストア
command
# mv /tmp/xtrabackup /var/lib/mysql
# chown -R mysql:mysql /var/lib/mysql
f.mysql起動
command
# service mysqld start
3.レプリケーション設定
a.バイナリログ、ポジション情報確認
バックアップ時に作成されるxtrabackup_binlog_infoファイルにログポジンション情報が記載されています。便利!
command
# cat /var/lib/mysql/xtrabackup_binlog_info
mysql-bin.000008 473
b.change master to
先ほどの情報をもとにchange master to
します。
command
# mysql -uroot -p
mysql> change master to
master_host='XX.XX.XX.XX',
master_user='REPLUSER',
master_password='REPLPASSWORD',
master_log_file='mysql-bin.000008',
master_log_pos=473;
c.レプリケーション開始
command
mysql> start slave;
d.スレーブの状態確認
command
mysql> show slave status\G
まとめ
とにかくリストアが高速なのが非常に使いやすいと思います。
インポートの終了をドキドキして待つのに比べて、精神衛生上もメリットが大きいかと。