17.3.1.1 mysqldump を使用してスレーブをバックアップする

mysqldump を使用してデータベースのコピーを作成することで、MySQL Server の別のインスタンスに情報をインポートできる形式でデータベース内のすべてのデータを取得できます (セクション4.5.4「mysqldump — データベースバックアッププログラム」を参照してください)。情報の形式が SQL ステートメントであるため、緊急時にデータにアクセスする必要がある場合にファイルを実行中サーバーに配布して適用することも簡単にできます。ただし、データセットのサイズが非常に大きい場合は、mysqldump が実用的でない場合があります。

mysqldump を使用するときは、一貫性のあるデータセットがダンプに含まれるように、スレーブ上でレプリケーションを停止してからダンププロセスを起動してください。

  1. スレーブでの要求処理を停止します。mysqladmin を使用してスレーブでのレプリケーションを完全に停止できます。

    shell> mysqladmin stop-slave

    イベント実行を一時停止するために、スレーブ SQL スレッドだけを停止することもできます。

    shell> mysql -e 'STOP SLAVE SQL_THREAD;'

    これにより、スレーブは引き続きマスターのバイナリログからデータ変更イベントを受け取り、I/O スレッドを使用してそれらをリレーログに格納できますが、スレーブはこれらのイベントを実行したりそのデータを変更したりできません。ビジーなレプリケーション環境では、バックアップ中に I/O スレッドの実行を許可することで、スレーブ SQL スレッド再起動時に追い付くプロセスの速度が向上する場合があります。

  2. mysqldump を実行してデータベースをダンプします。すべてのデータベースをダンプしたり、ダンプするデータベースを選択したりできます。たとえば、すべてのデータベースをダンプするには:

    shell> mysqldump --all-databases > fulldb.dump
  3. ダンプが完了したら、スレーブの動作を再開します。

    shell> mysqladmin start-slave

前の例では、ログイン資格証明 (ユーザー名、パスワード) をコマンドに追加したり、毎日自動的に実行できるプロセスをスクリプトにバンドルしたりすることをお勧めします。

この方法を使用する場合、スレーブレプリケーションプロセスをモニターして、バックアップの実行にかかる時間がマスターからのイベントにスレーブが追い付く能力に影響しないようにしてください。セクション17.1.5.1「レプリケーションステータスの確認」を参照してください。スレーブが追い付けない場合は、別のスレーブを追加してバックアッププロセスを分散することをお勧めします。このシナリオの構成方法の例は、セクション17.3.4「異なるデータベースを異なるスレーブに複製する」を参照してください。


User Comments
  Posted by Michael Maguire on September 20, 2008
This is a half-question/half-tip (I welcome being corrected on this).

Wouldn't adding the --lock-all-tables command obviate the need for stop slave/start slave?
  Posted by Ramiro Cavalcanti on March 13, 2012
Answering above:

Using --lock-tables each database dumped is put in READ LOCK (LOCAL) at time. So, if you have tables between databases this lock it isn't efficient.

You should do a GLOBAL LOCK and stop slave in order to do the backup at Slave server.

--lock-tables, -l

For each dumped database, lock all tables to be dumped before dumping them. The tables are locked with READ LOCAL to permit concurrent inserts in the case of MyISAM tables. For transactional tables such as InnoDB, --single-transaction is a much better option than --lock-tables because it does not need to lock the tables at all.

Because --lock-tables locks tables for each database separately, this option does not guarantee that the tables in the dump file are logically consistent between databases. Tables in different databases may be dumped in completely different states.
Sign Up Login You must be logged in to post a comment.