percona-toolkit之pt-table-checksum
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,第一部分-简介pt-table-checksum通过SQL在主库执行数据块的校验,再将相同的语句传送到从库,并在从库上计算数据块的校验,最后将主从库相同块的校验值进行对比,辨别主从数据是否不一致。pt
千家信息网最后更新 2025年02月02日percona-toolkit之pt-table-checksum
第一部分-简介
pt-table-checksum通过SQL在主库执行数据块的校验,再将相同的语句传送到从库,并在从库上计算数据块的校验,最后将主从库相同块的校验值进行对比,辨别主从数据是否不一致。
pt-table-sync用来修复主从复制数据的不一致,使得它们修复到最终一致,也可以实现多个实例或者是应用双写或多写的多个不相关的数据库实例修复到一致。同时它还内部集成了pt-table-checksum的校验功能,可以一边校验一边修复,也可以基于pt-table-checksum的计算结果来进行修复。
第二部分-工具的安装
方法1-RPM安装 1.软件下载: [root@MySQL-01 ~]# wget http://www.percona.com/downloads/percona-toolkit/LATEST/RPM/percona-toolkit-2.2.7-1.noarch.rpm 2.安装该工具依赖的软件包: [root@MySQL-01 ~]# yum install perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes -y 3.软件安装: [root@MySQL-01 ~]# rpm -ivh percona-toolkit-2.2.7-1.noarch.rpm Preparing... ########################################### [100%] 1:percona-toolkit ########################################### [100%]方法2-源码安装 1.软件下载: 这两个工具均包含在percona-toolkit里,线上下载地址: https://www.percona.com/downloads/percona-toolkit/2.2.2/。 在设备上直接下载的指令如下,下载后解压使用:wget https://www.percona.com/downloads/percona-toolkit/2.2.2/percona-toolkit-2.2.2.tar.gz 2、安装依赖软件包 yum install perl perl-devel perl-Time-HiRes perl-DBI perl-DBD-MySQL 3、软件安装 tar zxvf percona-toolkit-2.2.13.tar.gz cd percona-toolkit-2.2.13 perl Makefile.PL make && make install
第三部分-使用checksum检验数据一致性
1、 主库创建如下对象
创建数据库
CREATE DATABASE IF NOT EXISTS percona
创建表 use percona Create Table: CREATE TABLE `checksums` ( `db` char(64) NOT NULL, `tbl` char(64) NOT NULL, `chunk` int(11) NOT NULL, `chunk_time` float DEFAULT NULL, `chunk_index` varchar(200) DEFAULT NULL, `lower_boundary` text, `upper_boundary` text, `this_crc` char(40) NOT NULL, `this_cnt` int(11) NOT NULL, `master_crc` char(40) DEFAULT NULL, `master_cnt` int(11) DEFAULT NULL, `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`db`,`tbl`,`chunk`), KEY `ts_db_tbl` (`ts`,`db`,`tbl`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1如果使用系统自动创建的表 mysql> alter table checksums modify ts timestamp not null default current_timestamp 如果使用已存在的数据库,则把此表创建到此库下。使用--replicate=test.checksums 进行指定即可
2、主库创建需要的用户及授权
此用户的是作为pt-table-checksum连接主备库,进行数据校验使用的,所已主备库必须存在相同的且能登录的用户
GRANT UPDATE,INSERT,DELETE,SELECT, PROCESS, SUPER, REPLICATION SLAVE ON . TO 'procheck'@'172.31.150.37' identified by 'Mysql.37';
GRANT ALL ON percona.* TO 'procheck'@'172.31.150.37'
3、执行命令进行数据校验
执行命令 pt-table-checksum -u'procheck' -p'Mysql.37' -h272.31.150.37 -P 3316 --databases=agati --ignore-tables=sys_log --nocheck-binlog-format --nocheck-plan --nocheck-replication-filters --recursion-method=processlist 其他参数及备选参数解释 --u'lxh' --p'Mysql.163' --h 192.168.XXX.XX 主库IP地址 --P 3306 主库端口 --databases=db1 校验db1库里 --tables=tb1 的tb1表,若无此参数则校验全库全表。 --no-check-binlog-format 被检查的主从binlog_format必须为statement,如果不是statement-based就要添加此参数 --nocheck-plan 检查 query的执行计划(优先选择能够对表进行chunk 分组的索引) --nocheck-replication-filters 不检查复制过滤器,建议启用。 --recursion-method="processlist" 其参数有四:processlist/hosts/dsn=DSN/no,用来决定查找slave的方式是show full processlist还是show slave hosts还是命令行直接指定还是压根就不准备找从库; 使用dns方法 配置 CREATE TABLE `dsns` ( `id` int(11) NOT NULL AUTO_INCREMENT, `parent_id` int(11) DEFAULT NULL, `dsn` varchar(255) NOT NULL, PRIMARY KEY (`id`) ); 列名的含义 parent_id:一个需要无特别意义 dsn:配置内容,h表示host指slave的ip,u表示user指创建的检查用户,p指此用户密码,P指备库端口 INSERT INTO dsns (parent_id,dsn) values(1,'h=172.31.150.36,u=procheck,p=Mysql.37,P=3316'); INSERT INTO dsns (parent_id,dsn) values(2,'h=172.29.147.32,u=procheck,p=Mysql.37,P=3376'); 使用 --recursion-method=dsn=h=172.31.150.37,D=percona,t=dsns D指:存放配置表的数据库名字 T指:存放配置的表名字 --set-varsinnodb_lock_wait_timeout=120锁的超时设定, 默认为1 --replicate=test.checksums 用来指定存放计算结果的表名,默认是percona.checksums,工具会默认自动创建库percona和表checksums并将checksum的检查结果输入到这个表中,如果自己用该参数去指定表的话,表结构必须是上面创建的表结构
4、查看校验结果哦
结果可以在执行命令后出现
也可以查询之前创建的表
检查结果各列含义TS :完成检查的时间。 ERRORS :检查时候发生错误和警告的数量。 DIFFS :0表示一致,大于0表示不一致。主要看这一列有无不一致数据。ROWS :表的行数。 CHUNKS :被划分到表中的块的数目。 SKIPPED :由于错误或警告或过大,则跳过块的数目。 TIME :执行的时间。 TABLE :被检查的表名。
第四部份-报错解决
问题(1) 01-07T15:19:02 Error checksumming table test.test1: Error executing checksum query: DBD::mysql::st execute failed: Field 'ts' doesn't have a default value [for Statement "REPLACE INTO `percona`.`checksums` (db, tbl, chunk, chunk_index, lower_boundary, upper_boundary, this_cnt, this_crc) SELECT ?, ?, ?, ?, ?, ?, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `host`, `user`, `select_priv`, `insert_priv`, `update_priv`, `delete_priv`, `create_priv`, `drop_priv`, `reload_priv`, `shutdown_priv`, `process_priv`, `file_priv`, `grant_priv`, `references_priv`, `index_priv`, `alter_priv`, `show_db_priv`, `super_priv`, `create_tmp_table_priv`, `lock_tables_priv`, `execute_priv`, `repl_slave_priv`, `repl_client_priv`, `create_view_priv`, `show_view_priv`, `create_routine_priv`, `alter_routine_priv`, `create_user_priv`, `event_priv`, `trigger_priv`, `create_tablespace_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`, `plugin`, `authentication_string`, `password_expired`, `password_last_changed` + 0, `password_lifetime`, `account_locked`, CONCAT(ISNULL(`authentication_string`), ISNULL(`password_last_changed`), ISNULL(`password_lifetime`)))) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `test`.`test1` /*checksum table*/" with ParamValues: 0='test', 1='test1', 2=1, 3=undef, 4=undef, 5=undef] at /usr/local/bin/pt-table-checksum line 10305. 解决 mysql> alter table checksums modify ts timestamp not null default current_timestamp
数据
检查
一致
参数
结果
软件
用户
主从
命令
工具
数据库
配置
相同
方法
还是
名字
含义
地址
多个
实例
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
新数据库如何研发
数据库系统工程师第3版
银川app软件开发联系方式
arcgis创建元数据库
视频软件开发的费用
个性化软件开发私人定做
新西兰软件开发
如何在本机上打开数据库
中信银行软件开发总经理
金蝶sql数据库在
高斯数据库查询结果怎么添加行号
数据库显示视图语句
如何免费建立自己的数据库
长沙纵腾网络技术有限公司
网络安全管理员的考试题库
女大学生网络安全班会总结
植物mirna预测数据库
哈利波特魔法觉醒重选服务器
奉化一站式软件开发服务
小学网络安全谈的说课稿
必火网络安全教学视频
软件开发公司重要还是程序猿
聊城数据库地址
北京联想服务器虚拟化哪家好
全球有几台母服务器
网络技术公司门头
北京市软件开发学接
网络技术管理岗位面试题
宝鸡市网络安全中心
服务器管理制度规范