背景小记
最近,出于安全需求不定期在测试环境对系统进行代码扫描,可代码扫码工具会模拟攻击方调用api接口,会在测试环境产生大量垃圾数据,给平时测试带来些麻烦,因此需要对数据库做清理,又嫌清理麻烦,想着再建一套安全测试用的数据库,但如此一来,测试服务便要在两个数据库实例间来回切换,每次切换都需要改代码部署,因此最终采用更改数据库实例名的方案。
踩坑记
开始实现前在网上找到了一些方法
https://blog.youkuaiyun.com/tjcwt2011/article/details/79451764
在此之前曾经采用过这边文章提到的第二种方法:
- 创建需要改成新名的数据库
- mysqldum 导出要改名的数据库
- 删除原来的旧库(确定是否真的需要)
但随着测试库数据量越来越大,这种方法的耗时越来越长,显然已经不可取了。便采用了第三种方法,原有测试库为test-database,安全测试库为security-database
- 创建需要改成新名test-database-bak的数据库
- 将test-database下的表通过重命名的方式迁移到test-database-bak下
- 将security-database下的表通过重命名的方式迁移到test-database下
安全测试结束后再按上述步骤将两个库的实例名再置换下即可。
但按照上述链接文章所提供的第三种方法的脚本代码直接运行是行不通的,原因是我们的数据库实例都是带“-”的,在MySQL中需要用反引号`圈起来,but在shell脚本语言中反引号是用来替换命令的,以下举两个例子便于大家理解。