暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Percona Toolkit解决MySQL主从不同步问题

Linux运维技术之路 2021-02-28
559



一、简单介绍

percona-toolkit工具中最主要的三个组件分别是:
1)pt-table-checksum 负责监测mysql主从数据一致性
2)pt-table-sync 负责当主从数据不一致时修复数据,让它们保存数据的一致性
3)pt-heartbeat 负责监控mysql主从同步延迟

二、主机关系

    主库:192.168.1.158:3306
    从库:192.168.1.159:3306
    复制


    主从关系

      root@localhost:[(none)]> show slave status\G;
      *************************** 1. row ***************************
      Slave_IO_State: Waiting for master to send event
      Master_Host: 192.168.1.158
                        Master_User: dts
                        Master_Port: 3306
      Connect_Retry: 60
      Master_Log_File: binlog.000219
      Read_Master_Log_Pos: 137487355
      Relay_Log_File: mysql-relay-bin.000058
      Relay_Log_Pos: 137487562
      Relay_Master_Log_File: binlog.000219
      Slave_IO_Running: Yes
      Slave_SQL_Running: Yes
      Replicate_Do_DB:
      Replicate_Ignore_DB:
      Replicate_Do_Table:
      Replicate_Ignore_Table:
            Replicate_Wild_Do_Table: www_test_com.%
      Replicate_Wild_Ignore_Table:
      Last_Errno: 0
      Last_Error:
      Skip_Counter: 0
      Exec_Master_Log_Pos: 137487355
      Relay_Log_Space: 137487813
      复制
      • 安装ptool工具(建议主从库都安装),此次实验只在从库安装

        yum -y install perl-Time-HiRes 
        wget http://www.percona.com/downloads/percona-toolkit/2.2.13/tarball/percona-toolkit-2.2.13.tar.gz
        tar -zxvpf percona-toolkit-2.2.13.tar.gz
        cd percona-toolkit-2.2.13
        perl Makefile.PL
        make
        make install


        或者rpm 安装
        https://downloads.percona.com/downloads/percona-toolkit/3.2.1/binary/redhat/7/x86_64/percona-toolkit-3.2.1-1.el7.x86_64.rpm
        复制


        三、授权(最好主从全部授权):

          GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE,CREATE,DELETE,INSERT,UPDATE ON *.* TO 'ptcheck'@'%' identified by '123456';
          复制


          四、创建测试数据

          • 1、主库创建表,执行sql语句

            use www_test_com
            #create table t2 (id int primary key,name varchar(100) not null,salary int);
            create table t2(id int auto_increment primary key,name varchar(20) not null,salary int);
            insert into t2 values(null,'will',100);
            insert into t2 values(null,'jim',200);
            insert into t2 values(null,'tom',300);
            insert into t2 values(null,'lili',400);
            insert into t2 values(null,'luci',500);
            复制


            • 2 从库删除t2表的记录

              01:  root@localhost:[www_test_com]> select* from t2;
              +----+------+--------+
              | id | name | salary |
              +----+------+--------+
              | 1 | will | 100 |
              | 2 | jim | 200 |
              | 3 | tom | 300 |
              | 4 | lili | 400 |
              | 5 | luci | 500 |
              +----+------+--------+
              5 rows inset (0.00 sec)


              02:  root@localhost:[(none)]> use www_test_com;
              Database changed
              02:  root@localhost:[www_test_com]> delete from t2 where id="5";
              Query OK, 1 row affected (0.00 sec)


              26:  root@localhost:[www_test_com]> select* from t2;
              +----+------+--------+
              | id | name | salary |
              +----+------+--------+
              | 1 | will | 100 |
              | 2 | jim | 200 |
              | 3 | tom | 300 |
              | 4 | lili | 400 |
              +----+------+--------+
              4 rows inset (0.00 sec)
              复制


              • 3、pt-table-checksum主从一致性检查,在从库上执行pt-table-checksum检查(主库主机ip:h=192.168.1.158,u=ptcheck)


                [root@slave ~]# pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=www_test_com.checksums --create-replicate-table --databases=www_test_com --tables=t2 h=192.168.1.158,u=ptcheck,p=123456,P=3306
                TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
                12-30T17:02:38      0      1        5       1       0   0.249 www_test_com.t2
                复制
                • pt-table-chesum 参数解释

                  常用参数解释:
                  --nocheck-replication-filters :不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。
                  --no-check-binlog-format : 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。
                  --replicate-check-only :只显示不同步的信息。
                  --replicate= :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。
                  --databases= :指定需要被检查的数据库,多个则用逗号隔开。
                  --tables= :指定需要被检查的表,多个用逗号隔开
                  h= :Master的地址
                  u= :用户名
                  p=:密码
                  P= :端口
                  复制


                  • 4、pt-table-sync 工具进行数据重新同步backup

                    pt-table-sync --replicate=www_test_com.checksums h=192.168.1.158,P=3306,u=ptcheck,p=123456 h=192.168.1.159,u=ptcheck,p=123456 --print
                    #pt-table-sync --print --replicate=www_test_com.checksums --sync-to-master h=slaveip,P=3306,u=ptcheck,p=123456
                    复制

                    4-1 打印语句信息(查看确少的语句信息)

                      [root@slave ~]# pt-table-sync --replicate=www_test_com.checksums h=192.168.1.158,P=3306,u=ptcheck,p=123456 h=192.168.1.159,P=3306,u=ptcheck,p=123456 --print
                      复制

                      4-2 执行主从同步语句

                        pt-table-sync --replicate=www_test_com.checksums h=192.168.1.158,P=3306,u=ptcheck,p=123456 h=192.168.1.159,P=3306,u=ptcheck,p=123456 --execute
                        复制
                        • pt-table-sync参数解释

                          参数解释:
                          --replicate= :指定通过pt-table-checksum得到的表,这2个工具差不多都会一直用。
                          --databases= : 指定执行同步的数据库。
                          --tables= :指定执行同步的表,多个用逗号隔开。
                          --sync-to-master :指定一个DSN,即从的IP,他会通过show processlist或show slave status 去自动的找主。
                          h= :服务器地址,命令里有2个ip,第一次出现的是Master的地址,第2次是Slave的地址。
                          u= :帐号。
                          p= :密码。
                          --print :打印,但不执行命令。
                          --execute :执行命令。
                          复制








                          爱运维^_^爱分享

                          如果觉得文章有帮助,麻烦点个关注和转发^)^ 👇


                          文章转载自Linux运维技术之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                          评论