2022-04-02
2021年4月2日大约 1 分钟
背景:
我有一个库A,这个库同时被两个服务使用(serviceA、serviceB),某天,因serviceA业务需要,必须更改数据库结构,导致serviceB无法使用,但是serviceB又不能停机,所以就考虑把数据库克隆一份给serviceB使用。在克隆使用的是mysqldump直接导出,然后再新建另一个库B,在库B导入sql,结果就悲剧了。
1、库A导出
# 在服务器把写了个定时备份脚本,这个databaseA是未更新前备份的库
mysqldump -h localhost -uroot -p123456 databaseA>databaseA.sql
2、使用source导入
# 1. 先创建databaseB(此步省略)
# 2. source命令导入
use databaseB;
source databaseA.sql; # 这一步就杯具了
这里对导出的sql文件不熟悉,导出的时候里面会自动有个use 原数据库名
,所以即使你在导入到新库之前切换到了库B,但是当使用source命令时,它会自动切换到原库,所以实际上直接source databaseA.sql
是导入到了原来的A库中,这就很苦比了,这个库会直接覆盖databaseA,前面我们说过,此时的A库因业务需要表结构已经发生变化了,然后source时又被覆盖,之前修改的表结构相当于白改了。