mysql还原到不同的数据库

gio*_*gio 22 mysql mysqldump

我使用以下命令备份我的生产数据库:

mysqldump -u root --opt --skip-extended-insert --databases my_production_db
Run Code Online (Sandbox Code Playgroud)

生成的转储文件在顶部附近有以下行:

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `my_production_db` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `my_production_db `;
Run Code Online (Sandbox Code Playgroud)

为了将数据库恢复到不同的目的地,即.my_debvelopment_db我必须打开转储文件并编辑数据库命名的位.

然后我跑:

mysql -u root  -p <password> < mydumpfile
Run Code Online (Sandbox Code Playgroud)

我还没想出另一种方法.

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

我错过了什么吗?不能我以某种方式指定我想要恢复数据库的位置?我需要一个不同的备份命令吗?

lqe*_*qez 49

@minaz的答案很好,但我想补充一点.

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

所以,转储没有--databases关键字.

mysqldump -u username -p database_name > dump.sql
Run Code Online (Sandbox Code Playgroud)

并使用目标数据库名称还原它.

mysql -u username -p target_database_name < dump.sql
Run Code Online (Sandbox Code Playgroud)

此外,有几种方法可以做到这一点.在这里看到类似的问题(dba.stackexchange).

  • @ Hibou57感谢您的评论.是的,`-p`表示你提到的`--password`.但是`-p`实际上意味着'我将通过提示输入我的密码'.如果你想通过命令选项输入密码,那么应该没有空格(空格),如`-p <your_password>`不是`-p <your_password>`. (13认同)

min*_*naz 15

如果删除该选项--databases但仍指定数据库名称,则不会获得create database语句.即:

mysqldump -u root --opt --skip-extended-insert  my_production_db
Run Code Online (Sandbox Code Playgroud)

在您的开发机器上,只需创建您想要还原到的任何数据库.

  • 即使没有`--databases`选项,似乎`mysqldump`仍然可以生成对转储中数据库名称的引用.至少我在数据库转储中遇到了一些`ALTER DATABASE \`dbname \`CHARACTER SET utf8 COLLATE utf8_bin`,而没有使用`--databases`选项.其中有两个,第二个覆盖了第一个. (3认同)