LVM + XFSで高速簡単 MySQLバックアップ
Tweet
こんにちは satoです。
Slaveサーバを運用している場合、MySQLのバックアップファイルが
必要になる場面は少ないです。
しかし、プログラムのバグなどで、データベースレコードの内容が
おかしくなってしまい、収集がつかなくり、巻き戻しをする場合などに
バックアップファイルがあると、とても便利です。
ということで、LVMのスナップショット機能でMySQLの
バックアップにチャレンジしてみました。
■前提条件
パーティションはこのような感じです
-----------------------
sda1 boot
-----------------------
sda2 xfs(linuxが入っている)
-----------------------
sda3 ここに作る
-----------------------
■構築時
fdisk /dev/sda n #新しくパーティションを作成 3 #作成するパーティション番号 enter #パーティションのスタート位置(デフォルト値) enter #パーティションの終了位置(デフォルト値) t #パーティションのタイプを変更 3 #変更するパーティション番号 8e #Linux-LVMを選択 w #書き込み & 終了pvcreate /dev/hda3 #物理ボリュームを作成
vgcreate vg1 /dev/hda3 #ボリュームグループを作成.
lvcreate -L 20G -n lv1 vg1 #論理ボリュームを作成
mkfs.xfs /dev/vg1/lv1 #xfsで初期化
mount /dev/vg1/lv1 /var/lib/mysql #マウント
(起動時にマウントはfstabとかに書き込む)
■バックアップ作成時
hotbackup.sh
-------------------
yes | lvremove -f /dev/vg1/lv1_snap #スナップショットを削除
sync #discにフラッシュ
sync
mysql -u username < hotbackup.sql(*1) #スナップショットを取る
mount -o ro,nouuid /dev/vg1/lv1_snap /mnt/snap #スナップショットマウント
nice cp /mnt/snap /misc/他サーバ/backups #コピー
umount /mnt/snap #スナップショットアンマウント
yes | lvremove -f /dev/vg1/lv1_snap #スナップショットを削除hotbackup.sql
-------------------
FLUSH TABLES WITH READ LOCK; #テーブルロック
#system xfs_freeze -f /var/lib/mysql(*2) #書き込みを停止
system lvcreate -s -L 10g -n lv1_snap /dev/vg1/lv1 #スナップショット作成
#system xfs_freeze -u /var/lib/mysql #書き込み再開
UNLOCK TABLES; #テーブルアンロック
exit
hotbackup.sh を cronとかに登録
(*1)
パスワードは引数で渡さずにホームディレクトリ内にある .my.cnf
などに書いておくようにする
http://dev.mysql.com/doc/refman/4.1/ja/connecting.html
(*2)
xfs_freeze をしてスナップショットをしたいのですが
なぜか応答が無くなってしまう。
http://marc.theaimsgroup.com/?l=linux-lvm&m=111014382900031&w=2
ということらしい。
これでデータが壊れないかは要検証
10回ほど実験してみましたが、壊れていなかったです。
もうちょっといろいろ試してみて、問題なさそうでしたら、
小さなプロジェクトから実運用してみたいと思います。
参考サイト
http://www.linux.or.jp/JF/JFdocs/LVM-HOWTO.html
http://www.h7.dion.ne.jp/~matsu/feature/uzumi/admin_memo/lvm_xfs.html
http://pantora.net/pages/linux/lvm

コメント
xfsのスナップショット→LVMのスナップショット修正しました。
指摘してくださってありがとうございます。
投稿者: sato | 2006年9月 7日 02:27