我使用以下命令备份我的生产数据库:
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).
min*_*naz 15
如果删除该选项--databases但仍指定数据库名称,则不会获得create database语句.即:
mysqldump -u root --opt --skip-extended-insert my_production_db
Run Code Online (Sandbox Code Playgroud)
在您的开发机器上,只需创建您想要还原到的任何数据库.