web-dev-qa-db-ja.com

同じサーバーでMySQLデータベースを複製する方法

大規模なMySQLデータベースがあるので、live_dbと呼んでみましょう。これを同じマシンで複製して、テーブル構造やデータを含む(test_db)で遊ぶテストシステムを提供します。定期的にtest_dblive_dbのコンテンツで更新します。可能であれば増分。

MySQLにそれを行うための組み込みメカニズムはありますか?マスタースレーブレプリケーションは、test_dbのデータを変更できるはずなので、私が望むものではないと思います。ただし、これらの変更を保存する必要はありません。

よろしく、

CGD

mysqlコマンドラインクライアントは、標準入力からSQLステートメントのストリームを受け入れます。したがって、コマンドラインでmysqldumpの出力をmysqlに直接パイプすることができます。これをcronジョブとして実行すると、更新されたライブデータでテストデータが定期的に上書きされます。

mysql --user=username --password=passwd -e 'DROP DATABASE test_db;'
mysql --user=username --password=passwd -e 'CREATE DATABASE test_db;'
mysqldump --user=username --password=passwd live_db | mysql --user=username --password=passwd test_db

データが大きいため、時間がかかることに注意してください。

72

Michaelsはaboweはうまく機能すると答えていますが、イベント、ストアドプロシージャ、またはトリガーをコピーしません。

これらをコピーするには、mysqldumpにさらにいくつかのスイッチが必要です:--events --triggers --routines

すでに作成されたコピーを補完するには:

mysqldump --user=username --password=passwd --no-data --no-create-info --no-create-db --events --triggers --routines live_db | mysql --user=username --password=passwd test_db

6
Samuel Åslund

すべてのMacユーザーにとって、sequel proで必要なことは、データベース(メニュー)->データベースの複製です。できた!

0
Priyank

MySQLdumpの問題は、ダンプ中にライブデータベースが使用できないか、使用するのが非常に厄介であるか、バックアップの一貫性が失われることです。データベースを使用する必要がないため(たとえば、深夜など)、ライブデータベースを使用できないことが重要でない場合に、十分な時間枠がない限り。

予備のスペースがある場合のもう1つの可能性-現在、20 Gbはそれほど多くありません-補助データベースを使用することです。

MySQL Serverの2番目のコピーを別のポートにインストールし、それをスレーブにすることができます。次に、2つの同一のデータベース(ライブマスター、ライブスレーブ)があります。

テストデータベースのクローンを作成する必要がある場合は、スレーブレプリケーションを停止します(ライブスレーブは「凍結」状態になります)。MySQLbackupを使用するか、データファイルをコピーするだけでライブスレーブをテストデータベースにバックアップします。完了したら、レプリケーションを再開します。

ライブマスターへの影響はごくわずかであり、スレーブは実際には非更新クリティカル選択に使用できます。

0
LSerni

MySQL Migration Toolkitを使用する場合は、データマッピングステップでスキーマ名をダブルクリックし、ターゲットスキーマ名を変更できます。

0
Vasili