mysqldumpファイルとは異なる名前でmysqlデータベースを復元するにはどうすればよいですか。ダンプファイルを開いて編集したくありません。他のより良い方法はありますか?
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
オプション3
$ 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年以内に回答を編集できます。
sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql
)を実行する前にcat mydump.sql | grep "MYDATABASE"
、データベース名のみが変更されていることを確認するためにMYDATABASEのすべての出現をチェックします。他のデータは変更されません。
sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql
#より安全な蒸気編集。データベースダンプにはUSEまたはCREATE DATABASEステートメントは含まれていませんが、データベース名はSQLコメント、ビュー、およびトリガーに含まれています(MySQL 5.7)。これはコメント内のデータベース名を置き換えませんが、結果のデータベースには影響しません。これは私にとってはうまくいきました。
ファイルは、あなたが手に持っているものであり、あなたがシェル/コンソールから、それを操作している場合は、私が使用するsed
で始まる行に文字列置換を行うにはCREATE DABATASE
、CREATE TABLE
、USE
およびoptionnally --
(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
使用されませんでした。
--no-create-db
有無にかかわらず、トリガーとビューにデータベース名を含めます。--database
--databases
次の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
--no-create-db
有無にかかわらず、トリガーとビューにデータベース名を含めます。--database
--databases
-Ddb2
た場合、その前にハイフンを付けてはいけません。少なくとも、含めるとMySQL構文エラーが発生しました。