percona-toolkit之pt-table-checksum

  

第一部分,简介
pt-table-checksum通过SQL在主库执行数据块的校验,再将相同的语句传送到从库,并在从库上计算数据块的校验,最后将主从库相同块的校验值进行对比,辨别主从数据是否不一致。

  
 <代码> pt-table-sync用来修复主从复制数据的不一致,使得它们修复到最终一致,也可以实现多个实例或者是应用双写或多写的多个不相关的数据库实例修复到一致。同时它还内部集成了pt-table-checksum的校验功能,可以一边校验一边修复,也可以基于pt-table-checksum的计算结果来进行修复。 
  

第二部分——工具的安装

  
 <代码>方法1转安装
  1 .软件下载:
  [root@MySQL-01 ~] http://www.percona.com/downloads/percona # wget - toolkit/latest/rpm/percona工具包2.2.7 noarch.rpm——1.
  2 .安装该工具依赖的软件包:
  (root@MySQL-01 ~) # yum安装perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes - y
  3 .软件安装:
  (root@MySQL-01 ~) # rpm -ivh percona 2.2.7 - 1. noarch.rpm——工具包
  准备……# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # (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安装perl perl-devel perl-Time-HiRes perl dbi perl-DBD-MySQL
  3、软件安装
  焦油zxvf percona-toolkit-2.2.13.tar.gz
  cd percona-toolkit-2.2.13
  perl makefile . pl
  使,,使安装 
  

第三部分,使用校验和检验数据一致性

  

1,主库创建如下对象
创建数据库
创建数据库如果不存在percona

  
 <代码>创建表
  使用percona
  创建表:创建表“校验和”(
  “分贝”char(64)非空,
  “台”char(64)非空,
  “块”int(11)不是零,
  浮动chunk_time默认为空,
  “chunk_index”varchar(200)默认为空,
  “lower_boundary”文本,
  “upper_boundary”文本,
  this_crc char(40)非空,
  this_cnt int(11)非空,
  “master_crc”char(40)默认为空,
  “master_cnt”int(11)默认为空,
  ts的时间戳NOT NULL默认CURRENT_TIMESTAMP其参数有四:processlist/主机/dsn=dsn/不,用来决定查找奴隶的方式是显示完整processlist还是显示奴隶主人还是命令行直接指定还是压根就不准备找从库;
  
  使用dns方法
  配置
  创建表的dsn (“id”int (11) NOT NULL AUTO_INCREMENT parent_id的int(11)默认为空,“dsn”varchar(255)不是NULL,主键(id));
  列名的含义
  parent_id:一个需要无特别意义
  dsn:配置内容,h表示主机指奴隶的ip,你表示用户指创建的检查用户,p指此用户密码,p指备库端口
  
  插入dsn (parent_id dsn)值(1,”h=172.31.150.36 u=procheck, p=Mysql.37, p=3316 ');
  插入dsn (parent_id dsn)值(2,' h=172.29.147.32 u=procheck, p=Mysql.37, p=3376 ');
  使用
  ——recursion-method=dsn=h=172.31.150.37 D=percona t=dsn
  D指:存放配置表的数据库名字
  T指:存放配置的表名字
  
  ——set-varsinnodb_lock_wait_timeout=120锁的超时设定,默认为1
  ——复制=测试。校验和用来指定存放计算结果的表名,默认是percona.checksums,工具会默认自动创建库percona和表校验和并将校验和的检查结果输入到这个表中,如果自己用该参数去指定表的话,表结构必须是上面创建的表结构 
  

4,查看校验结果哦
结果可以在执行命令后出现
也可以查询之前创建的表

  
 <代码>检查结果各列含义
  TS:完成检查的时间。
  错误:检查时候发生错误和警告的数量。
  差别:0表示一致,大于0表示不一致。主要看这一列有无不一致数据。
  行:表的行数。
  块:被划分到表中的块的数目。
  跳过:由于错误或警告或过大,则跳过块的数目。
  时间:执行的时间。
  表:被检查的表名。 
  

第四部份,报错解决

  
 <代码>问题(1)
  01-07T15:19:02错误校验和检查表test.test1:
  错误执行校验和查询:DBD:: mysql::圣执行失败:字段' ts '没有一个默认值
  (声明”替换成“percona”。“校验和”(db、资源描述、块、chunk_index lower_boundary, upper_boundary, this_cnt, this_crc)
  选择?,?,?,?,?,?,COUNT(*)问,合并(低(CONV (BIT_XOR (CAST (CRC32 (CONCAT_WS(‘#’,‘主人’,‘用户’,‘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’,“插件”,“authentication_string”、“password_expired”,
  password_last_changed + 0,‘password_lifetime’,‘account_locked’, CONCAT (ISNULL (“authentication_string”),
  ISNULL (“password_last_changed”), ISNULL (password_lifetime))))为无符号),10,crc 16)), 0)
  从“测试”。test1/*校验和表*/盤aramValues: 0='测试',1=test1, 2=1, 3=undef, 4=undef, 5=undef]
  在/usr/local/bin/pt-table-checksum第10305行。
  
  解决
  mysql>alter table校验和ts修改时间戳not null默认current_timestamp 

percona-toolkit之pt-table-checksum