通常、毎週1回フルバックアップを実行する本番データベースがあります。増分バックアップのためにビンログをオンにしています。
本番サーバーは西海岸にあり、営業時間は東海岸にあります。
フルバックアップを実行するとき、マスターにログと位置を問い合わせます。これらの値は、データベースを圧縮するZipのファイル名に含めます。
Mysqlbinlogを使用して、バックアップが終了したことがわかっている特定の位置からインクリメンタルSQLファイルを作成するのに問題があります。
Show Master Status
次に実行mysqldump --flush-logs --single-transaction...
復元するには、正確な情報を取得するだけで十分です。
ロックが本番環境に悪影響を与えることはないため、スレーブデータベースのバックアップが理想的な設定であることはわかっていますが、現時点では切り替えを行っていません。
すべてのテーブルをロックしていないため、望ましい結果が得られていませんか?
前もって感謝します
編集
RolandoMySQLDBAの助けを借りて、適切なbinlogファイルを指していないことに気付きました。代わりに、ディレクトリ全体を指していたbinlog/bin-log.[0-9]* > sql.txt
。つまり、希望するよりもはるかに早く開始されたログを打っていたという位置だけで。そのため、適切なbinlogファイルと位置を取得するようにスクリプトを変更しましたが、これは魅力的なものでした。
ありがとう
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テーブルへの読み取りと書き込みを許可します。