跳至主要內容

2022-04-02

chenkun数据库数据库大约 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时又被覆盖,之前修改的表结构相当于白改了。

image-20220412100355169