mysql还原到不同的数据库

mysql还原到不同的数据库,mysql,mysqldump,Mysql,Mysqldump,我使用以下命令备份生产数据库: mysqldump -u root --opt --skip-extended-insert --databases my_production_db 生成的转储文件在顶部附近有以下几行: 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
生成的转储文件在顶部附近有以下几行:

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `my_production_db` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `my_production_db `;
为了将数据库恢复到不同的目标,即my_DeDevelopment_db,我必须打开转储文件并编辑数据库命名的位

然后我跑:

mysql -u root  -p <password> < mydumpfile
mysql-u root-p
我还没有想出另一种方法

随着数据库越来越大,这变得不切实际


我错过什么了吗?我不能指定要在哪里恢复数据库吗?我需要另一个备份命令吗?

如果您删除选项
--databases
,但仍然指定数据库名称,您将无法获得create database语句。即:

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

在您的开发机器上,只需创建您希望还原到的任何数据库。

@minaz答案很好,但我想再添加一点

问题是由
--数据库
关键字引起的。如果省略关键字,它将不包含任何数据库创建内容

因此,转储时不使用
--数据库
关键字

mysqldump -u username -p database_name > dump.sql
并使用目标数据库名称还原它

mysql -u username -p target_database_name < dump.sql
mysql-u username-p target\u database\u name

此外,有几种方法可以做到这一点。请参阅(dba.stackexchange)上的类似问题。

如果您已经有了转储,则可以删除用于创建和使用数据库的命令。只需删除第四行和新的第五行

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

在WindowsXAMPP上,我使用以下命令来实现这一点

出口

mysqldump -u root -p mydb > mydb.sql
进口

mysql -u root -p mynewdb < mydb.sql
mysql-u root-p mynewdb
我认为
-p database_name
有错误,因为
-p
选项名是
--password
选项的简称。@Hibou57感谢您的评论。是的,
-p
的意思是您提到的
--password
。但是
-p
实际上意味着“我将通过提示输入密码”。如果您想通过命令选项输入密码,那么应该没有像
-p
而不是
-p
这样的空白(空格)。即使没有
--databases
选项,mysqldump
似乎仍然可以在转储中生成对数据库名称的引用。至少我对数据库转储中的一些
alterdatabase`dbname`字符集utf8-COLLATE utf8\u-bin
有意见,但不使用
--databases
选项。其中有两行,第二行覆盖第一行。最好只显示要删除的行。只有两个。您提供的方法是任意的-尤其是在格式更改或进行其他手动编辑时。。