web-dev-qa-db-ja.com

完全バックアップを実行するときに、ライブMySQLデータベースの正確な位置を取得することは可能ですか?

通常、毎週1回フルバックアップを実行する本番データベースがあります。増分バックアップのためにビンログをオンにしています。

本番サーバーは西海岸にあり、営業時間は東海岸にあります。

フルバックアップを実行するとき、マスターにログと位置を問い合わせます。これらの値は、データベースを圧縮するZipのファイル名に含めます。

Mysqlbinlogを使用して、バックアップが終了したことがわかっている特定の位置からインクリメンタルSQLファイルを作成するのに問題があります。

Show Master Status次に実行mysqldump --flush-logs --single-transaction...復元するには、正確な情報を取得するだけで十分です。

ロックが本番環境に悪影響を与えることはないため、スレーブデータベースのバックアップが理想的な設定であることはわかっていますが、現時点では切り替えを行っていません。

すべてのテーブルをロックしていないため、望ましい結果が得られていませんか?

前もって感謝します

編集

RolandoMySQLDBAの助けを借りて、適切なbinlogファイルを指していないことに気付きました。代わりに、ディレクトリ全体を指していたbinlog/bin-log.[0-9]* > sql.txt。つまり、希望するよりもはるかに早く開始されたログを打っていたという位置だけで。そのため、適切なbinlogファイルと位置を取得するようにスクリプトを変更しましたが、これは魅力的なものでした。

ありがとう

4
user2108258

Mysqldumpを使用している場合、mysqldumpの開始時点のバックアップのバイナリログ座標を取得できます。

-master-dataオプション を追加するだけです

mysqldump --master-data=2 --flush-logs --single-transaction...

--master-data=2を使用すると、バイナリログのファイル名と位置がCHANGE MASTER TOコマンドの形式で記録されます。コメントとして記録されます。

--master-data=1を使用すると、バイナリログのファイル名と位置もCHANGE MASTER TOコマンドの形式で記録されます。コメントとして記録されるのではなく、mysqldumpをリロードしたときに実行されるコマンドとして記録されます。

どちらの場合も、ダンプの23行目で常にCHANGE MASTER TOコマンドを見つけることができます。私は以前、以前の投稿でこれについて言及しました MySQL Exec_Master_Log_Pos値がRead_Master_Log_Posより大きい見出しの「BUT WAIT ...」

myfullbackup.sqlという名前のmysqldumpファイルからその行を取得するには、次のコマンドを実行します。

head -23 myfullbackup.sql | tail -1 > MasterLogFilePos.sql

CHANGE MASTER TOコマンドが含まれます

Mysqldumpを実行すると

mysqldump --master-data=2 --flush-logs --single-transaction...

マスターは引き続き、すべてのInnoDBテーブルへの読み取りと書き込みを許可します。

9
RolandoMySQLDBA