オプションを何も付けずにmysqldumpでデータベースの中身をダンプしようとすると、テーブルロックがかかります。
サービス運用中のサーバからデータのダンプをするときにテーブルロックがかかってしまうと、ダンプ中はサービスが止まってしまい大変なことになります。
今回はテーブルロックをかけずにmysqldumpでダンプする方法を紹介します。ただし、以下の二点の制限があります。
・データベースエンジンがInnoDBの時のみ有効
・ダンプ中に発生した変更はダンプされない
ご注意ください。手順的にはオプションを一つ追加するだけの簡単作業です。
■mysqldumpの–single-transactionオプションを利用する
–single-transactionオプションを利用することで、beginが実行された後にデータベースのダンプが始まります。さらに以下のSQLも発行され、分離レベルもREPEATABLE READに変更されます。
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
beginが発行された時のスナップショット対してダンプをするという感じになり、テーブルロックがかからない仕組みです。トランザクションが発生するからInnoDB以外は動かないということですね。
念のため、バックアップが元に戻るのかもチェックしておいたほうが良いでしょう。
公式マニュアルにも書いてありました。参考にしてみてください。では。