今回はMySQLのオンラインバックアップ手順について書いてみます。
オンラインバックアップ環境の概要は MySQLバックアップリカバリ 推奨手順 (LINUX環境) を参照ください。
この手順では、MyISAMとInnoDB混合環境を想定し、システム全体で一貫性のあるバックアップを前提としています。
①MySQLサーバに接続し、データベースの全テーブルに対する共有ロックを取得
[mysql@SERVER ~]$mysql -u root –prootpass
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.0.79-enterprise-gpl-log MySQL Enterprise Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>flush tables with read lock;
flush tables with read lock文は、バッファキャッシュ上のデータが全てファイルにフラッシュし、MySQLサーバの全テーブルに共有ロックをかけます。
②LVM Snapshotの作成
[mysql@SERVER ~]$ sudo /usr/sbin/lvcreate --snapshot -L4G -n snapLV02 \
/dev/VolGroup00/LogVol02
Logical volume "snapLV02" created
※sudoの実行には事前にvisudo でsudoersを設定が必要
/dev/VolGroup00/LogVol02 は、MySQLのバックアップ対象ファイルが保存されたボリュームです。
複数ボリュームに対象ファイルが存在する場合は、複数スナップショットを作成してください。
③バイナリログのスイッチとポジションの確認
mysql>FLUSH LOGS;
mysql>SHOW MASTER STATUS;
+--------------+------------+------------+-----------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------+------------+------------+-----------+
| mysql-bin.000002 | 98 | | |
+--------------+------------+------------+-----------+
FLUSH LOGSを実行すると、バイナリログ(バイナリログについては3-5で説明します)がスイッチされます。リカバリ後のロールフォワードは、ここでスイッチされたものから適用することになります。この際、SHOW MASTER STATUSで、スイッチされた後のバイナリログファイル名とポジションを確認することをお勧めします。
④テーブルの共有ロックを解除
mysql>unlock tables;
Unlock tables文を発行することで、①で取得した全テーブルへの共有ロックを解除します。
※①~③の操作中にクライアント接続を切断するとロックが解除されてしまうため、スクリプト等で自動化する場合は、以下のように実行します。
[mysql@SERVER ~]$ mysql -u root -prootpass -e ‘flush tables with read lock;system \
sh LVsnap.sh ; flush logs; show master status ; unlock tables;'
⑤Snapshotボリュームを読取専用でマウント
[mysql@SERVER ~]$ sudo /bin/mount -o ro /dev/VolGroup00/snapLV02 /snapLV02
⑥バックアップ対象ファイルをアーカイブ
[mysql@SERVER ~]$ cd /snapLV02/mysql/;tar cvf /backup/mysql/Hotbk20090428.tar ./*
この例では、/snapLV2/mysql/ 配下に必要な対象ファイルが全て存在する事とします。また、バックアップ先ボリュームは /backup/mysql となります。
⑦snapshotボリュームをアンマウントし、snapshotを削除
[mysql@SERVER ~]$ sudo /bin/umount /dev/VolGroup00/snapLV02
[mysql@SERVER ~]$ sudo /usr/sbin/lvremove -f /dev/VolGroup00/snapLV02
Logical volume "snapLV02" successfully removed
⑧バックアップ済みのバイナリログを削除
mysql>PURGE MASTER LOGS TO mysql-bin.000002
③で確認したバイナリログファイル以前のファイルがバックアップ済みである前提です。 mysql-bin.000002より以前のバイナリログファイルは全て削除されます。
6月 02
This entry was posted You can leave a response, or trackback from your own site.
コメント入力欄