首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多数据库顺序恢复

多数据库顺序恢复
EN

Database Administration用户
提问于 2018-04-18 13:26:22
回答 2查看 196关注 0票数 1

我正在将几个MariaDB数据库从同一VPC /区域中的AWS EC2机器中还原到Amazon实例,等等。

我使用的shell脚本如下:

代码语言:javascript
复制
mysql -u root -h hostname.amazonaws.com -ppassword < db1.sql
mysql -u root -h hostname.amazonaws.com -ppassword < db2.sql
mysql -u root -h hostname.amazonaws.com -ppassword < db3.sql
...

序列很重要,因为后面的数据库具有视图,并加入了之前的引用数据库。我已经知道了这个部分,并且一次只做一个DB,就像预期的那样手动工作。

问题是,当我将DB链接到单个shell脚本中时,后面的还原(比如DB2 )会抱怨DB1中的某个表不存在。准确的错误消息如下:

ERROR 1146 (42S02) at line 482: Table 'db1.table_name' doesn't exist

我的猜测是,MySQL客户端将整个SQL文件发送到RDS服务器,并启动下一个SQL文件,而无需等待上一个文件成功完成。

有没有办法阻止以前的SQL文件,直到它成功完成,或者失败,并中断后续SQL文件的执行?

客户端和服务器信息如下:

代码语言:javascript
复制
mysql client  Ver 15.1 Distrib 10.0.34-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Server version: 10.0.31-MariaDB MariaDB Server
EN

回答 2

Database Administration用户

发布于 2018-04-19 00:32:21

我的猜测是,MySQL客户端将整个SQL文件发送到RDS服务器,并启动下一个SQL文件,而无需等待上一个文件成功完成。

这不是问题所在。

问题是,如果您按预期使用,mysqldump只会自动处理这个问题:

代码语言:javascript
复制
mysqldump [options] --databases db1 db2 db3

否则,它本质上假设在还原转储文件时,服务器上已经满足了任何依赖项,因此,除了还原单个db之外,它不会解决这些依赖关系。

如果您创建一个转储文件,像这样,指定您需要的所有数据库,但使用--no-data选项,那么您将得到一个包含所有表和视图的小文件,但没有数据。首先还原该文件,然后恢复3个单独的文件。

票数 0
EN

Database Administration用户

发布于 2018-04-20 08:33:02

感谢所有提供投入的人。我在db1还原之后添加了一个延迟60秒,通过使用this命令来实现这一点:

代码语言:javascript
复制
mysql -u root -h hostname.amazonaws.com -ppassword < db1.sql
sleep 60
mysql -u root -h hostname.amazonaws.com -ppassword < db2.sql
mysql -u root -h hostname.amazonaws.com -ppassword < db3.sql
...

我随机选择了1分钟,这背后没有真正的推理。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/204327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档