2012-01-26 5 views
15

を復元:復元するためにはmysqlのは、私は次のコマンドを実行して、私の本番データベースをバックアップ別のデータベースに

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `my_production_db` /*!40100 DEFAULT CHARACTER SET latin1 */; 
USE `my_production_db `; 

mysqldump -u root --opt --skip-extended-insert --databases my_production_db 

結果のダンプファイルは、先頭近くに次の行を持っていますデータベースを別の宛先、すなわち。 my_debvelopment_db私は、ダンプファイルを開いて、データベースの名前を付けたビットを編集する必要があります。

その後、私が実行します。

mysql -u root -p <password> < mydumpfile 

私はそれを行うための別の方法を考え出したていません。

データベースが大きくなるにつれ、これは実用的になりません。

何か不足していますか?私は何とかデータベースを復元する場所を指定していますか?私は別のバックアップコマンドが必要でしょうか?

答えて

9

オプション--databasesをドロップしてもデータベース名を指定すると、データベース作成文は取得されません。すなわち:

mysqldump -u root --opt --skip-extended-insert my_production_db 

あなたのdevマシンでは、復元するデータベースを作成するだけです。

+2

を達成するために、次のコマンドを使用ダンプ内のデータベース名への参照を生成する可能性があります。少なくとも、データベース・ダンプ中の '--databases'オプションを使用しないで、' 'ALTER DATABASE \' dbname \ 'CHARACTER SET utf8 COLLATE utf8_bin'で問題が発生します。そして、これらのうちの2つがあり、第2のものが第1のものを上書きしています。 – Hibou57

41

@minaz回答は良いですが、もう少し追加したいと思います。

問題は--databasesというキーワードによって発生しています。キーワードを省略すると、データベース作成の内容は含まれません。

したがって、--databasesキーワードなしでダンプします。

mysqldump -u username -p database_name > dump.sql 

ターゲットデータベース名で復元してください。

mysql -u username -p target_database_name < dump.sql 

また、いくつかの方法があります。 here(dba.stackexchange)の同様の問題を参照してください。

+0

'-p database_name'にはエラーがあると思います。' -p'オプション名は '--password'オプションの短縮名です。 – Hibou57

+10

@ Hibou57コメントありがとうございます。はい、 '-p'はあなたが言及したように' --password'を意味します。しかし、 '-p'は実際には「私はパスワードをプロンプトで入力します」という意味です。コマンドオプションでパスワードを入力したい場合は、 '-p 'のように空白(空白)を入れてはいけません。 – lqez

+0

http://dev.mysql.com/doc/refman/5.5/en/mysql-command-options.html#option_mysql_password – lqez

0

すでにダンプをお持ちの場合は、データベースの作成と使用のコマンドを削除できます。 4番目と5番目の新しい行を削除するだけです。 WindowsのXAMPPで

sed '4d' dump.sql | sed '5d' > dump-striped.sql 
+0

削除する行を表示する方が良いでしょう。 2つしかない。あなたが与える方法は任意です - 特にフォーマットが変更されたり、他の手動編集がある場合 – bshea

1

私も `--databases`オプションを使用せずに、mysqldump``思えるこの

輸出

mysqldump -u root -p mydb > mydb.sql 

インポート

mysql -u root -p mynewdb < mydb.sql 
関連する問題