网站设计有限公司怎么样,wordpress li分页,课程网站设计建设,指数Percona Toolkit 神器全攻略#xff08;复制类#xff09; Percona Toolkit 神器全攻略系列共八篇#xff0c;前文回顾#xff1a;
前文回顾Percona Toolkit 神器全攻略Percona Toolkit 神器全攻略#xff08;实用类#xff09;Percona Toolkit 神器全攻略#xff08;配…Percona Toolkit 神器全攻略复制类 Percona Toolkit 神器全攻略系列共八篇前文回顾
前文回顾Percona Toolkit 神器全攻略Percona Toolkit 神器全攻略实用类Percona Toolkit 神器全攻略配置类Percona Toolkit 神器全攻略监控类Percona Toolkit 神器全攻略系统类Percona Toolkit 神器全攻略开发类 全文约定$为命令提示符、greatsql为GreatSQL数据库提示符。在后续阅读中依据此约定进行理解与操作 复制类
在Percona Toolkit中复制类共有以下工具
pt-heartbeat监控MySQL/GreatSQL复制延迟pt-slave-delay设定从落后主的时间pt-slave-find查找和打印所有MySQL/GreatSQL复制层级关系pt-slave-restart监控Salve错误并尝试重启Salvept-table-checksum校验主从复制一致性pt-table-sync高效同步表数据pt-galera-log-explainer对多个 Galera 日志进行过滤、聚合和汇总
pt-heartbeat
概要
用来监测主从延迟的情况此工具的设计为向 Master 中插入一条带有当前时间GreatSQL中的now()函数的记录到心跳表中然后该记录会复制到 Slave 中。Slave 根据当前的系统时间戳Perl中的time函数减去heartbeat表中的记录值来判断主从的延迟情况。
用法
pt-heartbeat [OPTIONS] [DSN] --update|--monitor|--check|--stop
选项
至少指定 --stop 、 --update 、 --monitor 或 --check 之一
互斥关系
--update 、 --monitor 和 --check 是互斥的
--daemonize 和 --check 是互斥的
该工具所有选项如下
参数含义--ask-pass连接MySQL/GreatSQL提示输入密码--charset默认字符集--check检查一次从机延迟并退出--check-read-only检查服务器是否启用了read_only--config读取这个逗号分隔的配置文件列表如果指定这必须是命令行上的第一个选项--create-table如果heartbeat表--table不存在则创建它--create-table-engine设置用于heartbeat表的引擎--daemonize后台运行--database用于连接的数据库--dbi-driver指定连接的驱动程序--defaults-file只从给定文件中读取 GreatSQL 选项--file将最新的--monitor输出打印到此文件--frames平均值的时间范围默认为1m,5m,15m--help显示帮助--host连接到主机--[no]insert-heartbeat-row如果--table中不存在心跳行则插入该行--interval更新或检查heartbeat表的频率默认1秒--log后台运行时将所有输出打印到此文件--master-server-id根据此主服务器 ID 计算--monitor或--check的延迟--monitor连续监控从机延迟--fail-successive-errors如果指定将在给定数量的连续 DBI 错误无法连接到服务器或发出查询后失败--password连接时使用的密码--pid创建给定的 PID 文件--port用于连接的端口号--print-master-server-id打印自动检测到的或给定的--master-server-id--read-only-interval当指定--check-read-only 时发现服务器处于只读状态时休眠的时间间隔--recurse在--check模式下递归检查从站到此深度--recursion-method用于查找从站的首选递归方法--replace使用REPLACE而不是UPDATE进行 –update--run-time运行时间--sentinel如果该文件存在则退出--slave-user设置用于连接从站的用户--slave-password设置用于连接从站的密码--set-vars在这个以逗号分隔的variablevalue对列表中设置 MySQL/GreatSQL 变量--skew延迟检查多久默认值0.5--socket用于连接的套接字文件--stop通过创建哨兵文件来停止运行实例--table用于心跳的表--update更新主机的心跳--user登录的用户--utc忽略系统时区并仅使用 UTC--version显示版本--[no]version-check版本检查
最佳实践
为演示该工具在主机上部署单机多实例并搭建一主一从模式环境如下
数据库IP端口号角色GreatSQL-8.0.32-25192.168.6.553306MasterGreatSQL-8.0.32-25192.168.6.553307Slave
首先需要在Master上添加表
$ pt-heartbeat --userroot --ask-pass -S /data/GreatSQL/mysql.sock -D test_db --master-server-id103306 --create-table --update -D选择一个数据库中有的库 --master-server-id设置主机的server_id --create-table用于创建表 --update会每秒更新一次heartbeat表的记录 现在进入Master上可以看到在test_db库下有一张heartbeat表这里有一条记录的数据。在Slave节点上也应该出现这张表
greatsql SELECT * FROM test_db.heartbeat;
------------------------------------------------------------------------------------------------------------
| ts | server_id | file | position | relay_master_log_file | exec_master_log_pos |
------------------------------------------------------------------------------------------------------------
| 2024-04-22T15:57:44.001900 | 103306 | binlog.000032 | 41464 | NULL | NULL |
------------------------------------------------------------------------------------------------------------
1 row in set (0.00 sec)
接下来我们更新主库上这张表并让他在后台运行
$ pt-heartbeat --userroot --ask-pass -S /data/GreatSQL/mysql.sock -D test_db --master-server-id103306 --update --daemonize
进入从机开始监控主从延迟
$ pt-heartbeat --userroot --ask-pass -S /data/GreatSQL02/mysql.sock -D test_db --master-server-id103306 --monitor --print-master-server-id
Enter password:
0.00s [ 0.00s, 0.00s, 0.00s ] 103306
0.00s [ 0.00s, 0.00s, 0.00s ] 103306
0.00s [ 0.00s, 0.00s, 0.00s ] 103306
0.00s [ 0.00s, 0.00s, 0.00s ] 103306 输出的结果为实时延迟[1分钟延迟5分钟延迟15分钟延迟] 主节点的Server_id 当然也可以使用--interval参数控制主库上的更新间隔默认是1秒 如果使用守护进程的方式要关闭的话可以采用pt-heartbeat --stop 单次查看Slave库上的延迟情况可以把monitor换成--check
pt-slave-delay
概要
可能在日常工作中会存在误删除数据的可能所以可以用该工具设置Slave服务器落后于Master服务器达到构建一个延迟从库
原理
通过启动和停止复制SQL线程来设置Slave库落后于Master库的指定时间
用法
pt-slave-delay [OPTIONS] SLAVE_DSN [MASTER_DSN]
选项
该工具所有选项如下
参数含义--ask-pass连接时提示输入密码--charset默认字符集--config读取这个逗号分隔的配置文件列表如果指定这必须是命令行上的第一个选项--[no]continue退出后继续正常复制--daemonize后台运行--database用于连接的数据库--defaults-file只从给定文件中读取MySQL/GreatSQL选项--delay从库延迟于主库的时间默认1小时--help显示帮助--host连接到主机的IP地址--interval启动或停止的频率。默认1分钟--log后台运行时日志输出的位置--password连接时使用的密码--pid创建给定的 PID 文件--port用于连接的端口号--quiet不要打印有关操作的信息性消息--run-time运行时间默认是一直运行--set-vars在这个以逗号分隔的variablevalue对列表中设置 MySQL/GreatSQL 变量--socket用于连接的套接字文件--use-master从Master库获取二进制日志位置而不从Slave库获取--user用于登录的用户--version显示版本--[no]version-check版本检查
最佳实践
此工具只需在Slave库运行即可无需在Master节点运行
$ pt-slave-delay --userroot --ask-pass -S /data/GreatSQL02/mysql.sock --delay1m --interval15s --run-time10m 将主从延迟设定为1分钟每15秒进行一次检测持续运行10分钟 输出结果如下
2024-04-23T09:29:00 slave running 0 seconds behind
2024-04-23T09:29:00 STOP SLAVE until 2024-04-23T09:30:00 at master position binlog.000032/500611
2024-04-23T09:29:15 slave stopped at master position binlog.000032/500611
2024-04-23T09:29:30 slave stopped at master position binlog.000032/500611
......中间省略
2024-04-23T09:30:30 Setting slave to run normally
如果在运行的过程中进入Slave节点查看SHOW SLAVE STATUS\G
Slave_IO_Running: Yes
Slave_SQL_Running: No
可以看到SQL线程已关闭证明此工具精准控制SQL线程的启停有效实现主从延迟 也可使用CHANGE REPLICATION SOURCE TO SOURCE_DELAY3600;该命令来控制主从延迟的时间 pt-slave-find
概要
查找和打印主从架构中主库的从库个数类似于拓扑图的意思
用法
pt-slave-find [OPTIONS] [DSN]
选项
参数含义--ask-pass连接MySQL/GreatSQL提示输入密码--charset默认字符集--config读取这个逗号分隔的配置文件列表如果指定这必须是命令行上的第一个选项--databases仅检查此逗号分隔的数据库列表--defaults-file只从给定文件中读取 MySQL/GreatSQL 选项--help显示帮助--host连接到主机--password连接时使用的密码--pid创建给定的 PID 文件--port用于连接的端口号--recurse层次结构中要递归的级别数默认为无限--recursion-method用于查找从库的首选递归方法有三种 (processlist、hosts、none)--report-format设置打印有关从库的哪些信息--resolve-address将 IP 地址解析为主机名--slave-user设置用于连接从库的用户--slave-password设置用于连接从库的密码--set-vars以逗号分隔的variablevalue对列表中设置 MySQL/GreatSQL 变量--socket用于连接的套接字文件--user登录的用户--version显示版本
最佳实践
连接到主从集群的Master节点查看该集群的复制层次数
$ pt-slave-find h192.168.6.55,uroot --ask-pass
192.168.6.55
Version 8.0.32-25
Server ID 103306
Uptime 20:38:01 (started 2024-04-22T14:09:23)
Replication Is not a slave, has 1 slaves connected, is not read_only
Filters
Binary logging ROW
Slave status
Slave mode STRICT
Auto-increment increment 1, offset 1
InnoDB version 8.0.32-8.0.32
- 192.168.6.55:3307Version 8.0.32-25Server ID 103307Uptime 20:35:59 (started 2024-04-22T14:12:02)Replication Is a slave, has 0 slaves connected, is not read_onlyFiltersBinary logging ROWSlave status 0 seconds behind, running, no errorsSlave mode STRICTAuto-increment increment 1, oInnoDB version 8.0.32-8.0.32
可以看到该主节点下只有一个从节点且输出也显示了主节点和总结点的信息
pt-slave-restart
概要
监视一个或多个 GreatSQL 复制从库是否有错误并在复制停止时尝试重新启动复制
用法
pt-slave-restart [OPTIONS] [DSN]
选项
参数含义--always永不停止Slave线程--ask-pass连接MySQL/GreatSQL提示输入密码--charset默认字符集--[no]check-relay-log在检查从库错误之前检查最后一个中继日志文件和位置--config读取这个逗号分隔的配置文件列表如果指定这必须是命令行上的第一个选项--daemonize后台运行--databases数据库列表--defaults-file只从给定文件中读取 MySQL/GreatSQL 选项--error-length要打印的错误消息的最大长度--error-numbers指定跳过哪些错误可用,进行分隔--error-text根据错误的信息进行匹配跳过--help显示帮助--host连接到主机--log后台运行时将输出打印到此文件--max-sleep再次轮询从库之前休眠的最长时间--min-sleep再次轮询从库之前休眠眠的最短时间--monitor是否监控从机默认--password连接时使用的密码--pid创建给定的 PID 文件--port用于连接的端口号--quiet抑制正常输出禁用--verbose--recurse在主库执行监控从库默认深度 0 表示“仅监视指定的从库”--recursion-method用于查找从库的首选递归方法--run-time运行时间--sentinel如果该文件存在则退出默认值/tmp/pt-slave-restart-sentinel--slave-user设置用于连接从库的用户--slave-password设置用于连接从库的密码--set-vars以逗号分隔的variablevalue 对列表中设置 MySQL/GreatSQL 变量--skip-count重新启动从库时要跳过的语句数默认1--master-uuid使用 GTID 时应创建一个空事务以便跳过它--sleep检查从库之间的初始睡眠秒数--socket用于连接的套接字文件--stop停止运行实例--until-master运行到指定的master_log_pos,file位置后停止--until-relay运行到指定的中继日志文件和位置后停止--user用于登录的用户--verbose向输出添加更多信息--version显示版本--[no]version-check版本检查
最佳实践
在主库创建一张t1表并插入5条数据
greatsql CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(255) NOT NULL);
greatsql INSERT INTO t1 (name) VALUES (张三);
greatsql INSERT INTO t1 (name) VALUES (李四);
greatsql INSERT INTO t1 (name) VALUES (王五);
greatsql INSERT INTO t1 (name) VALUES (赵六);
greatsql INSERT INTO t1 (name) VALUES (孙七);
主库查看数据
greatsql SELECT * FROM test_db.t1;
------------
| id | name |
------------
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
| 4 | 赵六 |
| 5 | 孙七 |
------------
5 rows in set (0.00 sec)
从库查看数据
greatsql SELECT * FROM test_db.t1;
------------
| id | name |
------------
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
| 4 | 赵六 |
| 5 | 孙七 |
------------
5 rows in set (0.00 sec)
主动处理错误
在从库执行pt-slave-restart工具监控从库
$ pt-slave-restart h192.168.6.55,P3307,uroot --ask-pass 注意若使用该工具参数slave_parallel_workers必须设置为0否则会报错”Cannot skip transactions properly because GTID is enabled and slave_parallel_workers 0. See GLOBAL TRANSACTION IDS in the tools documentation.“ 如果不关闭多线程复制工具会分不清到底哪个线程复制出了问题 此时已经开启了从库监控我们在主库上人为造成一个主从复制错误
greatsql SET sql_log_bin0;
greatsql INSERT INTO t1 VALUES(6,周八);
greatsql SET sql_log_bin1;
greatsql DELETE FROM t1 WHERE id6;
此时工具检测到了主从复制异常并且马上修复了该错误使主从复制正常运行
$ pt-slave-restart h192.168.6.55,P3307,uroot --ask-pass
# 时间戳 从库端信息 relay log relat log 位置 主从复制报错码
2024-04-24T10:33:54 P3307,h192.168.6.55,uroot myarch-relay-bin.000003 36702 1032
手动处理错误
如果一直运行工具检测到错误会直接修复。如果是已经有错误了要如何使用该工具修复还是同样的错误再次主库手动执行
greatsql SET sql_log_bin0;
greatsql INSERT INTO t1 VALUES(6,周八);
greatsql SET sql_log_bin1;
greatsql DELETE FROM t1 WHERE id6;
此时查看从库报错
greatsql SHOW SLAVE STATUS\G
Slave_IO_Running: Yes
Slave_SQL_Running: No
Last_SQL_Error: Could not execute Delete_rows event on table test_db.t1; Cant find record in t1, Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the events master log binlog.000032, end_log_pos 504208
记住报错的错误码1032接着在从库机器上使用该工具
$ pt-slave-restart h192.168.6.55,P3307,uroot --ask-pass --error-numbers1032 使用--error-numbers指定错误码 此时就会输出对应的信息
$ pt-slave-restart h192.168.6.55,P3307,uroot --ask-pass --error-numbers10322024-04-24T10:49:26 P3307,h192.168.6.55,uroot myarch-relay-bin.000003 37046 1032
接着在从库上查看主从状态就可以看到主从复制已经是正常的了
greatsql SHOW SLAVE STATUS\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Last_SQL_Error:
pt-table-checksum
这款数据校验与修复工具虽广受欢迎却存在不容忽视的短板不支持MySQL/GreatSQL的MGR场景、国内普遍的上云下云业务以及MySQL/GreatSQL与Oracle间的异构数据库等多元化场景。为了攻克这些难题GreatSQL推出了名为gt-checksum的校验修复工具旨在全面满足各类业务需求
Gitee仓库地址https://gitee.com/GreatSQL/gt-checksum
概要
检查 MySQL/GreatSQL 的主从数据是否一致
用法
pt-table-checksum [OPTIONS] [DSN]
选项
参数含义--ask-pass连接MySQL/GreatSQL提示输入密码--channel指定复制通道--[no]check-binlog-format检查所有服务器上的binlog_format系统参数是否相同--binary-index修改--create-replicate-table的行为使复制表的上下边界列以 BLOB 数据类型创建--check-interval指定因选项--max-lag检查之间休眠时间--[no]check-plan检查查询执行计划的安全性--[no]check-replication-filters指定检测主从复制是否有设置复制过滤器--check-slave-lag指定复制延迟大于选项--max-lag指定的值之后暂停检查校验操作--[no]check-slave-tables检查从库上的表是否存在并具有所有校验和--columns--chunk-index指定使用哪个索引对表进行chunk分块操作--chunk-index-columns指定使用选项--chunk-index的索引使用最左前缀几个索引字段只适用于复合索引--chunk-size为每个校验和查询选择的行数允许的后缀单位为k、M、G--chunk-size-limit指定chunk的行数最多可以超过选项--chunk-size指定的行数的多少倍--chunk-time动态调整每个chunk的大小使相应的表行数都在指定的时间内完成校验操作--columns指定只需要校验的字段如有多个则用逗号隔开--config读取这个逗号分隔的配置文件列表如果指定这必须是命令行上的第一个选项--[no]create-replicate-table创建选项--replicate指定的数据库和表--databases仅对逗号分隔的数据库列表进行校验--databases-regex仅名称与此正则表达式匹配和数据库进行校验--defaults-file只从给定文件中读取 MySQL/GreatSQL 选项--disable-qrt-plugin如果启用了 QRT查询响应时间插件请将其禁用--[no]empty-replicate-table在对表进行校验和之前删除每个表之前的校验和--engines仅校验使用这些存储引擎的表--explain显示但不执行校验和查询禁用--[no]empty-replicate-table--fail-on-stopped-replication若复制停止则会失败并显示错误退出状态 128而不是等到复制重新启动--float-precisionFLOAT 和 DOUBLE 数字到字符串转换的精度--function指定校验操作使用的哈希函数。可选函数有SHA1、MD5等--help显示帮助--host连接到主机--ignore-columns指定需要忽略校验的字段--ignore-databases指定需要忽略校验的数据库--ignore-databases-regex指定采用正则表达式匹配忽略校验的数据库--ignore-engines指定需要忽略校验的存储引擎列表--ignore-tables指定需要忽略校验的表--ignore-tables-regex指定采用正则表达式匹配忽略校验的表--max-lag指定允许主从复制延迟时长的最大值单位秒--max-load在每个块之后检查SHOW GLOBAL STATUS如果任何状态变量高于阈值则暂停--password连接时使用的密码--pause-file当此参数指定的文件存在时执行将暂停--pid创建给定的 PID 文件--plugin定义pt_table_checksum_plugin类的 Perl 模块文件--port用于连接的端口号--progress将进度报告打印到 STDERR--quiet仅打印最重要的信息禁用 --progress --recurse指定搜寻从库的层级默认无限--recursion-method指定获取从库的方式--replicate将校验和结果写入此表--[no]replicate-check指定在校验完每张表后检查主从当前表是否出现不一致--replicate-check-only检查副本的一致性而无需执行校验和查询--replicate-check-retries指定当校验出主从数据不一致重试校验的次数--replicate-database指定工具在执行校验操作时在哪个数据库下进行--resume指定从最后完成校验的chunk开始恢复校验--retries指定当出现非严重性错误时重复校验一个块的次数--run-time指定校验操作运行的时间--separator用于 CONCAT_WS() 的分隔符--skip-check-slave-lag指定DSN连接从库时跳过主从延迟检查可以指定多个从库检查--slave-user设置用于连接从库的用户--slave-password设置用于连接从库的密码--set-vars运行检查时指定参数值如有多个用逗号分隔--socket用于连接的套接字文件--slave-skip-tolerance当主表被标记为仅在一个块中进行校验和但从表超过了可接受的最大大小时该表将被跳过--tables仅对这个以逗号分隔的表列表进行校验和--tables-regex仅对名称与此 Perl 正则表达式匹配的表进行校验--trim将 TRIM() 添加到 VARCHAR 列在比较 4.1 和 5.0 时有帮助--truncate-replicate-table在开始校验和之前截断复制表--user登录的用户--version显示版本--[no]version-check版本检查--where仅执行与此 WHERE 子句匹配的行
最佳实践
校验主从数据是否一致(主从端口一致) 主从机器端口一致时可以使用此方法 检测差异并写入差异到checksums表中主库上执行如下命令
pt-table-checksum --create-replicate-table --replicatetest_db.checksums --nocheck-replication-filters --nocheck-binlog-format --recursion-methodprocesslist --databasestest_db --userroot --ask-pass --host192.168.6.55 --port3306
--nocheck-replication-filters不检查复制过滤器建议启用 --no-check-binlog-format不检查复制的binlog模式要是binlog模式是ROW则会报错
结果如下
Checking if all tables can be checksummed ...
Starting checksum ...TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE
04-24T15:57:13 0 0 9 0 1 0 0.008 test_db.test_t1
TS完成检查的时间ERRORS检查时候发生错误和警告的数量DIFFS0表示一致非0表示不一致DIFF_ROWS主库和从库差异的数据行数CHUNKS被划分到表中的块的数目SKIPPED由于错误或警告或过大则跳过块的数目TIME执行的时间TABLE被检查的表名
同时结果也保存到了表中
greatsql select * from checksums;
--------------------------------------------------------------------------------------------------------------------------------------------------------------
| db | tbl | chunk | chunk_time | chunk_index | lower_boundary | upper_boundary | this_crc | this_cnt | master_crc | master_cnt | ts |
--------------------------------------------------------------------------------------------------------------------------------------------------------------
| test_db | t1 | 1 | 0.001848 | NULL | NULL | NULL | 6d60e23f | 5 | 6d60e23f | 5 | 2024-04-24 16:29:30 |
--------------------------------------------------------------------------------------------------------------------------------------------------------------
1 rows in set (0.01 sec)
校验主从数据是否一致(主从端口不一致) 主从机器端口不一致时可以使用此方法 在主库创建一张DSN表
greatsql CREATE TABLE test_db.dsns ( id int(11) NOT NULL AUTO_INCREMENT, parent_id int(11) DEFAULT NULL,dsn varchar(255) NOT NULL, PRIMARY KEY (id) );greatsql INSERT INTO test_db.dsns(dsn) VALUES (h192.168.6.55,P3307,uroot,p);
使用工具校验注意此时--recursion-method就要改为DSN模式
$ pt-table-checksum --replicatetest_db.checksums --nocheck-replication-filters --no-check-binlog-format --host192.168.6.55 --port3306 --userroot --ask-pass --databasestest_db --recursion-method dsnh192.168.6.55,Dtest_db,tdsns
结果如下
Checking if all tables can be checksummed ...
Starting checksum ...TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE
04-24T17:04:42 0 0 1 0 1 0 0.035 test_db.dsns
04-24T17:04:42 0 0 1 0 1 0 0.022 test_db.heartbeat
04-24T17:04:42 0 0 0 0 1 0 0.036 test_db.my_table
04-24T17:04:42 0 2 10000 9823 4 0 0.097 test_db.ptosc
04-24T17:04:42 0 0 5 0 1 0 0.021 test_db.t1
04-24T17:04:42 0 1 15 15 1 0 0.026 test_db.tc10011_ta4
04-24T17:04:42 0 1 9 9 1 0 0.078 test_db.test_t1
04-24T17:04:42 0 0 0 0 1 0 0.066 test_db.test_table
可以看到有三张表被检测出来不一致。如果连表都不存在则会报错Table XXXX doesnt exist
出现了主从数据不一致就要使用pt-table-sync工具进行修复
pt-table-sync
概要
高效同步 MySQL/GreatSQL 表数据
用法
pt-table-sync [OPTIONS] DSN [DSN]
选项
至少指定 --print 、 --execute 或 --dry-run 之一。--where 和 --replicate 是互斥的
参数含义--algorithms比较表时使用的算法按优先顺序默认值Chunk、Nibble、GroupBy、Stream--ask-pass连接 MySQL/GreatSQL 提示输入密码--bidirectional启用第一个和后续主机之间的双向同步--[no]bin-log指定同步操作记录二进制日志相当于执行SET SQL_LOG_BIN1--buffer-in-mysql指定 MySQL/GreatSQL 在其内存中缓冲查询--[no]buffer-to-client比较时从 MySQL/GreatSQL 中逐一获取行--channel指定复制通道--charset默认字符集--[no]check-child-tables检查--execute是否会对子表产生不利影响--[no]check-master指定当选项--sync-to-master时尝试验证工具连接到的主库是否是真正的主库--[no]check-slave检查目标服务器是否为从服务器--[no]check-triggers检查目标表上是否未定义触发器--chunk-column指定根据表中字段对表进行chunk操作--chunk-index指定使用哪个索引对表进行chunk分块操作--chunk-size每个块的行数或数据大小--columns比较以逗号分隔的列列表--config读取这个逗号分隔的配置文件列表如果指定这必须是命令行上的第一个选项--conflict-column当--bidirectional同步期间发生行冲突时比较此列--conflict-comparison选择具有此属性的--conflict-column作为源--conflict-error如何报告无法解决的冲突和冲突错误默认为warn(警告)--conflict-threshold一个--conflict-column必须超过另一个的数量--conflict-value将此值用于某些--conflict-comparison--databases仅同步的数据库列表如有多个用逗号分隔--defaults-file只从给定文件中读取 GreatSQL 选项--dry-run分析、决定要使用的同步算法、打印并退出--engines仅同步的存储引擎列如有多个用逗号分隔--execute执行查询以使表具有相同的数据--explain-hosts打印连接信息并退出--float-precisionFLOAT 和 DOUBLE 数字到字符串转换的精度--[no]foreign-key-checks启用外键检查 (SET FOREIGN_KEY_CHECKS1)--function选择使用哪个哈希函数作为校验和默认为 CRC32--help显示帮助--[no]hex-blobHEX() BLOB、TEXT和 BINARY列--host连接到主机--ignore-columns要忽略的列如有多个用逗号分隔--ignore-databases要忽略的数据库如有多个用逗号分隔--ignore-engines要忽略的引擎如有多个用逗号分隔--ignore-tables要忽略的表如有多个用逗号分隔--ignore-tables-regex要忽略的表正则表达式如有多个用逗号分隔--[no]index-hint将 FORCE/USE INDEX 提示添加到块和行查询中--lock锁定表0永不锁表1每个同步周期锁表2表操作时锁表3每个DSN连接的服务器锁表--lock-and-rename指定锁定源表和目标表执行同步操作然后进行表名交换--password连接时使用的密码--pid创建给定的 PID 文件--port用于连接的端口号--print打印将解决差异的查询--recursion-method用于查找从站的首选递归方法--replace将所有INSERT和UPDATE语句写为REPLACE--replicate同步此表中列为不同的表--slave-user设置用于连接从库的用户--slave-password设置用于连接从库的密码--set-vars以逗号分隔的variablevalue对列表中设置 MySQL/GreatSQL 变量--socket用于连接的套接字文件--sync-to-master指定将DSN连接信息确认为从库并同步信息到主库--tables要同步的表如有多个用逗号分隔--timeout-ok指定当选项--wait导致工具执行失败时跳过失败继续执行--[no]transaction指定工具操作使用事务代替LOCK TABLES语句进行锁表--trimBIT_XOR 和 ACCUM 模式下的 TRIM() VARCHAR 列--[no]unique-checks启用唯一键检查 ( SET UNIQUE_CHECKS1 )--user用于连接的用户--verbose打印同步操作的结果--version显示版本--[no]version-check版本检查--wait指定存在主从复制延迟时从库可以等待多长时间追上主库如果超过时间依然存在延迟就中止退出--whereWHERE 子句用于限制同步到表的一部分--[no]zero-chunk为具有零或零等值的行添加块
最佳实践
同步单个表 注意同步时候两台机器不能是主从关系。第一DSN为源库第二个DSN为被同步库 将192.168.6.55机器上的test_db.test_t1表同步至192.168.6.129机器
$ pt-table-sync --execute h192.168.6.55,uroot,p,P3306,Dtest_db,ttest_t1 h192.168.6.129,ptest,utest,P3306
同步单个库 注意同步时候两台机器不能是主从关系。第一DSN为源库第二个DSN为被同步库 $ pt-table-sync --execute h192.168.6.55,uroot,p,P3306 h192.168.6.129,utest,ptest --databases test_db
此时如果有表不存在则会报错
Table test_db.checksums does not exist on P3306,h192.168.6.129,p...,utest while doing test_db.checksums on 192.168.6.129
此时只需手动建表即可
同步所有库表 注意同步时候两台机器不能是主从关系。第一DSN为源库第二个DSN为被同步库 $ pt-table-sync --execute h192.168.6.55,uroot,p,P3306 h192.168.6.129,utest,ptest
主从复制同步从库
同步test_db.checksums中记录的数据不一致的表。该表中的数据是由pt-table-checksum工具检测出来的
$ pt-table-sync --execute --replicate test_db.checksums --sync-to-master h192.168.6.55,P3307,uroot,p
本文完 :) 下章节将介绍Percona Toolkit 神器全攻略性能类 Enjoy GreatSQL :)
关于 GreatSQL
GreatSQL是适用于金融级应用的国内自主开源数据库具备高性能、高可靠、高易用性、高安全等多个核心特性可以作为MySQL或Percona Server的可选替换用于线上生产环境且完全免费并兼容MySQL或Percona Server。
相关链接 GreatSQL社区 Gitee GitHub Bilibili
GreatSQL社区 社区有奖建议反馈 https://greatsql.cn/thread-54-1-1.html
社区博客有奖征稿详情 https://greatsql.cn/thread-100-1-1.html
对文章有疑问或者有独到见解都可以去社区官网提出或分享哦~
技术交流群
微信QQ群
QQ群533341697
微信群添加GreatSQL社区助手微信号wanlidbc 好友待社区助手拉您进群。 文章转载自: http://www.morning.qbfwb.cn.gov.cn.qbfwb.cn http://www.morning.zntf.cn.gov.cn.zntf.cn http://www.morning.qxltp.cn.gov.cn.qxltp.cn http://www.morning.hmgqy.cn.gov.cn.hmgqy.cn http://www.morning.xqspn.cn.gov.cn.xqspn.cn http://www.morning.jpgfq.cn.gov.cn.jpgfq.cn http://www.morning.gqksd.cn.gov.cn.gqksd.cn http://www.morning.yrmpz.cn.gov.cn.yrmpz.cn http://www.morning.rhfh.cn.gov.cn.rhfh.cn http://www.morning.dkfrd.cn.gov.cn.dkfrd.cn http://www.morning.wdhhz.cn.gov.cn.wdhhz.cn http://www.morning.mggwr.cn.gov.cn.mggwr.cn http://www.morning.kfclh.cn.gov.cn.kfclh.cn http://www.morning.brnwc.cn.gov.cn.brnwc.cn http://www.morning.rwjtf.cn.gov.cn.rwjtf.cn http://www.morning.dktyc.cn.gov.cn.dktyc.cn http://www.morning.khxwp.cn.gov.cn.khxwp.cn http://www.morning.tkfnp.cn.gov.cn.tkfnp.cn http://www.morning.sqqds.cn.gov.cn.sqqds.cn http://www.morning.lxlzm.cn.gov.cn.lxlzm.cn http://www.morning.rltw.cn.gov.cn.rltw.cn http://www.morning.ghxsn.cn.gov.cn.ghxsn.cn http://www.morning.lhsdf.cn.gov.cn.lhsdf.cn http://www.morning.kmcby.cn.gov.cn.kmcby.cn http://www.morning.fmswb.cn.gov.cn.fmswb.cn http://www.morning.mlzyx.cn.gov.cn.mlzyx.cn http://www.morning.pqqxc.cn.gov.cn.pqqxc.cn http://www.morning.flpjy.cn.gov.cn.flpjy.cn http://www.morning.hxsdh.cn.gov.cn.hxsdh.cn http://www.morning.rjnky.cn.gov.cn.rjnky.cn http://www.morning.pyncx.cn.gov.cn.pyncx.cn http://www.morning.zpfr.cn.gov.cn.zpfr.cn http://www.morning.yjprj.cn.gov.cn.yjprj.cn http://www.morning.skcmt.cn.gov.cn.skcmt.cn http://www.morning.ptslx.cn.gov.cn.ptslx.cn http://www.morning.jqlx.cn.gov.cn.jqlx.cn http://www.morning.bflws.cn.gov.cn.bflws.cn http://www.morning.blxlf.cn.gov.cn.blxlf.cn http://www.morning.alwpc.cn.gov.cn.alwpc.cn http://www.morning.tsycr.cn.gov.cn.tsycr.cn http://www.morning.kltsn.cn.gov.cn.kltsn.cn http://www.morning.yxwcj.cn.gov.cn.yxwcj.cn http://www.morning.mmtjk.cn.gov.cn.mmtjk.cn http://www.morning.qfrmy.cn.gov.cn.qfrmy.cn http://www.morning.tnyanzou.com.gov.cn.tnyanzou.com http://www.morning.nspzy.cn.gov.cn.nspzy.cn http://www.morning.jzykw.cn.gov.cn.jzykw.cn http://www.morning.mksny.cn.gov.cn.mksny.cn http://www.morning.xjwtq.cn.gov.cn.xjwtq.cn http://www.morning.rwcw.cn.gov.cn.rwcw.cn http://www.morning.gcspr.cn.gov.cn.gcspr.cn http://www.morning.kljhr.cn.gov.cn.kljhr.cn http://www.morning.xmxbm.cn.gov.cn.xmxbm.cn http://www.morning.xdjsx.cn.gov.cn.xdjsx.cn http://www.morning.wiitw.com.gov.cn.wiitw.com http://www.morning.ngkng.cn.gov.cn.ngkng.cn http://www.morning.wnmdt.cn.gov.cn.wnmdt.cn http://www.morning.qbccg.cn.gov.cn.qbccg.cn http://www.morning.qjxkx.cn.gov.cn.qjxkx.cn http://www.morning.mhwtq.cn.gov.cn.mhwtq.cn http://www.morning.ynbyk.cn.gov.cn.ynbyk.cn http://www.morning.nypgb.cn.gov.cn.nypgb.cn http://www.morning.tdwjj.cn.gov.cn.tdwjj.cn http://www.morning.ymwny.cn.gov.cn.ymwny.cn http://www.morning.yjqkk.cn.gov.cn.yjqkk.cn http://www.morning.qlck.cn.gov.cn.qlck.cn http://www.morning.eronghe.com.gov.cn.eronghe.com http://www.morning.fwblh.cn.gov.cn.fwblh.cn http://www.morning.rlbfp.cn.gov.cn.rlbfp.cn http://www.morning.kpcxj.cn.gov.cn.kpcxj.cn http://www.morning.zsthg.cn.gov.cn.zsthg.cn http://www.morning.mqfw.cn.gov.cn.mqfw.cn http://www.morning.xgchm.cn.gov.cn.xgchm.cn http://www.morning.tsdjj.cn.gov.cn.tsdjj.cn http://www.morning.nfyc.cn.gov.cn.nfyc.cn http://www.morning.lzjxn.cn.gov.cn.lzjxn.cn http://www.morning.sbrjj.cn.gov.cn.sbrjj.cn http://www.morning.rfwqt.cn.gov.cn.rfwqt.cn http://www.morning.fwqgy.cn.gov.cn.fwqgy.cn http://www.morning.bwmm.cn.gov.cn.bwmm.cn