mysqldumpでテーブルロックを発生させない方法

      2016/05/23

mysqldumpでテーブルロックを発生させない方法

オプションを何も付けずにmysqldumpでデータベースの中身をダンプしようとすると、テーブルロックがかかります。

サービス運用中のサーバからデータのダンプをするときにテーブルロックがかかってしまうと、ダンプ中はサービスが止まってしまい大変なことになります。

今回はテーブルロックをかけずにmysqldumpでダンプする方法を紹介します。ただし、以下の二点の制限があります。

・データベースエンジンがInnoDBの時のみ有効
・ダンプ中に発生した変更はダンプされない

 

ご注意ください。手順的にはオプションを一つ追加するだけの簡単作業です。

 

■mysqldumpの--single-transactionオプションを利用する

 

--single-transactionオプションを利用することで、beginが実行された後にデータベースのダンプが始まります。さらに以下のSQLも発行され、分離レベルもREPEATABLE READに変更されます。

 

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ

 

beginが発行された時のスナップショット対してダンプをするという感じになり、テーブルロックがかからない仕組みです。トランザクションが発生するからInnoDB以外は動かないということですね。

 

念のため、バックアップが元に戻るのかもチェックしておいたほうが良いでしょう。

 

公式マニュアルにも書いてありました。参考にしてみてください。では。

 

megane

megane

最近、個人事業主から法人へと進化しました。 エンジニア歴13年位です。PHPとかMysqlを使ってWebシステムを構築します。 Javaも書きます。 CakePHPも使います。 サーバのチューニングもごりごりやります。 あと、お肉と自動車が好きです。Twitterとか申請どうぞ。

 - mysql ,