我正在将几个MariaDB数据库从同一VPC /区域中的AWS EC2机器中还原到Amazon实例,等等。
我使用的shell脚本如下:
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文件的执行?
客户端和服务器信息如下:
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发布于 2018-04-19 00:32:21
我的猜测是,MySQL客户端将整个SQL文件发送到RDS服务器,并启动下一个SQL文件,而无需等待上一个文件成功完成。
这不是问题所在。
问题是,如果您按预期使用,mysqldump只会自动处理这个问题:
mysqldump [options] --databases db1 db2 db3否则,它本质上假设在还原转储文件时,服务器上已经满足了任何依赖项,因此,除了还原单个db之外,它不会解决这些依赖关系。
如果您创建一个转储文件,像这样,指定您需要的所有数据库,但使用--no-data选项,那么您将得到一个包含所有表和视图的小文件,但没有数据。首先还原该文件,然后恢复3个单独的文件。
发布于 2018-04-20 08:33:02
感谢所有提供投入的人。我在db1还原之后添加了一个延迟60秒,通过使用this命令来实现这一点:
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分钟,这背后没有真正的推理。
https://dba.stackexchange.com/questions/204327
复制相似问题