web-dev-qa-db-ja.com

mysqlデータベースの増分バックアップを作成するにはどうすればよいですか?

私はLinuxを持っていますcentos 6.4サーバーとmysql5.6

私はこのような毎時のmysqlデータベースバックアップを作成するためのcronジョブを持っています

そのPythonで

os.popen("mysqldump -u %s --password=%s -h %s -e --opt --skip-lock-tables  --skip-extended-insert -c %s | gzip -c > %s.gz" % (username, password, hostname, database, filename))

問題は、データがほとんど変更されないことですが、すべてのデータベースを24回バックアップする必要があるたびに、スペースがかかりすぎます。

そのための最良の選択肢は何ですか

データベースの完全バックアップを週に1回実行してから、増分バックアップのみを実行するように、増分バックアップを作成する方法はありますか。

単一のデータベースを復元する必要がある場合は、それも実行できるように、個別のデータベース用に個別のファイルが必要です。

2
user2424160

非常に単純です:binlogging。バイナリログを少なくとも1日(場合によってはそれ以上)保持するようにmysqlを設定します。次に、バックアップを変更してmysqldumpを実行せず、xtrabackupなどを使用します。

これにより、バックアップスケジュールを1日1回に減らしても、binlogを使用して任意の時点にロールフォワードできる可能性があります。

6

ほとんどの状況で1時間ごとにバックアップするのはかなりばかげています。たぶん、別のノードへのmysqlレプリケーションを検討する必要があります。

1
Peter

Xtrabackupを使用して 増分バックアップ を実行できます。単一のデータベースを復元するには、完全バックアップと増分バックアップ(すべてのデータベースを含む)を準備してから、xtrabackupディレクトリをdatadirとして使用してMySQLを実行し、必要な単一データベースのmysqldumpを取得します。

1
HTTP500

スペースを節約したい場合は、フルバックアップを1時間ごとに続行できますが、 lessfs のような重複排除されたファイルシステムに対して実行できます。パーティションを簡単に切り分けて、lessfsでフォーマット/マウントし、スペースなしで1時間ごとに復元できるようにしながら、重複排除を処理させることができます。

0
gravyface