合 mysql-utilities工具之MySQL数据库比对工具mysqldiff和mysqldbcompare
Tags: MySQLmysqldbcomparemysqldiff
简介
如果要比较数据库表结构就使用mysqldiff,并生成差异SQL语句
如果要比较数据库数据是否一致就使用mysqldbcompare,并生成差异SQL语句(全能比较,也可以比较数据库结构)
如果要比较数据库主从一致使用pt-table-checksum,生成差异报告,在利用pt-table-sync数据修复
mysqldbcompare
mysqldbcompare从两个数据库比较对象和数据的不同。显示差异可以使用不同风格,如GRID, CSV, TAB, 或 VERTICAL。
在比较过程中数据不可以改变,否则出现错误。
数据库中的对象包括:表、视图、触发器、存储过程、函数和事件。每一个对象类型计数可以使用-vv选项显示。
通过一系列步骤检查进行测试,默认情况下,一旦测试失败就终止检测。可以指定 --run-all-tests 选项来进行所有的测试。
比较检测的内容包括:
- 数据库定义的检查
一个数据库存在的前提是检测确保数据库都存在。如果不存在,不需要进行下一步检测, --run-all-tests选项也被忽略的。
- 检测数据库的对象
检测两者数据库中的对象是否丢失。剩余的检测是针对这些数据库对象的。可以使用--skip-object-compare跳过该测试。当你已知缺少某些对象这个选项是有用的。
- 比较对象的定义
对对象的定义(CREATE语句)进行比较和显示不同。可以使用 --skip-diff 选项跳过这步。当你已知对象不同想忽略可用这个选项。
- 检测表的行数
这个检查确保这两个表有相同的行数,但这并不确保表的数据是一致性的。只是粗略性的检查表数据行数的缺失与否,识别丢失的行。可以使用 --skip-row-count选项跳过这步。
- 检查表数据的一致性
这个检查包括检查第四步的行数,同时也检查数据是否一致。行不同显示不同的风格报告,缺失的行也是如此,默认是GRID。
这个检查分为两步:首先对全表进行checksum校验,然后如果这步失败了算法将找出不同。
可以使用--skip-checksum-table 选项跳过表校验,使用--skip-data-check选项跳过数据检查。
如果你不想进行所有的检查,可以使用 --skip-xxx 选项来只进行某个测试。这在只想同步避免执行所有的测试非常有用。
测试的状态信息:
- pass测试成功
- FAIL测试失败
- SKIP缺少或跳过测试
- WARN测试时出现不寻常的但不是错误
- -测试不适用于该对象
指定如何显示 diff-style输出:
可以通过--difftype选项来定义输出风格。
- unified (default)统一的格式输出
- context上下文格式输出
- differdiffer-style格式输出
- sqlSQL转换语句输出
指定如何显示行丢失或改变的输出:
可以通过使用--format选项来定义。
- grid (default)网格化输出,类似于mysql命令行客户端输出
- csv逗号分隔格式输出
- tab制表符格式输出
- vertical类似于mysql命令行客户端\G执行的输出
--changes-for选项控制着差异报告(默认)还是转换报告(需要--difftype=sql选项),以谁为参照物。如:
1 | mysqldbcompare --server1=root@host1 --server2=root@host2 --difftype=sql db1:dbx |
最左边的db1对应于--server1选项,最右边的dbx对应于--server2选项。