web-dev-qa-db-ja.com

mysqlデータベースを別の名前で復元する

Mysqldumpファイルとは異なる名前でmysqlデータベースを復元するにはどうすればよいですか。ダンプファイルを開いて編集したくありません。他のより良い方法は?

42

データベースを作成または選択しないように、mysqldumpにダンプを作成させることができます。

例:データベースdb1をダンプし、データベースdb2にロードしています

これにより、CREATE DATABASEおよびUSEコマンドがダンプに入れられます。

mysqldump -u... -p... --routines --triggers --databases db1 > /root/db1.sql

これはされません CREATE DATABASEとUSEコマンドをダンプに入れます(これはあなたが欲しいものです

mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql

次の4つの方法のいずれかで、別のデータベース(db2など)にロードできます。

オプション1

$ mysqldump -u... -p... --routines --triggers db1 | mysql -u... -p... -A -Ddb2

オプション2

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2 < /root/db1.sql

オプション

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2
mysql> source /root/db1.sql

オプション4

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A
mysql> use db2
mysql> source /root/db1.sql

試してみる !!!

60
RolandoMySQLDBA

私はダンプ、編集、挿入の大ファンです。ただし、テキストファイル(ダンプファイル)を開いて変更する必要はありません(これは、数百万行ある場合に特に便利です)。データベースをダンプしたい場合MYDATABASE

mysqldump MYDATABASE > mydump.sql

次に、sedを使用して、古いデータベース名をこのような新しいデータベース名に置き換えます

sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql

次に、単に新しいデータベースを作成して再度インポートすると、新しいデータベースMYNEWDATABASEにすべてのテーブルが作成されます。

mysqladmin create MYNEWDATABASE

mysql MYNEWDATABASE < mydump.sql

編集:コメントセクションの一部のニースの人々が指摘したように、データの一部が上記によっても変更される場合、これを危険にさらす可能性があるため、これを回避する方法を具体的に説明します。

1)これを変更する前に、ダンプでこれをGrepしてください。

cat mydump.sql | grep "MYDATABASE"

そして

2)次のように、 `を追加して安全性を高めることができます。

sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql

他に具体的な提案がある場合は、さらに4年以内に回答を編集できます。

7
Sverre

ファイルが手元にあり、Shell /コンソールから操作している場合、sedを使用して、CREATE DABATASECREATE TABLEUSEで始まる行を文字列置換し、オプションで--(mysqldumpコメント)

データベースの作成、テーブルの作成、使用、およびmysqldumpコメントに一致する行のデータベース名を置き換える

dbfile="yoursqldumpfile.sql";
dbname="current_db_name";
dbnewname="new_db_name";
dbnewfile="/tmp/$dbnewname.sql";
cat $dbfile | sed "/^CREATE DATABASE/ s=$dbname=$dbnewname=" | sed "/^CREATE TABLE/ s=$dbname=$dbnewname=" | sed "/^USE / s=$dbname=$dbnewname=" | sed "/^-- / s=$dbname=$dbnewname=" > $dbnewfile


もちろん、ここで説明する多くの回答と同様に、mysqldumpバックアップにCREATE DATABASEとUSE行が含まれていない方が簡単です。オプション--all-databases--databasesまたはそれらの短縮バージョン-Aまたは-Bは使用されませんでした。

3
bksunday

私はこれをずっと前に一度だけしました。

すべてのデータをエクスポートする場合、次のように、ファイルの先頭にデータベース名を設定するオプションがあります。「use database x」

したがって、この宣言を変更できます。

3
Victor

次の2つの規則を使用してダンプを行う場合:

  1. --databases--databaseなどのオプションは使用しないでください。これらのオプションなしで、コマンドの最後にデータベース名を置くだけです。
  2. オプションを含める--no-create-db

以下を実行すると、mysqldumpはデータベースを参照せずにSQLを作成します。インポート中に、mysqlコマンドの最後に新しいデータベース名を使用できます。

mysqldump  --no-create-db old_db_name --single-transaction --compress --order-by-primary --Host old_db_Host -u old_db_user -pOld_db_password | mysql --Host new_Host -u new_user -pnewpassword new_db_name
2
Neo

これは、その場ですべてのスキーマ名に接尾辞/接辞を追加できるようにするシェルスクリプトです。

http://snippets.dzone.com/posts/show/13749

1
shantanuo