218

sitedb1現在のデータベースをsitedb2同じ mysql データベース インスタンスにコピーするスクリプトを作成したいと考えています。sitedb1 を SQL スクリプトにダンプできることはわかっています。

mysqldump -u root -p sitedb1 >~/db_name.sql

にインポートしsitedb2ます。最初のデータベースを sql ファイルにダンプせずに簡単な方法はありますか?

4

16 に答える 16

420

マニュアルのデータベースのコピーに記載されているように、ダンプを mysql クライアントに直接パイプできます。

mysqldump db_name | mysql new_db_name

MyISAM を使用している場合は、ファイルをコピーできますが、お勧めしません。それは少し危険です。

他のさまざまな優れた回答から統合

mysqldumpとコマンドはどちらもmysql、次のような接続の詳細 (およびその他の多く) を設定するためのオプションを受け入れます。

mysqldump -u <user name> --password=<pwd> <original db> | mysql -u <user name> -p <new db>

また、新しいデータベースがまだ存在しない場合は、事前に作成する必要があります (例: を使用echo "create database new_db_name" | mysql -u <dbuser> -p)。

于 2009-03-23T21:26:57.317 に答える
88

MySQL ユーティリティの使用

mysqldbcopyMySQL ユーティリティには、関連するすべてのオブジェクト (「テーブル、ビュー、トリガー、イベント、プロシージャ、関数、およびデータベース レベルの付与」) とデータを含む DB をデフォルトで 1 つの DB サーバーから同じサーバーまたは別の DB サーバーにコピーする優れたツールが含まれています。 DB サーバー。実際にコピーされるものをカスタマイズするために利用できる多くのオプションがあります。

したがって、OPの質問に答えるには:

mysqldbcopy \
    --source=root:your_password@localhost \
    --destination=root:your_password@localhost \
    sitedb1:sitedb2
于 2014-07-30T13:22:20.483 に答える
18
mysqladmin create DB_name -u DB_user --password=DB_pass && \
        mysqldump -u DB_user --password=DB_pass DB_name | \
        mysql     -u DB_user --password=DB_pass -h DB_host DB_name
于 2012-07-15T09:22:17.023 に答える
13

ターミナル/コマンドプロンプトからコマンドを実行する必要があります。

mysqldump -u <user name> -p <pwd> <original db> | mysql -u <user name> <pwd> <new db>

例えば:mysqldump -u root test_db1 | mysql -u root test_db2

これにより、test_db1 が test_db2 にコピーされ、'root'@'localhost' へのアクセスが許可されます。

于 2015-04-21T06:49:29.510 に答える
13

(擬似コードで)使用できます:

FOREACH tbl IN db_a:
    CREATE TABLE db_b.tbl LIKE db_a.tbl;
    INSERT INTO db_b.tbl SELECT * FROM db_a.tbl;

CREATE TABLE ... SELECT ... 構文を使用しない理由は、インデックスを保持するためです。もちろん、これはテーブルをコピーするだけです。ビューとプロシージャはコピーされませんが、同じ方法で行うことができます。

CREATE TABLEを参照してください。

于 2009-03-23T21:28:33.850 に答える
2

次のようなことができます。

mysqldump -u[username] -p[password] database_name_for_clone 
 | mysql -u[username] -p[password] new_database_name
于 2015-07-21T06:18:39.253 に答える
0

Greg's answerに加えて、new_db_nameまだ存在しない 場合、これが最も簡単で最速の方法です。

echo "create database new_db_name" | mysql -u <user> -p <pwd> 
mysqldump -u <user> -p <pwd> db_name | mysql -u <user> -p <pwd> new_db_name
于 2015-07-06T10:01:39.733 に答える
0

元のデータベースにトリガーがある場合は、インポートの前に置き換えをパイプすることで、「トリガーは既に存在します」というエラーを回避できます。

mysqldump -u olddbuser -p -d olddbname | sed "s/`olddbname`./`newdbname`./" | mysql -u newdbuser -p -D newdbname
于 2019-03-04T20:10:53.033 に答える