percona
复制类工具 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引擎。表结构为: 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); pt-heartbeat -D test --update --user=root --password=zhang@123 -h192.168.3.135 --create-table –daemonize 范例2:监控复制在slave上的落后程度(会一直监控): pt-heartbeat -D test --monitor --user=root --password=zhang@123 -h192.168.3.92 监控结果如下: 0.00s [ 0.00s, 0.00s, 0.00s ]0.00s [ 0.00s, 0.00s, 0.00s ]0.00s [ 0.00s, 0.00s, 0.00s ]0.00s [ 0.00s, 0.00s, 0.00s ]0.00s [ 0.00s, 0.00s, 0.00s ]0.00s [ 0.00s, 0.00s, 0.00s ] 范例3:监控复制在slave上的落后程度(监控一次退出): pt-heartbeat -D test --check --user=root --password=zhang@123 -h192.168.3.92 范例4:监控PostgreSQL需要添加--dbi-driver Pg: pt-heartbeat -D test --check --user=root --password=zhang@123 -h192.168.3.92 --dbi-driver Pg pt-slave-delay --user=root --password=zhang@123 --delay 1m --run-time 10m --host=192.168.3.92 如果不加--run-time参数会一直执行。 pt-slave-delay --user=root --password=zhang@123 --delay 1m --interval 15s --run-time 10m --host=192.168.3.92 运行结果如下: 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 pt-slave-find --user=root --password=zhang@123 --host=192.168.3.135 4. pt-slave-restart pt-slave-restart --user=root --password=zhang@123 --host=192.168.3.92 --skip-count=1 范例2:监视192.168.3.92的从,跳过错误代码为1062的错误。 pt-slave-restart --user=root --password=zhang@123 --host=192.168.3.92 --error-numbers=1062 5. pt-table-checksum REPLACE INTO `test`.`checksums` (db, tbl, chunk, chunk_index, lower_boundary, upper_boundary, this_cnt, this_crc) SELECT 'test', 'zhang', '1', NULL, NULL, 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' 从这里可以很明显的看出原理了,前面已经说了,这里就不赘述了。 pt-table-checksum --nocheck-replication-filters --databases=test --replicate=test.checksums --create-replicate-table --host=192.168.3.135 --port 3306 -uroot -pzhang@123 参数说明:第一次运行的时候需要添加--create-replicate-table参数,如果不加这个就需要手工运行添加表结构的SQL,表结构SQL如下: 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, tbl, chunk), INDEX ts_db_tbl (ts, db, tbl)) ENGINE=InnoDB; 之所以使用--nocheck-replication-filters参数是因为我的my.cnf配置了replicate-ignore-db和replicate-wild-do-table等参数。另外需要特别注意执行的checksums所在的数据库必须是同步的数据库。我刚开始使用的时候摸索的很久,官网也没有范例。呵呵! 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 从结果中,我们可以看到test.aaa和test.heartbeat表的DIFFS不为0,那么就是这两个表不同步了。 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 结果如下: Differences on localhost.localdomainTABLE CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDARY UPPER_BOUNDARYtest.aaa 1 1 1 test.heartbeat 1 0 1 从结果可以看出,只显示了两个不同步的表。 6. pt-table-sync pt-table-sync --execute --user=root --password=zhang@123 h=192.168.3.135,D=test,t=aaa h=192.168.3.92 范例2:将主的test数据库同步到192.168.3.92,使从上具有一样的数据。 pt-table-sync --execute --sync-to-master --user=root --password=zhang@123 h=192.168.3.92 --database test 范例3:只同步指定的表 pt-table-sync --execute --sync-to-master --user=root --password=zhang@123 h=192.168.3.92,D=test,t=aaa 范例4:根据pt-table-checksum的结果进行数据同步 pt-table-sync --execute --replicate test.checksums --user=root --password=zhang@123 h=192.168.3.135 范例5:根据pt-table-checksum使从的数据和主的数据一致 pt-table-sync --execute --replicate test.checksums --user=root --password=zhang@123 --sync-to-master h=192.168.3.92,D=test,t=aaa 监控类工具 pt-deadlock-logger --user=root --password=zhang@123 h=localhost –print 范例2:将本地的mysql死锁信息记录到数据库的表中,也打印出来 pt-deadlock-logger --user=root --password=zhang@123 h=localhost --print D=test,t=deadlocks 2. pt-fk-error-logger Use of uninitialized value in concatenation (.) or string at /usr/bin/pt-fk-error-logger line 2045 我怀疑是这个程序有问题,回头换一个版本试一下或者调试一下那个程序。 pt-mext -- mysqladmin ext -uroot -pzhang@123 -i10 -c3 pt-query-digest --user=root --password=zhang@123 /data/dbdata/localhost-slow.log 范例2:重新回顾满查询日志,并将结果保存到query_review中,注意query_review表的表结构必须先建好,表结构如下: 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); 命令如下: pt-query-digest --user=root --password=zhang@123 --review h=localhost,D=test,t=query_review /data/dbdata/localhost-slow.log 5. pt-trend pt-trend /data/dbdata/localhost-slow.log |