LoginSignup
6
9

More than 5 years have passed since last update.

XtraBackupでMySQLのレプリケーションを構成する

Last updated at Posted at 2017-05-23

はじめに

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

まとめ

とにかくリストアが高速なのが非常に使いやすいと思います。
インポートの終了をドキドキして待つのに比べて、精神衛生上もメリットが大きいかと。

6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9