sitedb1
現在のデータベースをsitedb2
同じ mysql データベース インスタンスにコピーするスクリプトを作成したいと考えています。sitedb1 を SQL スクリプトにダンプできることはわかっています。
mysqldump -u root -p sitedb1 >~/db_name.sql
にインポートしsitedb2
ます。最初のデータベースを sql ファイルにダンプせずに簡単な方法はありますか?
マニュアルのデータベースのコピーに記載されているように、ダンプを 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
)。
mysqldbcopy
MySQL ユーティリティには、関連するすべてのオブジェクト (「テーブル、ビュー、トリガー、イベント、プロシージャ、関数、およびデータベース レベルの付与」) とデータを含む DB をデフォルトで 1 つの DB サーバーから同じサーバーまたは別の DB サーバーにコピーする優れたツールが含まれています。 DB サーバー。実際にコピーされるものをカスタマイズするために利用できる多くのオプションがあります。
したがって、OPの質問に答えるには:
mysqldbcopy \
--source=root:your_password@localhost \
--destination=root:your_password@localhost \
sitedb1:sitedb2
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
ターミナル/コマンドプロンプトからコマンドを実行する必要があります。
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' へのアクセスが許可されます。
(擬似コードで)使用できます:
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を参照してください。
次のようなことができます。
mysqldump -u[username] -p[password] database_name_for_clone
| mysql -u[username] -p[password] new_database_name
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
元のデータベースにトリガーがある場合は、インポートの前に置き換えをパイプすることで、「トリガーは既に存在します」というエラーを回避できます。
mysqldump -u olddbuser -p -d olddbname | sed "s/`olddbname`./`newdbname`./" | mysql -u newdbuser -p -D newdbname