web-dev-qa-db-ja.com

スレーブのmysqldump(レプリケーションを停止しない)

実行しても大丈夫ですかmysqldump --single-transactionスレーブDBでレプリケーションを停止せずに(stop slave;)?これは定期的な毎日のバックアップ用であり、ストレージ障害が発生した場合にマスターDBを復元できます。ほとんどのテーブルはInnoDBですが、MyISAMはそのうちの2つだけです。

公式文書はそれを言っています:

「ダンプに一貫したデータセットが含まれるようにするには、ダンププロセスを開始する前にスレーブでレプリケーションを停止する必要があります。」.

どういう意味ですか consistent data?最新のデータみたいな意味ですか?

知っている --single-transactionは、それが発行されたときからデータを取得することを意味します。したがって、ダンプが行われている間に、さらに新しい変更notがダンプに記録されます。私は正しいですか?

アプリケーションでラグが発生するため、マスターでバックアップを実行しないでください。

5
user

Mysqldumpを実行すると、データの一貫性のある論理的なダンプが作成され、ポイントインタイムのリカバリが可能になります。

レプリケーションを途中で停止するには2つの方法があります

方法#1: mysqldump option --dump-slave

-dump-slave でmysqldumpを実行すると、SQLスレッドのみが停止します。 I/Oスレッドは、マスターからバイナリログイベントを収集し続けます。 これがMySQLドキュメントでどのように説明されているかに注意してください

このオプションは--master-dataに似ていますが、レプリケーションスレーブサーバーをダンプして、ダンプされたサーバーと同じマスターを持つスレーブとして別のサーバーをセットアップするために使用できるダンプファイルを生成するために使用されます。これにより、ダンプ出力に、ダンプされたスレーブのマスターのバイナリログ座標(ファイル名と位置)を示すCHANGE MASTER TOステートメントが含まれます。これらは、スレーブが複製を開始するマスターサーバーの座標です。

--dump-slaveを指定すると、-master-dataオプションで行われるように、ダンプされたサーバーの座標ではなく、マスターの座標が使用されます。さらに、このオプションを指定すると、-master-dataオプションが使用されている場合は上書きされ、事実上無視されます。

オプション値は--master-dataと同じ方法で処理され(値を設定しないか1を設定すると、CHANGE MASTER TOステートメントがダンプに書き込まれ、2を設定するとステートメントが書き込まれますが、SQLコメントに含まれます)、他のオプションの有効化または無効化、およびロックの処理方法の点で--master-dataと同じ効果。

このオプションにより、mysqldumpは、ダンプの前にスレーブSQLスレッドを停止し、その後、再起動します。

--dump-slaveと組み合わせて、-apply-slave-statementsおよび--include-master-Host-portオプションも使用できます。

このオプションはMySQL 5.5.3で追加されました。

方法2:SQLスレッドを自分で停止する

SQLスレッドを手動で停止できることをご存知ですか? MySQL Documentation on STOP SLAVE; によると、以下を実行できます。

mysql> STOP SLAVE SQL_THREAD;

I/Oスレッドは、マスターからbinlogイベントを受信し続けます。

STOP SLAVE SQL_THREAD;を実行した後、mysqldumpを実行できます。おそらく、スレーブ上のデータファイルに対してLVMスナップショットなどを実行できます。

バックアップが完了したら、実行します

mysql> START SLAVE SQL_THREAD;

または

mysql> START SLAVE;

これにより、SQLスレッドが再度アクティブになります。

試してみる !!!

警告:ローカルDB接続を終了するSQLスレッドを停止すると、CREATE TEMPORARY TABLEで作成されたテーブルが表示されなくなる可能性があります。ステートメントベースのレプリケーションを使用している場合は、SQLスレッドが停止したときにトランザクションがロールバックしないことを確認するために、アプリで追加の調査を行ってください。

-single-transaction ??? について

-dump-slave なしで -single-transaction ??? を使用してmysqldumpを実行できます。ただし、実行中のトランザクションを中断する多くのコマンドがあります。以前の投稿 MySQLのトランザクションDDLワークフロー でこれらのコマンドのリストを参照してください。

UPDATE 2018-02-13 13:07 EST

たった今私に尋ねましたThese backups are for restoring the master DB in case of a storage disaster. Not for slave. So is --dump-slave still valid?

ダンプをそのまま使用する場合(それを使用して別のスレーブを作成せず、バイナリログの再生によるポイントインタイムリカバリを試行しない場合)、yes -dump-slave で問題ありません。

真夜中にmysqldumpを起動した場合、それはダンプの特定時点であることを覚えておいてください。

-dump-slave を使用することの追加の利点は次のとおりです。mysqldumpには、マスターのログファイルと23行目と25行目の位置が含まれます。これにより、別のスレーブを作成する場合は、マスターの複製調整。ポイントインタイムリカバリを試みても、古いマスターからバイナリログを取得できる場合は、それを実行できます。

2
RolandoMySQLDBA