数据传输 | mysqldiff/mysqldbcompare 实现 DTLE 自动化测试
作者:张静文
爱可生上海研发中心成员,测试工程师,负责 DMP 以及 DTLE 自动化测试。
本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
任务:
测试开源产品 dtle(https://github.com/actiontech/dtle),对 mysql 字符类型,表结构的支持性。
测试需求如下:
1. 测试 dtle 对 mysql 所有的字符类型支持性
2. 测试 dtle 对表结构的支持性
3. 等.......
测试步骤大致为:
1. 设计表结构,数据类型。
2. 使用 dtle 迁移表/数据。
3. 对比使用 dtle 迁移的源数据库和目标数据库的数据、表结构是否有差异。
起初,我开启了 2 个窗口一条条的对比,但是当我比对到第 100 条数据的时候,我发现眼花了,似乎有些数据“好像不一样”。我还有好几万条数据要这么对比呢,而且每次发新版本,我都要这么来一次......这不是人能完成的艰难任务!
所以我寻找是不是有什么工具能帮我做这部分工作,搜索后发现一部分私人写的小工具(具体的就不列举了),但是经过使用后,发现很多工具自身就带有一部分 BUG,如果我用这些工具做数据对比肯定会遗漏 BUG。
经过几天的搜索试用,发现 mysql 官方提供了一个非常不错工具mysqldiff/mysqldbcompare,所以想着分享给大家。
以下就直接说说使用方法:
(系统:Ubuntu 18.04)
1. 软件下载,地址如下:
https://cdn.mysql.com/archives/mysql-utilities/mysql-utilities-1.6.5.tar.gz
2. 解压到当前目录 mysql-utilities-1.6.5 下:
tar -zxvf mysql-utilities-1.6.5.tar.gz
3. cd 到 mysql-utilities-1.6.5,执行安装:
apt install mysql-utilities
如下图:
4. 演示 mysql-utilities 中的 mysqldiff 使用和效果:
首先我们可以通 过 mysqldiff --help 命令查看用法:
接下来我要测试通过 DTLE 数据迁移的 2 个数据库,然后验证:
1. 是否有表结构改变
2. DTLE 是否将源数据库的所有数据全部迁移到目标数据库
分别使用如下 2 条命令:
mysqldiff--server1=test:test@10.20.30.3:3306--server2=test1:test1@10.20.30.4:3307 testdb:testdb
执行效果如下:
结论:通过比对,发现源数据库中有 2 张表并不在目标数据库中,而且很详细的列出了迁移失败的表名。
mysqldiff--server1=test:test@10.20.30.3:3306--server2=test1:test1@10.20.30.4:3307 testdb.char_columns:testdb.char_columns
执行效果如下:
结论:通过比对,发现有源数据库中 char_columns 表的建表语句有差异。
5. 演示 mysql-utilities 中的 mysqldbcompare 使用和效果:
同上我们可以通过 mysqldbcompare --help 命令查看用法:
使用如下命令可以查看源库和目标库中的表数据是否有差异:
mysqldbcompare--server1=test:test@10.20.30.3:3306--server2=test1:test1@10.20.30.4:3307 testdb:testdb
执行效果如下:
结论:通过比对,发现源库和目标库中的数据一致。
本次分享几条简单的命令到此结束。
重点在于:
1. 作为测试,我们可以通过以上 2 个小工具减少我们重复性的工作,提高测试结果的准确性。
2. 如果我们有一定代码基础,可以集成以上小工具,完成一套 DTLE 的自动化测试脚本,方便以后每次版本发布的回归测试。
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 如何在 Linux 中查找一个命令或进程的执行时间
- Ubuntu 18.04 LTS中配置IP地址的完整步骤
- Linux系统下Nginx支持ipv6配置的方法
- 微信研发体系下的分布式配置系统设计概要
- Linux双网卡绑定脚本的方法示例
- Serverless 有一百种玩法,比好玩更好玩
- 如何在容器服务中获取客户端真实源IP
- Linux服务器间文件实时同步的实现
- centos7 设置grub密码及单用户登录实例代码
- Linux命令行快速技巧之定位一个文件的方法
- Linux低电量自动关机的实现方法
- ubuntn备份方法总结(四种)
- linux让程序开机自动运行最简单的方法
- centos克隆linux虚拟机的完整步骤分享
- CentOS7.4下MySQL5.7.28二进制方式安装的方法步骤