LVMスナップショットバックアップのためのシェルスクリプトを作った
今までmysqldumpを使ったデイリーバックアップを行っていたんですが、 いざ障害時に復旧しようとすると、SQLの実行のための時間がかかりすぎる、MERGEテーブルに対応していない(のでSQLをsedで書き換えるハメになった)等の理由から、LVMスナップショットバックアップに移行することにしました。
というわけでさっき
というスクリプトを書きました。何かの参考にするために上げておきます。LV消したりとか危ない事を自動化しているので、これを使ったり参考にしたりした事によるいかなる損害も保障しません。また、このスクリプトを実行する前に、バックアップしたいVolumeGroup上に、スナップショット用の空き容量(今回は1GB)を作る必要があります。
やってること
- MySQLをFLUSH TABLEする(書き込みバッファの内容をファイルに書き出す)
- /dev/ssdvg VolumeGroupのlv01 Logical Volumeのスナップショットを /dev/ssdvg/lvSnapに1GBで作成
- /var/lib/mysql/favotterを /バックアップ先ディレクトリ/<日付>-
にコピーする - /dev/ssdvg/lvSnap LVを削除する
- コピーをtar.gz圧縮する。
#/usr/bin/sh DATE=`date '+%Y-%m-%d-%a%H:%M:%S'`; SRC_LV="/dev/ssdvg/lv01"; SNAP_LV="/dev/ssdvg/lvSnap"; SNAP_SIZE=1G; DB_NAME="favotter"; DB_PATH="lib/mysql/$DB_NAME/"; DB_PASSWORD="<your db password>"; DEST_PATH="/home/matope/Documents/favotter/dbbackup/hotcopy/"; DEST_FULL=$DEST_PATH$DATE-$DB_NAME; sudo mkdir /mnt/snap; sudo /sbin/modprobe dm_snapshot; sudo /sbin/lsmod | grep snapshot; mysqladmin -u root -p$DB_PASSWORD flush-tables; sudo /usr/sbin/lvcreate -s -L $SNAP_SIZE -n lvSnap $SRC_LV; sudo mount $SNAP_LV /mnt/snap; sudo cp -rpv /mnt/snap/$DB_PATH $DEST_FULL; sudo umount /mnt/snap; sudo /usr/sbin/lvremove $SNAP_LV --force; sudo tar -cvzf $DEST_FULL.tar.gz $DEST_FULL;
この本を参考にしました。すごく実用的でおすすめです。ふぁぼったーもめきめき高可用性ゲットやでー
Linux-DB システム構築/運用入門 (DB Magazine SELECTION)
- 作者: 松信嘉範
- 出版社/メーカー: 翔泳社
- 発売日: 2009/09/17
- メディア: 単行本(ソフトカバー)
- 購入: 55人 クリック: 3,402回
- この商品を含むブログ (32件) を見る