mysql恢复到不同的数据库

5us2dqdw  于 2023-10-15  发布在  Mysql
关注(0)|答案(5)|浏览(99)

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

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

我还没有想出别的办法来做这件事。
随着数据库变得越来越大,这变得不切实际。
我是不是漏了什么?我不能以某种方式指定我想恢复数据库的位置吗?我是否需要一个不同的备份命令?

sqxo8psd

sqxo8psd1#

假设它是用--databases创建的
您可以使用以下sed脚本。

sed -n '/-- Current Database:/,/-- Table structure for table /!p' dump.sql

这里假设数据库创建和切换是按如下方式编写的

--
-- Current Database: `mydatabase`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mydatabase` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;

USE `mydatabase`;

--
-- Table structure for table `myfirsttable`
--

所以这将剥离转储文件中该文本块之间的所有内容。

polkgigr

polkgigr2#

@minaz的回答很好,但我想再补充一点。
问题是由--databases关键字引起的。如果省略关键字,则不会包含任何数据库创建内容。
所以,Dump没有--databases关键字。

mysqldump -u username -p database_name > dump.sql

并使用目标数据库名称将其还原。

mysql -u username -p target_database_name < dump.sql

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

b1zrtrql

b1zrtrql3#

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

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

在你的开发机器上,简单地创建你想要恢复的任何数据库。

iaqfqrcu

iaqfqrcu4#

在windows xampp上,我使用以下命令来实现此目的
出口

mysqldump -u root -p mydb > mydb.sql

进口

mysql -u root -p mynewdb < mydb.sql
6l7fqoea

6l7fqoea5#

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

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

相关问题