web-dev-qa-db-ja.com

MySQLで8時間ごとにbinlogファイルをバックアップするためのシェルスクリプト

MySQLインスタンスのポイントインタイムリカバリ用のシェルスクリプトを書いています。私たちの要件は、mysqlbinlogを使用して8時間ごと(毎日3回)にBinlogをバックアップすることであり、最終日のデータベースの完全バックアップ時刻から現在の時刻までbinlogをバックアップする必要があります。

フルデータベースバックアップが午前2:00に行われ、binlogバックアップが午前6時、12 PM、および午後6時に行われる場合、最初のbinlogバックアップは2:00 AMから6:00 AMなどにバックアップする必要があるとします。

毎日のデータベース全体のバックアップが完了すると、「マスターステータスの表示」の出力が「master_status.txt」というファイルに保存され、以下のようにbinlogバックアップスクリプトから呼び出しますが、binlogファイルが複数生成された場合は常にb/wフルデータベースバックアップとbinlogバックアップの場合、スクリプトはすべてのbinlogのbinlogバックアップを取得しません。

binlog=`cat master_status.txt | awk '{print $1}'`
dat="$(date +'%d_%m_%Y_%H_%M_%S')"
mysqlbinlog -u$DB_USER -p$DB_Password "$bin_log" --to-last-log >> "binlog_file_$dat".sql

バージョン:5.5.xエンジン:InnoDBおよびMyISAM

1
Vinod

まだこれを必要とする人のために。 perconaの人々による binlog puller module を使用してみてください。完璧に動作し、ウォッチドッグを追加できます。

1
Mannoj

現在のバイナリログを示すSHOW MASTER STATUS;を呼び出す代わりに、SHOW BINARY LOGS;を使用する必要があります。現在ディスク上にあるすべてのバイナリログが表示されます。

ここにアイデアがあります:これを6時間ごとに実行します

PURGE BINARY LOGS BEFORE NOW() - INTERVAL 8 HOUR;

これにより、バイナリログイベントに関する過去8時間のログを除くすべてのバイナリログが消去されます。これは、1つまたは2つのバイナリログです。次に、SHOW BINARY LOGS;からのバイナリログのリストを記録する必要があります

試してみてください!!!

0
RolandoMySQLDBA