1.基于MySQL主从环境

可以参考https://www.cnblogs.com/xianglei_/p/12068241.html

上传rpm包 并安装

1
2
cd /usr/local/src
yum -y install percona-toolkit-3.1.0-2.el7.x86_64.rpm 

在一个sbtest(前提石存在)的数据库中创建一个表叫heartbeat的表

1
pt-heartbeat -S /var/lib/mysql/mysql.sock --database sbtest --update --create-table --daemonize   

下载压测工具

1
2
yum -y install epel*
yum -y kainstall sysbench   

开始实行压测对sbtest数据库  实验

1
2
3
4
5
6
7
8
9
10
11
12
13
sysbench /usr/share/sysbench/oltp_read_write.lua \
>  --mysql-host='192.168.18.140' \    //主的数据库的IP地址
>  --mysql-user=sbtest \   //用户
>  --mysql-password=123456 \  //用户密码
>  --mysql-port=3306 \   //主数据库的端口
>  --db-driver=mysql \    //数据库的类型
>  --mysql-db=sbtest \    //要进行压测的数据库
>  --tables=10 \      //要创建10张表
>  --table-size=500000 \   //每一张数据表中的插入50万条数据
>  --report-interval=10 \   //报告间隔
>  --threads=128 \     //开启128个线程
>  --time=120 \     //执行两分钟
>  prepare   //开始压测测试  

开始真的压测

1
2
3
4
5
6
7
8
9
10
11
12
13
sysbench /usr/share/sysbench/oltp_read_write.lua \
>  --mysql-host='192.168.18.140' \    //主的数据库的IP地址
>  --mysql-user=sbtest \   //用户
>  --mysql-password=123456 \  //用户密码
>  --mysql-port=3306 \   //主数据库的端口
>  --db-driver=mysql \    //数据库的类型
>  --mysql-db=sbtest \    //要进行压测的数据库
>  --tables=10 \      //要创建10张表
>  --table-size=500000 \   //每一张数据表中的插入50万条数据
>  --report-interval=10 \   //报告间隔
>  --threads=128 \     //开启128个线程
>  --time=120 \     //执行两分钟
>  run   //开始压测实战  

在开始真的压测的时候 在从的的虚拟纪上执行下一条命令要和主的数据库的虚拟机同时执行

1
pt-heartbeat -S /var/lib/mysql/mysql.sock --master-server-id=1 --monitor --database sbtest  

将产生的垃圾数据回收

1
2
3
4
5
6
7
8
9
10
11
12
13
sysbench /usr/share/sysbench/oltp_read_write.lua \
>  --mysql-host='192.168.18.140' \    //主的数据库的IP地址
>  --mysql-user=sbtest \   //用户
>  --mysql-password=123456 \  //用户密码
>  --mysql-port=3306 \   //主数据库的端口
>  --db-driver=mysql \    //数据库的类型
>  --mysql-db=sbtest \    //要进行压测的数据库
>  --tables=10 \      //要创建10张表
>  --table-size=500000 \   //每一张数据表中的插入50万条数据
>  --report-interval=10 \   //报告间隔
>  --threads=128 \     //开启128个线程
>  --time=120 \     //执行两分钟
>  cleanup   //回收垃圾信息 

 刚刚我们是在后台运行

1
2
ps aux | grep perl
pt-heartbeat /usr/bin/pt-heartbeat -S /var/lib/mysql/mysql.sock --database sbtest --update --create-table --stop  //关掉进程

 在主的数据库中的test数据库创建一个名叫z1的表

1
2
use test;
 create table z1 ( id int not null, name varchar(32), primary key(id));

 在从的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use test;
MariaDB [test]> select * from z1;
Empty set (0.00 sec)
 
MariaDB [test]> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)
 
MariaDB [test]> set global read_only=off;
Query OK, 0 rows affected (0.01 sec)
 
MariaDB [test]> insert into z1(id,name) values(3,"python");
Query OK, 1 row affected (0.00 sec)
 
MariaDB [test]> select * from z1;
+----+--------+
id | name   |
+----+--------+
|  3 | python |
+----+--------+
1 row in set (0.00 sec)

 回到主上 插入数据

1
2
insert into z1(id,name) values(2,"mysql");
insert into z1(id,name) values(3,"python");

  回到从上 查看slave的状态 会有错误

  

1
2
3
4
5
6
7
8
9
10
show slave status \G;
有一个类似这样的错误
 Last_Errno: 1062
 Last_Error: Error 'Duplicate entry '3' for key 'PRIMARY'' on query. Default database: 'test'. Query: 'insert into z1(id,name) values(3,"python")'
 
 
在执行一条命令
pt-slave-restart --error-numbers=1062  //跳过错误
 
再去查看一下slave的状态  就可以看到双yes

  

检测主从数据一致性的命令

在主的数据库上

1
2
3
4
5
6
7
pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=test.checksums --create-replicate-table --databases=test --tables=z1 h=192.168.18.140,u=sbtest,p=123456,P=3306
 
//执行效果  说的是检测到一条没有同步
Checking if all tables can be checksummed ...
Starting checksum ...
            TS ERRORS  DIFFS     ROWS  DIFF_ROWS  CHUNKS SKIPPED    TIME TABLE
12-17T11:47:14      0      0        2          0       1       0   0.011 test.z1  

修复主从不同步

1
2
3
pt-table-sync --replicate=test.checksums h=172.18.47.110,u=huazai007,p=123456,P=3306 h=172.18.47.112,u=huazai007,p=123456,P=3306 --print  只是打印
 
pt-table-sync --replicate=test.checksums h=172.18.47.110,u=huazai007,p=123456,P=3306 h=172.18.47.112,u=huazai007,p=123456,P=3306 --execute  //校验

  

PERCONA-TOOLKIT 安装 使用的更多相关文章

  1. Percona Toolkit安装、使用

    percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: l  检查master和slave数据的一致性 l  有效地对记 ...

  2. Centos 安装Percona Toolkit工具集

    1.下载 下载地址:   https://www.percona.com/downloads/percona-toolkit/LATEST/ [root@bogon ~]# wget https:// ...

  3. Percona Toolkit mysql辅助利器

    1 PT介绍 Percona Toolkit简称pt工具—PT-Tools,是Percona公司开发用于管理MySQL的工具,功能包括检查主从复制的数据一致性.检查重复索引.定位IO占用高的表文件.在 ...

  4. Percona Toolkit工具集介绍

    部署mysql工具是一个非常重要的部分,所以工具的可靠性和很好的设计非常重要.percona toolkit是一个有30多个mysql工具的工具箱.兼容mysql,percona server,mar ...

  5. Percona Toolkit工具连接MySQL 8报错的解决方案

    使用Percona Toolkit的工具连接MySQL 8.x数据库时,会遇到类似"failed: Plugin caching_sha2_password could not be loa ...

  6. Percona Toolkit工具使用

    Percona Toolkit简称pt工具-PT-Tools,是Percona公司开发用于管理MySQL的工具,功能包括检查主从复制的数据一致性.检查重复索引.定位IO占用高的表文件.在线DDL等 下 ...

  7. RDS for MySQL 如何使用 Percona Toolkit

    Percona Toolkit 包含多种用于 MySQL 数据库管理的工具. 下面介绍常用的 pt-online-schema-change  和  pt-archiver 搭配 RDS MySQL ...

  8. Want to archive tables? Use Percona Toolkit’s pt-archiver--转载

    原文地址:https://www.percona.com/blog/2013/08/12/want-to-archive-tables-use-pt-archiver/ Percona Toolkit ...

  9. Percona Toolkit 使用

    安装 percona-toolkit perl Makefile.PL make make test make install 默认安装到 /usr/local/bin 目录下 可能需要 DBI-1. ...

  10. 使用Percona Toolkit解决Mysql主从不同步问题【备忘】

    由于各种原因,mysql主从架构经常会出现数据不一致的情况出现,大致归结为如下几类 1:备库写数据 2:执行non-deterministic query 3:回滚掺杂事务表和非事务表的事务 4:bi ...

随机推荐

  1. 前端有用JavaScript技巧

    数组去重 //法1 var arr = [1, 2, 3, 3, 4]; console.log(...new Set(arr)) // [1, 2, 3, 4] //法2 function SetA ...

  2. vue实现v-model父子组件间的双向通信

    首先讲清楚有个缺点:父页面若同时使用多个子组件,永远只会只能实现第一个双向驱动,我是新手,还在研究.如果有高手请指教,感谢! 子组件 <script> export default { m ...

  3. java支持断点续传文件上传和下载组件

    java两台服务器之间,大文件上传(续传),采用了Socket通信机制以及JavaIO流两个技术点,具体思路如下: 实现思路: 1.服:利用ServerSocket搭建服务器,开启相应端口,进行长连接 ...

  4. 2018 计蒜之道-初赛 第一场 A-百度无人车

    百度一共制造了 nn 辆无人车,其中第 ii 辆车的重量为 a_i\ \mathrm{kg}ai​ kg. 由于车辆过重会增大轮胎的磨损程度,现在要给这 nn 辆车减轻重量.每将一辆车减轻 1\ \m ...

  5. (Java多线程系列三)线程间通讯

    Java多线程间通讯 多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同. 1.使用wait()和notify()方法在线程中通讯 需求:第一个线程写入(input)用户,另一个线程 ...

  6. Python字典里的5个黑魔法

    Python里面有3大数据结构:列表,字典和集合.字典是常用的数据结构,里面有一些重要的技巧用法,我把这些都整理到一起,熟练掌握这些技巧之后,对自己的功力大有帮助. 1.字典的排序: 用万金油sort ...

  7. Topcoder SRM 674 Div.2题解

    T1 解题思路 这题应该不是很难,主要是题意理解问题. 注意给出的两个数组里映射关系已经对应好了,只要判断是否为双射即可 参考程序 #include <bits/stdc++.h> usi ...

  8. Linux如何永久打开端口

    由于防火墙导致同局域网无法通过IP访问,Linux有多种防火墙,需要查看当前使用的防火墙(开机自启),再进行配置  以下是 iptables 和 firewall 防火墙的相关配置,切忌将自己配置的防 ...

  9. eclipse中把选中的代码全部变成大写或者小写的快捷键

    Ctrl+shift+x是把选中的变成大写 Ctrl+shift+y是把选中的变成小写

  10. Override和Overload的含义与区别

    overload是重载,重载是一种参数多态机制,即代码通过参数的类型或个数不同而实现的多态机制. 是一种静态的绑定机制(在编译时已经知道具体执行的是哪个代码段).  override是重写,重写是一种 ...