2

状況: 私たちの実稼働 mysql データベースは、.sql ファイルに毎日のダンプを作成します。比較的最新のシャドウ データベースを維持したいと考えています。
.sql ファイルから mysql データベースを作成するには、次を使用することを知っています。

mysql -u USERNAME -p DATABASENAME < FILE.SQL

私たちのデータベースでは、これに 4 ~ 5 時間かかりました。言うまでもなく、私はそれを削減したいと思います.新しい/変更されたものでデータベースを更新する方法があるかどうか疑問に思っています. 2 日目に、本番データベースからダンプされた新しい .sql ファイルでシャドウ データベースを更新する方法はありますか?

4

3 に答える 3

1

MySQLレプリケーションはその方法です。

ただし、それが不可能な場合は、次の手順を使用してください。

すべてのテーブルに変更されたタイムスタンプ列があり、行が挿入/変更されるたびにこの値を更新します。

次のmysqldumpオプションを使用して、増分SQLファイルを取得します(既存のレコードがバックアップデータベースで更新されるため、これは挿入コマンドの代わりにREPLACEコマンドを使用します)。

タイムスタンプ値をファイルシステムのどこかに保持します。そして、where条件でそれを使用します。MDFD_DATEは、フィルタリングする必要のある列名です。バックアップが成功したら、ファイルに保存されている値を更新します。

skip-tz-utcは、MSQLがタイムゾーンに基づいてタイムスタンプ値を自動的に調整するのを防ぎます。

mysqldump --databases db1、db2 --user = user --password = password --no-create-info --no-tablespaces --replace --skip-tz-utc --lock-tables --add-locks- -compact --where = MDFD_DATE> = '2012-06-13 23:09:42' --log-error = dump_error.txt --result-file = result.sql

新しいSQLファイルを使用して、サーバーで実行します。

制限:

データベース内の一部のレコードが削除されている場合、この方法は機能しません。それらをバックアップデータベースから手動で削除する必要があります。それ以外の場合は、DEL_FLAG列を保持し、削除されたレコードの本番環境で「Y」に更新し、この条件を使用してバックアップデータベースのレコードを削除します。

于 2012-07-21T15:33:02.527 に答える
1

あなたを導くためのいくつかのリンク:

于 2012-07-21T15:22:03.193 に答える
1

mysqlこの問題は、同期を使用して解決できます 。

于 2012-07-21T15:19:04.263 に答える