percona-toolkit之pt-table-checksum
发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,第一部分-简介pt-table-checksum通过SQL在主库执行数据块的校验,再将相同的语句传送到从库,并在从库上计算数据块的校验,最后将主从库相同块的校验值进行对比,辨别主从数据是否不一致。pt
千家信息网最后更新 2024年11月27日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安全错误
数据库的锁怎样保障安全
6录播系统服务器
福州福昕网络技术有限公司
武汉网络安全基地管理
中兴软件开发二面面经英语
云燕网络技术有限公司
ctf网络安全大赛新手
网络安全漏洞有几个级别
下载数据库地址
电脑和服务器如何共享文件
服务器电源和普通电源兼容吗
网络安全是不是和黑客有关
服务器如何新建域
软件开发范围太大了
盈实互联网和盈实科技
二维码数据库怎么解决
软件开发做的了软件测试吗
交易所软件开发怎么收费
服务器挂载镜像方法
河北银行软件开发公司有哪些
四川大学网络安全技术网课
软件开发中的编码怎么用
武汉升腾服务器批发
苏州大数据软件开发
2019互联网金融科技公司
八艾云服务器可以连接宝塔吗
网络安全 胡道元 答案
网络技术讲解老师
数据库制作个人信息表单
专题数据库
虚无世界2服务器