我使用以下命令备份生产数据库:
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
我还没有想出别的办法来做这件事。
随着数据库变得越来越大,这变得不切实际。
我是不是漏了什么?我不能以某种方式指定我想恢复数据库的位置吗?我是否需要一个不同的备份命令?
5条答案
按热度按时间sqxo8psd1#
假设它是用
--databases
创建的您可以使用以下sed脚本。
这里假设数据库创建和切换是按如下方式编写的
所以这将剥离转储文件中该文本块之间的所有内容。
polkgigr2#
@minaz的回答很好,但我想再补充一点。
问题是由
--databases
关键字引起的。如果省略关键字,则不会包含任何数据库创建内容。所以,Dump没有
--databases
关键字。并使用目标数据库名称将其还原。
此外,有几种方法可以做到这一点。在here(dba.stackexchange)上也有类似的问题。
b1zrtrql3#
如果您删除了选项
--databases
,但仍然指定了数据库名称,则不会获得create database语句。即:在你的开发机器上,简单地创建你想要恢复的任何数据库。
iaqfqrcu4#
在windows xampp上,我使用以下命令来实现此目的
出口
进口
6l7fqoea5#
如果你已经有了转储文件,你可以去掉创建和使用数据库的命令。只需删除第四行和新的第五行。