- ベストアンサー
データベースのバックアップ方法と注意点
- MYSQLのDBバックアップについて調査した結果、mysqldumpコマンドを利用することにしました。
- しかし、mysqldumpコマンドを実行中にDBへの書き込みが発生すると、バックアップ後のダンプファイルへ正常に反映されない可能性があります。
- 環境はRHEL4とMYSQL4.1.2で、バックアップ対象のDBは2つあります。片方のDBはMyISAM型のみで、もう一つのDBはInnoDBのみです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
レスもないのに一生懸命答える自分が好きですw mysqldumpの内部動作 1.mysqldump実行開始 2.flush tables with read lock; 3.set transaction isolation level repeatable read; 4.start transaction with consistent snapshot; 5.flush logs; 6.unlock tables; 7.すべてのテーブルに対してselect文を実行 8.mysqldump実行終了 つまり、#1で書いた事象は、2.において共有ロックが確保できないのでmysqldumpが中断する動きになるようです。 InnoDBとそれ以外のテーブルをバックアップする場合に気をつけるのは、4.の部分だそうです。 4.は、InnoDBにしか効果がないので、他のテーブルの一貫性が保たれない可能性があるそうです。 対処するためには、7.の段階においても共有ロックをかける必要があるので、mysqldumpの実行コマンド・オプションに--lock-all-tablesを加える必要があるそうです。 最後になりましたが、質問に対する答えとしては、 mysqldumpコマンドのオプション、業務で発行するSQL、スキーマ構成により、一貫性のないバックアップを取得する可能性がある、ということになると思います。
その他の回答 (2)
- mooboogie
- ベストアンサー率68% (28/41)
宣伝と間違われるとまずいので。 「mysql 最速 構築」で検索すると分かる本で勉強させてもらっています。 過去ログで勉強や調査をしている人のために、どう了解したのか、または了解しなかったのかを書いて頂けると良いのかもしれません。 けど、それも含めてお任せします。
- mooboogie
- ベストアンサー率68% (28/41)
書き込み側が、WriteのLOCK TABLES を発行した後の書き込みであれば、mysqldumpによるバックアップの方が停止します。 Unlockでmysqldumpは再開します。 InnoDBでは運用していないので、そちらの動作はよくわかりません。
お礼
別の業務でバタバタしてて質問した事をすっかり忘れておりました。 申し訳ありません… ご丁寧な回答有難う御座いました。 バックアップを取る上での参考とさせて頂きたいと思います。 ちなみに今回の回答は本か何かで調べられたんでしょうか? 差し支えなければ教えて下さい。