我使用以下命令备份我的生产数据库:
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_debvelopment_db
我必须打开转储文件并编辑数据库命名的位。
然后我跑:
mysql -u root -p <password> < mydumpfile
我还没想出另一种方法。
随着数据库变大,这变得不切实际。
我错过了什么吗?不能我以某种方式指定我想要恢复数据库的位置?我需要一个不同的备份命令吗?
答案 0 :(得分:47)
@minaz的答案很好,但我想补充一点。
问题是由--databases
关键字引起的。如果省略该关键字,则不包含任何数据库创建内容。
所以,转储没有--databases
关键字。
mysqldump -u username -p database_name > dump.sql
使用目标数据库名称恢复它。
mysql -u username -p target_database_name < dump.sql
此外,有几种方法可以做到这一点。请参阅here(dba.stackexchange)上的类似问题。
答案 1 :(得分:13)
如果删除选项--databases
但仍指定数据库名称,则不会获得create database语句。即:
mysqldump -u root --opt --skip-extended-insert my_production_db
在您的开发机器上,只需创建您想要还原到的任何数据库。
答案 2 :(得分:1)
在Windows xampp上,我使用以下命令来实现此功能
导出
mysqldump -u root -p mydb > mydb.sql
导入
mysql -u root -p mynewdb < mydb.sql