さて、前回はGalera Clusterからノードを切り離しての、もしくはLVMスナップショットを用いてのバックアップ・リストアを紹介した。
で、次は以下の3つのうち2個目である、mysqldumpを用いてのオンライン・バックアップについて検証したいと思う。

  1. GaleraClusterの構成ノードを切り離しorLVMのスナップショットを使用し、ファイルをバックアップする
  2. mysqldumpを使用してオンラインバックアップ
  3. Percona XtraBackupを使用してオンラインバックアップ

1.バックアップ

まずはバックアップ。mysqldumpでは「--single-transaction」オプションを付与することで、その瞬間のデータのスナップショットを取得し、その間にデータが更新されたとしてもその瞬間のデータのみをバックアップとして保有してくれる。
以下のコマンドで、データベース全体のフルバックアップを取得する。

mysqldump -u root -p --single-transaction -A > バックアップファイルPATH

特定のデータベースのみバックアップする場合は、以下のようにコマンドを実行する。

mysqldump データベース名 -u root -p --single-transaction -A > バックアップファイルPATH

これで、フルバックアップが取得できる。
次に、任意のタイミングに戻す場合には、定期的にバイナリログの差分バックアップを取得する必要がある。

これについては、まずフルバックアップのコマンドに「--flush-logs」を付与し、バックアップ取得と同時にバイナリログを切り替えるように指定をする。

フルバックアップ取得時

mysqldump データベース名 -u root -p --single-transaction -A --flush-logs > バックアップファイルPATH
[root@BS-PUB-GALERA-03 mysql]# ls -la /var/lib/mysql/binlog.*
-rw-rw---- 1 mysql mysql    342  2月  7 18:01 /var/lib/mysql/binlog.000001
-rw-r----- 1 mysql mysql    359  2月  7 17:01 /var/lib/mysql/binlog.000012
-rw-r----- 1 mysql mysql    809  2月  7 17:01 /var/lib/mysql/binlog.000013
-rw-rw---- 1 mysql mysql    342  2月  7 17:02 /var/lib/mysql/binlog.000014
-rw-rw---- 1 mysql mysql    363  2月  7 17:02 /var/lib/mysql/binlog.000015
-rw-rw---- 1 mysql mysql    399  2月  7 17:02 /var/lib/mysql/binlog.000016
-rw-rw---- 1 mysql mysql   1643  2月  7 17:34 /var/lib/mysql/binlog.000017
-rw-rw---- 1 mysql mysql    342  2月  7 17:34 /var/lib/mysql/binlog.000018
-rw-rw---- 1 mysql mysql 472869  2月  7 17:35 /var/lib/mysql/binlog.000019
-rw-rw---- 1 mysql mysql    399  2月  7 17:35 /var/lib/mysql/binlog.000020
-rw-rw---- 1 mysql mysql 472905  2月  7 17:49 /var/lib/mysql/binlog.000021
-rw-rw---- 1 mysql mysql    399  2月  7 17:49 /var/lib/mysql/binlog.000022
-rw-rw---- 1 mysql mysql    342  2月  7 18:03 /var/lib/mysql/binlog.000023
-rw-rw---- 1 mysql mysql    342  2月  7 18:03 /var/lib/mysql/binlog.000024
-rw-rw---- 1 mysql mysql    363  2月  7 19:40 /var/lib/mysql/binlog.000025
-rw-rw---- 1 mysql mysql    399  2月  7 19:41 /var/lib/mysql/binlog.000026
-rw-rw---- 1 mysql mysql    399  2月  7 19:41 /var/lib/mysql/binlog.000027
-rw-rw---- 1 mysql mysql    359  2月  7 19:41 /var/lib/mysql/binlog.000028
-rw-rw---- 1 mysql mysql    174  2月  7 19:41 /var/lib/mysql/binlog.index
[root@BS-PUB-GALERA-03 mysql]# mysqldump -u root --single-transaction -A --flush-logs > /tmp/backup1
[root@BS-PUB-GALERA-03 mysql]# ls -la /var/lib/mysql/binlog.*
-rw-rw---- 1 mysql mysql    342  2月  7 18:01 /var/lib/mysql/binlog.000001
-rw-r----- 1 mysql mysql    359  2月  7 17:01 /var/lib/mysql/binlog.000012
-rw-r----- 1 mysql mysql    809  2月  7 17:01 /var/lib/mysql/binlog.000013
-rw-rw---- 1 mysql mysql    342  2月  7 17:02 /var/lib/mysql/binlog.000014
-rw-rw---- 1 mysql mysql    363  2月  7 17:02 /var/lib/mysql/binlog.000015
-rw-rw---- 1 mysql mysql    399  2月  7 17:02 /var/lib/mysql/binlog.000016
-rw-rw---- 1 mysql mysql   1643  2月  7 17:34 /var/lib/mysql/binlog.000017
-rw-rw---- 1 mysql mysql    342  2月  7 17:34 /var/lib/mysql/binlog.000018
-rw-rw---- 1 mysql mysql 472869  2月  7 17:35 /var/lib/mysql/binlog.000019
-rw-rw---- 1 mysql mysql    399  2月  7 17:35 /var/lib/mysql/binlog.000020
-rw-rw---- 1 mysql mysql 472905  2月  7 17:49 /var/lib/mysql/binlog.000021
-rw-rw---- 1 mysql mysql    399  2月  7 17:49 /var/lib/mysql/binlog.000022
-rw-rw---- 1 mysql mysql    342  2月  7 18:03 /var/lib/mysql/binlog.000023
-rw-rw---- 1 mysql mysql    342  2月  7 18:03 /var/lib/mysql/binlog.000024
-rw-rw---- 1 mysql mysql    363  2月  7 19:40 /var/lib/mysql/binlog.000025
-rw-rw---- 1 mysql mysql    399  2月  7 19:41 /var/lib/mysql/binlog.000026
-rw-rw---- 1 mysql mysql    399  2月  7 19:41 /var/lib/mysql/binlog.000027
-rw-rw---- 1 mysql mysql    399  2月  7 19:43 /var/lib/mysql/binlog.000028
-rw-rw---- 1 mysql mysql    359  2月  7 19:43 /var/lib/mysql/binlog.000029
-rw-rw---- 1 mysql mysql    203  2月  7 19:43 /var/lib/mysql/binlog.index

上記例の場合、「binlog.000029」というファイルが新しく作られている事が確認できる。
あとは、このバイナリログ以降のファイル(binlog.000029以降の連番のファイル)を定期的にバックアップしていけばいい。

2.リストア

次にリストア。
GaleraClusterの各ノードで、リストア作業を実施する一台を残してMariaDBを停止、既存のデータベースファイルを退避する。

service mysql stop
mv /var/lib/mysql /var/lib/mysql.$(date +%Y%m%d)

次に、リストア作業を実施するサーバにバックアップファイルを移動し、以下のコマンドを実行する。

mysql -u root -p > バックアップファイル

もし、バイナリログを有効にし、差分バックアップを取得しており、特定の時間に戻したい場合は、以下のコマンドも追加で実行する。

mysqlbinlog -u root -D 差分バックアップのバイナリログ・ファイルPATH --start-datetime="適用させる開始時刻" --stop-datetime="適用させる終了時刻" > 差分バックアップ分の適用SQLファイルPATH
mysql -u root -p < 差分バックアップ分の適用SQLファイルPATH

後は、最初に停止した各ノードでMariaDBを開始すれば良い。

service mysql start