Mysql入门percona-toolkit对MySQL的复制和监控类 *** 作教程

Mysql入门percona-toolkit对MySQL的复制和监控类 *** 作教程,第1张

概述介绍《Mysql入门percona-toolkit对MySQL的复制监控类 *** 作教程》开发教程,希望对您有用。

《MysqL入门percona-toolkit对MysqL的复制和监控类 *** 作教程》要点:
本文介绍了MysqL入门percona-toolkit对MysqL的复制和监控类 *** 作教程,希望对您有用。如果有疑问,可以联系我们。

MysqL入门复制类工具
1.  pt-heartbeat
功能介绍:
监控MysqL复制延迟
用法介绍:
pt-heartbeat [OPTION...] [DSN] --update|--monitor|--check|--stop
测量复制落后主MysqL或者主Postgresql多少时间,你可以使用这个脚本去更新主或者监控复制,具体用法见后面的示例.
原理:pt-heartbeat通过真实的复制数据来确认MysqL和postgresql复制延迟,这个避免了对复制机制的依赖,从而能得出准确的落后复制时间,包含两部分:第一部分在主上pt-heartbeat的--update线程会在指定的时间间隔更新一个时间戳,第二部分是pt-heartbeat的--monitor线程或者--check线程连接到从上检查复制的心跳记录(前面更新的时间戳),并和当前系统时间进行比较,得出时间的差异.
你可以手工创建heartbeat表或者添加--create-table参数,推荐使用MEMORY引擎.表结构为:

MysqL入门CREATE table heartbeat ( ts       varchar(26) NOT NulL,server_ID    int unsigned NOT NulL PRIMARY KEY,file       varchar(255) DEFAulT NulL,-- SHOW MASTER STATUS position     bigint unsigned DEFAulT NulL,-- SHOW MASTER STATUS relay_master_log_file varchar(255) DEFAulT NulL,-- SHOW SLAVE STATUS exec_master_log_pos bigint unsigned DEFAulT NulL -- SHOW SLAVE STATUS);

MysqL入门 
使用示例:
范例1:创建一个后台进程定期更新主上的test库的heartbeat表()默认是1s,可以--interval指定,执行后会成一个heartbeat表,test库为我监控的同步库:

MysqL入门pt-heartbeat -D test --update --user=root --password=zhang@123 -h192.168.3.135 --create-table cdaemonize

MysqL入门范例2:监控复制在slave上的落后程度(会一直监控):

MysqL入门pt-heartbeat -D test --monitor --user=root --password=zhang@123 -h192.168.3.92

MysqL入门监控结果如下:

MysqL入门0.00s [ 0.00s,0.00s,0.00s ]0.00s [ 0.00s,0.00s ]

MysqL入门范例3:监控复制在slave上的落后程度(监控一次退出):

MysqL入门pt-heartbeat -D test --check --user=root --password=zhang@123 -h192.168.3.92

MysqL入门范例4:监控Postgresql需要添加--dbi-driver Pg:

MysqL入门pt-heartbeat -D test --check --user=root --password=zhang@123 -h192.168.3.92 --dbi-driver Pg

MysqL入门 
2. pt-slave-delay
功能介绍:
设置从服务器落后于主服务器指定时间.
用法介绍:
pt-slave-delay [OPTION...] SLAVE-HOST [MASTER-HOST]
原理:通过启动和停止复制sql线程来设置从落后于主指定时间.默认是基于从上relay日志的二进制日志的位置来判断,因此不需要连接到主服务器,如果IO进程不落后主服务器太多的话,这个检查方式工作很好,如果网络通畅的话,一般IO线程落后主通常都是毫秒级别.一般是通过--delay and --delay"+"--interval来控制.--interval是指定检查是否启动或者停止从上sql线程的频繁度,默认的是1分钟检查一次.
使用示例:
范例1:使从落后主1分钟,并每隔1分钟检测一次,运行10分钟

MysqL入门pt-slave-delay --user=root --password=zhang@123 --delay 1m --run-time 10m --host=192.168.3.92

MysqL入门如果不加--run-time参数会一直执行.
范例2:使从落后主1分钟,并每隔15秒钟检测一次,运行10分钟

MysqL入门pt-slave-delay --user=root --password=zhang@123 --delay 1m --interval 15s --run-time 10m --host=192.168.3.92

MysqL入门运行结果如下:

MysqL入门2012-05-20T16:34:50 slave running 0 seconds behind2012-05-20T16:34:50 Stop SLAVE until 2012-05-20T16:35:50 at master position MysqL-bin.000032/43920542012-05-20T16:35:05 slave stopped at master position MysqL-bin.000032/43971242012-05-20T16:35:20 slave stopped at master position MysqL-bin.000032/44021942012-05-20T16:35:35 slave stopped at master position MysqL-bin.000032/44072642012-05-20T16:35:50 no new binlog events2012-05-20T16:36:05 START SLAVE until master 2012-05-20T16:35:05 MysqL-bin.000032/4397124

MysqL入门 
3. pt-slave-find
功能介绍:
查找和打印MysqL所有从服务器复制层级关系
用法介绍:
pt-slave-find [OPTION...] MASTER-HOST
原理:连接MysqL主服务器并查找其所有的从,然后打印出所有从服务器的层级关系.
使用示例:
范例1:查找主服务器为192.168.3.135的MysqL有所有从的层级关系:

MysqL入门pt-slave-find --user=root --password=zhang@123 --host=192.168.3.135

MysqL入门4. pt-slave-restart
功能介绍:
监视MysqL复制错误,并尝试重启MysqL复制当复制停止的时候
用法介绍:
pt-slave-restart [OPTION...] [DSN]
监视一个或者多个MysqL复制错误,当从停止的时候尝试重新启动复制.你可以指定跳过的错误并运行从到指定的日志位置.
使用示例:
范例1:监视192.168.3.92的从,跳过1个错误

MysqL入门pt-slave-restart --user=root --password=zhang@123 --host=192.168.3.92 --skip-count=1

MysqL入门         范例2:监视192.168.3.92的从,跳过错误代码为1062的错误.

MysqL入门pt-slave-restart --user=root --password=zhang@123 --host=192.168.3.92 --error-numbers=1062

MysqL入门5. pt-table-checksum
功能介绍:
检查MysqL复制一致性
用法介绍:
pt-table-checksum [OPTION...] [DSN]
工作原理:pt-table-checksum在主上执行检查语句在线检查MysqL复制的一致性,生成replace语句,然后通过复制传递到从,再通过update更新master_src的值.通过检测从上this_src和master_src的值从而判断复制是否一致.
注意:使用的时候选择业务地峰的时候运行,因为运行的时候会造成表的部分记录锁定.使用--max-load来指定最大的负载情况,如果达到那个负载这个暂停运行.如果发现有不一致的数据,可以使用pt-table-sync工具来修复.
注意:和1.0版本不同,新版本的pt-table-checksum只需要在master上执行即可.
通过 Cexplain参数再结合二进制日志就可以看出脚本的工作原理,如我的test库有一个名字为zhang的表,我们通过抓取二进制日志来查看脚本的原理:

MysqL入门REPLACE INTO `test`.`checksums` (db,tbl,chunk,chunk_index,lower_boundary,upper_boundary,this_cnt,this_crc) SELECT 'test','zhang','1',NulL,COUNT(*) AS cnt,COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#',`ID`,`name`,CONCAT(ISNulL(`name`)))) AS UNSIGNED)),10,16)),0) AS crc FROM `test`.`zhang` /*checksum table*/;UPDATE `test`.`checksums` SET chunk_time = '0.000563',master_crc = '31012777',master_cnt = '4' WHERE db = 'test' AND tbl = 'zhang' AND chunk = '1'

MysqL入门从这里可以很明显的看出原理了,前面已经说了,这里就不赘述了.
使用示例:
范例1:比较test数据库同步是否一致,结果显示所有的表.

MysqL入门pt-table-checksum --nocheck-replication-filters --databases=test --replicate=test.checksums --create-replicate-table --host=192.168.3.135 --port 3306 -uroot -pzhang@123

MysqL入门参数说明:第一次运行的时候需要添加--create-replicate-table参数,如果不加这个就需要手工运行添加表结构的sql,表结构sql如下:

MysqL入门CREATE table checksums (  db       char(64)   NOT NulL,tbl      char(64)   NOT NulL,chunk     int     NOT NulL,chunk_time   float      NulL,chunk_index  varchar(200)   NulL,lower_boundary text       NulL,upper_boundary text       NulL,this_crc    char(40)   NOT NulL,this_cnt    int     NOT NulL,master_crc   char(40)     NulL,master_cnt   int       NulL,ts       timestamp  NOT NulL,PRIMARY KEY (db,chunk),INDEX ts_db_tbl (ts,db,tbl)) ENGINE=InnoDB;

MysqL入门之所以使用--nocheck-replication-filters参数是因为我的my.cnf配置了replicate-ignore-db和replicate-wild-do-table等参数.另外需要特别注意执行的checksums所在的数据库必须是同步的数据库.我刚开始使用的时候摸索的很久,官网也没有范例.呵呵!
结果如下:

MysqL入门TS     ERRORS DIFFS ROWS CHUNKS SKIPPED TIME table05-23T16:19:29 0  1    2  1 0 0.006 test.aaa05-23T16:19:29 0  0    1  1 0 0.017 test.bbb05-23T16:19:29 0  0    0  1 0 0.007 test.category_part05-23T16:19:31 0  0  233617  6 0 1.887 test.collect_data05-23T16:19:34 0  0  250346  5 0 2.709 test.effective_user05-23T16:19:34 0  1    1  1 0 0.008 test.heartbeat05-23T16:19:39 0  0 1000000 11 0 5.353 test.oss_pvinfo2

MysqL入门从结果中,我们可以看到test.aaa和test.heartbeat表的DIFFS不为0,那么就是这两个表不同步了.
 
范例2:比较test数据库同步是否一致,结果只显示数据不一致的表(添加--replicate-check-only参数即可,这个值查看checksums数据不会重新对表进行比较,因此需要先运行上面的比较语句之后再运行这个语句,否则显示不了最新的变化.).

MysqL入门pt-table-checksum --nocheck-replication-filters --databases=test --replicate=test.checksums --replicate-check-only --lock-wait-timeout=120 --host=192.168.3.135 --port 3306 --user=root --password=zhang@123

MysqL入门结果如下:

MysqL入门Differences on localhost.localdomaintable CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDARY UPPER_BOUNDARYtest.aaa 1 1 1 test.heartbeat 1 0 1

MysqL入门从结果可以看出,只显示了两个不同步的表.

MysqL入门6. pt-table-sync
功能介绍:
高效同步MysqL表的数据
用法介绍:
pt-table-sync [OPTION...] DSN [DSN...]
原理:总是在主上执行数据的更改,再同步到从上,不会直接更改成从的数据,在主上执行更改是基于主上现在的数据,不会更改主上的数据.注意使用之前先备份你的数据,避免造成数据的丢失.执行execute之前最好先换成--print或--dry-run查看一下会变更哪些数据.
使用示例:
范例1:同步3.135的test库的aaa表到192.168.3.92,在执行之前可以用--execute参数换成--print来查看会变更什么东西,后面那个主机必须是master,否则会报错推出.

MysqL入门pt-table-sync --execute --user=root --password=zhang@123 h=192.168.3.135,D=test,t=aaa h=192.168.3.92

MysqL入门范例2:将主的test数据库同步到192.168.3.92,使从上具有一样的数据.

MysqL入门pt-table-sync --execute --sync-to-master --user=root --password=zhang@123 h=192.168.3.92 --database test

MysqL入门范例3:只同步指定的表

MysqL入门pt-table-sync --execute --sync-to-master --user=root --password=zhang@123 h=192.168.3.92,t=aaa

MysqL入门范例4:根据pt-table-checksum的结果进行数据同步

MysqL入门pt-table-sync --execute --replicate test.checksums --user=root --password=zhang@123 h=192.168.3.135 

MysqL入门范例5:根据pt-table-checksum使从的数据和主的数据一致

MysqL入门pt-table-sync --execute --replicate test.checksums --user=root --password=zhang@123 --sync-to-master h=192.168.3.92,t=aaa

MysqL入门监控类工具
1. pt-deadlock-logger
功能介绍:
提取和记录MysqL死锁的相关信息
用法介绍:
pt-deadlock-logger [OPTION...] SOURCE_DSN
收集和保存MysqL上最近的死锁信息,可以直接打印死锁信息和存储死锁信息到数据库中,死锁信息包括发生死锁的服务器、最近发生死锁的时间、死锁线程ID、死锁的事务ID、发生死锁时事务执行了多长时间等等非常多的信息.详情见下面的示例.
使用示例:
范例1:打印本地MysqL的死锁信息

MysqL入门pt-deadlock-logger --user=root --password=zhang@123 h=localhost Cprint

MysqL入门范例2:将本地的MysqL死锁信息记录到数据库的表中,也打印出来

MysqL入门pt-deadlock-logger --user=root --password=zhang@123 h=localhost --print D=test,t=deadlocks

MysqL入门2. pt-fk-error-logger
功能介绍:
提取和记录MysqL外键错误信息
用法介绍:
pt-fk-error-logger [OPTION...] SOURCE_DSN
通过SHOW INNODB STATUS提取和保存MysqL数据库最近发生的外键错误信息.可以通过参数控制直接打印错误信息或者将错误信息存储到数据库的表中.
使用示例:
我在服务器上运行的时候一直报如下错误:

MysqL入门Use of uninitialized value in concatenation (.) or string at /usr/bin/pt-fk-error-logger line 2045

MysqL入门我怀疑是这个程序有问题,回头换一个版本试一下或者调试一下那个程序.
 
3. pt-mext
功能介绍:
并行查看SHOW GLOBAL STATUS的多个样本的信息.
用法介绍:
pt-mext [OPTIONS] -- COMMAND
原理:pt-mext执行你指定的COMMAND,并每次读取一行结果,把空行分割的内容保存到一个一个的临时文件中,最后结合这些临时文件并行查看结果.
使用示例:
范例1:每隔10s执行一次SHOW GLOBAL STATUS,并将结果合并到一起查看

MysqL入门pt-mext -- MysqLadmin ext -uroot -pzhang@123 -i10 -c3

MysqL入门 
4. pt-query-digest
功能介绍:
分析查询执行日志,并产生一个查询报告,为MysqL、Postgresql、 memcached过滤、重放或者转换语句.
用法介绍:
pt-query-digest [OPTION...] [file]
解析和分析MysqL日志文件
使用示例:
范例1:分析本地的慢查询文件

MysqL入门pt-query-digest --user=root --password=zhang@123 /data/dbdata/localhost-slow.log

MysqL入门范例2:重新回顾满查询日志,并将结果保存到query_revIEw中,注意query_revIEw表的表结构必须先建好,表结构如下:

MysqL入门CREATE table query_revIEw (  checksum   BIGINT UNSIGNED NOT NulL PRIMARY KEY,fingerprint TEXT NOT NulL,sample    TEXT NOT NulL,first_seen  DATETIME,last_seen  DATETIME,revIEwed_by VARCHAR(20),revIEwed_on DATETIME,comments   TEXT);

MysqL入门命令如下:

MysqL入门pt-query-digest --user=root --password=zhang@123 --revIEw h=localhost,t=query_revIEw /data/dbdata/localhost-slow.log

MysqL入门5. pt-trend
功能介绍:
居于一组时间序列的数据点做统计.
用法介绍:
pt-trend [OPTION...] [file ...]
读取一个慢查询日志,并输出统计信息.也可以指定多个文件.如果不指定文件的话直接从标准输入中读取信息.
使用示例:
范例1:读取本地慢查询日志并输出统计信息

MysqL入门pt-trend /data/dbdata/localhost-slow.log

欢迎参与《MysqL入门percona-toolkit对MysqL的复制和监控类 *** 作教程》讨论,分享您的想法,内存溢出PHP学院为您提供专业教程。

总结

以上是内存溢出为你收集整理的Mysql入门percona-toolkit对MySQL的复制和监控类 *** 作教程全部内容,希望文章能够帮你解决Mysql入门percona-toolkit对MySQL的复制和监控类 *** 作教程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1157076.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存