Mysqldumpファイルとは異なる名前でmysqlデータベースを復元するにはどうすればよいですか。ダンプファイルを開いて編集したくありません。他のより良い方法は?
データベースを作成または選択しないように、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
試してみる !!!
私はダンプ、編集、挿入の大ファンです。ただし、テキストファイル(ダンプファイル)を開いて変更する必要はありません(これは、数百万行ある場合に特に便利です)。データベースをダンプしたい場合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年以内に回答を編集できます。
ファイルが手元にあり、Shell /コンソールから操作している場合、sed
を使用して、CREATE DABATASE
、CREATE TABLE
、USE
で始まる行を文字列置換し、オプションで--
(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
は使用されませんでした。
私はこれをずっと前に一度だけしました。
すべてのデータをエクスポートする場合、次のように、ファイルの先頭にデータベース名を設定するオプションがあります。「use database x」
したがって、この宣言を変更できます。
次の2つの規則を使用してダンプを行う場合:
--databases
、--database
などのオプションは使用しないでください。これらのオプションなしで、コマンドの最後にデータベース名を置くだけです。--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
これは、その場ですべてのスキーマ名に接尾辞/接辞を追加できるようにするシェルスクリプトです。