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

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

1.バックアップ

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

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

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

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

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

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

フルバックアップ取得時

bash
mysqldump データベース名 -u root -p --single-transaction -A --flush-logs > バックアップファイルPATH
shell
[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を停止、既存のデータベースファイルを退避する。

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

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

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

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

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

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

bash
service mysql start