mysqldbcompare 使用及参数详解

限制

该工具将每行的主键读取到数据结构中,然后用于生成每行的校验和。主键和校验和随后被排序并比较,以检测哪些行存在差异。由于这种设计,工具在处理非常大的表(许多行)时可能会表现出较慢的性能,特别是对于具有宽主键的表。不建议在主键中使用 BLOB 字段的表上使用此工具。

所需权限

用户必须具有对两个连接中要比较的数据库的 SELECT、CREATE TEMPORARY TABLES 和 SHOW VIEW 权限。用户还必须对 mysql 数据库具有 SELECT 权限。如果启用了二进制日志并使用了 --disable-binary-logging 选项,则用户还必须具有 SUPER 权限。

注意事项

在比较过程中数据不可以改变,否则出现错误。

登录用户必须具有读取所有列出的数据库和表的适当权限。对于 --difftype 选项,允许的值不区分大小写。此外,值可以指定为有效值的任何明确前缀。例如,--difftype=d 指定差异类型。如果前缀与多个有效值匹配,则会发生错误。

MySQL 客户端工具的路径应包含在 PATH 环境变量中,以便使用带有登录路径的认证机制。这允许工具使用 my_print_defaults 工具,该工具用于从登录配置文件 (.mylogin.cnf) 中读取登录路径值。

如果作为参数指定的任何数据库标识符包含特殊字符或是保留字,则必须使用反引号()进行适当引用。反引号引用的名称必须根据操作系统用单引号或双引号进行引用,即在 Windows 中为 ("),在非 Windows 系统中为 ('),以便工具将反引号引用的标识符作为单个参数读取。例如,要将名为 weirddb.name 的数据库与其他:weirddb.name 进行比较,数据库对必须使用以下语法指定(在非 Windows 系统中): 'weirddb.name`:`other:weirddb.name`'。

mysqldbcompare的语法如下:

$ mysqldbcompare --server1=user:pass@host:port:socket --server2=user:pass@host:port:socket db1:db2

以上参数中:

--server1:MySQL服务器1配置。

--server2:MySQL服务器2配置。如果是同一服务器,--server2可以省略。

db1:db2:要比较的两个数据库。如果比较不同服务器上的同名数据库,可以省略:db2。

--all:比较所有两服务器上所有的同名数据库。--exclude排除无需比较的数据库。

--run-all-tests:运行完整比较,遇到第一次差异时不停止。

--changes-for=:修改对象。例如--changes-for=server2,那么对比以sever1为主,生成的差异的修改也是针对server2的对象的修改。

-d DIFFTYPE,--difftype=DIFFTYPE:差异的信息显示的方式,有[unified|context|differ|sql],默认是unified。如果使用sql,那么就直接生成差异的SQL,这样非常方便。

--show-reverse:在生成的差异修改里面,同时会包含server2和server1的修改。

--skip-table-options:保持表的选项不变,即对比的差异里面不包括表名、AUTO_INCREMENT、ENGINE、CHARSET等差异。

--skip-diff:跳过对象定义比较检查。所谓对象定义,就是CREATE语句()里面的部分,--skip-table-options是()外面的部分。

--skip-object-compare:默认情况下,先检查两个数据库中相互缺失的对象,再对都存在对象间的差异。这个参数的作用就是,跳过第一步,不检查相互缺失的对象。

--skip-checksum-table:数据一致性验证时跳过CHECKSUM TABLE。

--skip-data-check:跳过数据一致性验证。

--skip-row-count:跳过字段数量检查。

• --all, -a

比较两个服务器之间所有相同名称的数据库(共同的数据库)。该选项会忽略以下数据库:INFORMATION_SCHEMA、PERFORMANCE_SCHEMA、mysql 和 sys。

注意:自 Utilities 1.5.5 起,sys 数据库被忽略。

• --help

显示帮助信息并退出。

• --license

显示许可证信息并退出。

• --changes-for=direction

指定服务器以显示转换以匹配另一个服务器。例如,要查看将 server1 上的对象定义转换为匹配 server2 上的相应定义的转换,请使用 --changes-for=server1。允许的值为 server1 和 server2。默认值为 server1。

• --character-set=charset

设置客户端字符集。默认值从服务器变量 character_set_client 中检索。

• --difftype=difftype, -ddifftype

指定差异显示格式。允许的格式值为 unified、context、differ 和 sql。默认值为 unified。

• --disable-binary-logging

如果启用了二进制日志,则在操作期间禁用它,以防止比较操作写入二进制日志。注意:禁用二进制日志需要 SUPER 权限。

• --exclude=exclude, -xexclude

排除一个或多个数据库的操作,可以使用特定名称(如 db1)或搜索模式。可以多次使用此选项以指定多个排除项。默认情况下,模式使用数据库模式(如 LIKE)。使用 --regexp 选项,模式使用正则表达式进行名称匹配。

自 1.4.0 版本新增。

• --format=format, -fformat

指定更改或缺失行的显示格式。允许的格式值为 grid、csv、tab 和 vertical。默认值为 grid。

• --compact

通过减少在差异结果中显示的控制行数量来压缩输出。此选项应与以下差异类型之一一起使用:unified 或 context。与 unified 差异类型和 grid 格式一起使用时最有效。

• --quiet, -q

不打印任何内容。仅返回成功或失败的退出代码。

• --regexp, --basic-regexp, -G

使用 REGEXP 运算符进行模式匹配。默认情况下使用 LIKE 进行匹配。

自 1.4.0 版本新增。

• --run-all-tests, -t

在找到第一个差异时不停止。处理所有对象。

• --server1=source

第一个服务器的连接信息。连接到服务器时,必须指定连接参数,例如用户名、主机名、密码和端口或套接字。MySQL Utilities 提供多种方式来提供此信息。所有方法都需要通过命令行选项(如 --server、--master、--slave 等)指定选择。方法包括以下几种,从最安全到最不安全排序:

  • 使用 .mylogin.cnf 文件中的登录路径(加密,不可见)。示例:loginpath[:port][:socket]
  • 使用配置文件(未加密,不可见)。注意:在 1.5.0 版本中可用。示例:configuration-file-path[:section]
  • 在命令行中指定数据(未加密,可见)。示例:user[:passwd]@host[:port][:socket]

• --server2=source

第二个服务器的连接信息。连接到服务器时,必须指定连接参数,例如用户名、主机名、密码和端口或套接字。MySQL Utilities 提供多种方式来提供此信息。所有方法都需要通过命令行选项(如 --server、--master、--slave 等)指定选择。方法包括以下几种,从最安全到最不安全排序:

  • 使用 .mylogin.cnf 文件中的登录路径(加密,不可见)。示例:loginpath[:port][:socket]
  • 使用配置文件(未加密,不可见)。注意:在 1.5.0 版本中可用。示例:configuration-file-path[:section]
  • 在命令行中指定数据(未加密,可见)。示例:user[:passwd]@host[:port][:socket]

• --show-reverse

生成一个转换报告,包含将指定对象定义反向符合的 SQL 语句。如果 --changes-for 设置为 server1,则同时生成 server2 的转换。注意:反向更改以注释形式标注和标记。

• --skip-checksum-table

跳过数据一致性检查中的 CHECKSUM TABLE 步骤。

自 1.4.3 版本新增。

• --skip-data-check

跳过数据一致性检查。

• --skip-diff

跳过对象定义差异检查。

• --skip-object-compare

跳过对象比较检查。

• --skip-row-count

跳过行计数检查。

• --span-key-size=number of bytes to use for key

更改用于比较表内容的键的大小。更高的值可以帮助在比较大型数据库时获得更准确的结果,但可能会减慢算法。默认值为 8。

• --ssl-ca

包含受信任 SSL CA 列表的文件路径。

• --ssl-cert

用于建立安全连接的 SSL 证书文件的名称。

• --ssl-key

用于建立安全连接的 SSL 密钥文件的名称。

• --ssl

指定服务器连接是否需要使用 SSL。如果无法建立加密连接,则连接尝试失败。默认设置为 0(不需要 SSL)。

• --verbose, -v

指定显示的信息量。可以多次使用此选项以增加信息量。例如,-v = 详细,-vv = 更多详细,-vvv = 调试。

• --version

显示版本信息并退出。

• --use-indexes

列出要使用的索引。如果表没有主键或它有多个唯一索引且没有空列,请使用此选项选择要使用的索引。使用格式:--useindexes="table1.indexA[;table2.indexB;]"。

• --width=number

更改测试报告的显示宽度。默认值为 75 个字符。

文档:https://downloads.mysql.com/docs/mysql-utilities-1.5-en.a4.pdf#page=86&zoom=100,48,801

相关推荐
一只淡水鱼665 分钟前
【mybatis】基本操作:详解Spring通过注解和XML的方式来操作mybatis
java·数据库·spring·mybatis
张声录18 分钟前
【ETCD】【实操篇(十六)】基于角色的访问控制:ETCD 安全管理指南
数据库·安全·etcd
warrah13 分钟前
redis——岁月云实战
数据库·redis·缓存
秀儿y14 分钟前
Redis-十大数据类型
数据库·redis·缓存·oracle
凡人的AI工具箱34 分钟前
每天40分玩转Django:Django类视图
数据库·人工智能·后端·python·django·sqlite
知识的宝藏38 分钟前
Django models中的增删改查与MySQL SQL的对应关系
sql·mysql·django·django models
路在脚下@38 分钟前
MySQL的索引失效的原因有那些
数据库·mysql
凡人的AI工具箱44 分钟前
每天40分玩转Django:实操图片分享社区
数据库·人工智能·后端·python·django
CT随1 小时前
MongoDB
数据库·mongodb
新子-存在了1 小时前
linux中 mysql备份
linux·运维·mysql