MySQLバックアップ&リストアまとめ
mysqldump利用上の注意点
- バックアップデータの整合性
- LOAD DATAでリストアを高速化する
- mysqldumpはデータがINSERTコマンドで表現されておりリストアに時間が掛かる
- データをタブ区切りデータで出力し、LOAD DATAコマンドでリストアすることで高速にリストアできる
- tabオプションを利用することで、テーブル名.sql(テーブル定義、CREATEコマンド)とテーブル名.txt(テーブルのデータ)が作成される
shell>mysqldump [options] --tab=ファイルの出力先 [データベースやテーブルの指定]
-
- リストア時には.sqlファイルでテーブルを再作成し、LOAD DATAコマンドで.txtのファイルをロードする。
- tabオプションは--databaseおよび--all-databasesオプションと併用できないことに注意
- ログのローテーション
- バイナリログで差分バックアップを行いたい場合は、mysqldump時に--flush-logsオプションを付けてバイナリログのローテーションを行う。
- そうすることで、フルバックアップに適用するべきバイナリログの開始位置が新しいログファイルの先頭からになりわかりやすくなる。
- しかし、そのままだと複数のDBをダンプする場合に個々のダンプを解する時点でログのローテーションが行われてしまうので、対策として、--master-dataオプションを利用することでmysqldumpトランザクションの開始とログのローテーションを同期する。
- つまり、複数DBのdump時に--flush-logsオプションを利用する場合は、--master-dataオプションは必須
- ただし、master-dataは本来レプリケーションスレーブのセットアップをするためのオプションで、バイナリログのファイル名と現在位置をCHANGE MASTER TO 形式で出力するためのもの。これをコメントアウトするために、--master-data=2を指定する。
リストア方法
- dumpファイルのリストア
- LOAD DATA(.sqlの方はdumpファイルのリストアと同じ方法。ここではデータの中身の戻し方)
mysql> LOAD DATA INFILE '/backup/テーブル名.txt' INTO TABLE テーブル名;