国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

percona-toolkit對(duì)MySQL的復(fù)制和監(jiān)控類操作教程

2024-07-24 13:08:13
字體:
供稿:網(wǎng)友

這篇文章主要介紹了使用percona-toolkit對(duì)MySQL進(jìn)行復(fù)制和監(jiān)控類操作的教程,percona-toolkit是一款強(qiáng)大的MySQL輔助軟件,需要的朋友可以參考下

復(fù)制類工具 1. pt-heartbeat

功能介紹:

監(jiān)控mysql復(fù)制延遲

用法介紹:

pt-heartbeat [OPTION...] [DSN] --update|--monitor|--check|--stop

測(cè)量復(fù)制落后主mysql或者主PostgreSQL多少時(shí)間,你可以使用這個(gè)腳本去更新主或者監(jiān)控復(fù)制,具體用法見后面的示例.

原理:pt-heartbeat通過真實(shí)的復(fù)制數(shù)據(jù)來確認(rèn)mysql和postgresql復(fù)制延遲,這個(gè)避免了對(duì)復(fù)制機(jī)制的依賴,從而能得出準(zhǔn)確的落后復(fù)制時(shí)間,包含兩部分:第一部分在主上pt-heartbeat的--update線程會(huì)在指定的時(shí)間間隔更新一個(gè)時(shí)間戳,第二部分是pt-heartbeat的--monitor線程或者--check線程連接到從上檢查復(fù)制的心跳記錄(前面更新的時(shí)間戳),并和當(dāng)前系統(tǒng)時(shí)間進(jìn)行比較,得出時(shí)間的差異。

你可以手工創(chuàng)建heartbeat表或者添加--create-table參數(shù),推薦使用MEMORY引擎。表結(jié)構(gòu)為:

 

 
  1. CREATE TABLE heartbeat ( 
  2. ts varchar(26) NOT NULL, 
  3. server_id int unsigned NOT NULL PRIMARY KEY, 
  4. file varchar(255) DEFAULT NULL, -- SHOW MASTER STATUS 
  5. position bigint unsigned DEFAULT NULL, -- SHOW MASTER STATUS 
  6. relay_master_log_file varchar(255) DEFAULT NULL, -- SHOW SLAVE STATUS 
  7. exec_master_log_pos bigint unsigned DEFAULT NULL -- SHOW SLAVE STATUS 
  8. ); 

使用示例:

范例1:創(chuàng)建一個(gè)后臺(tái)進(jìn)程定期更新主上的test庫(kù)的heartbeat表()默認(rèn)是1s,可以--interval指定,執(zhí)行后會(huì)成一個(gè)heartbeat表,test庫(kù)為我監(jiān)控的同步庫(kù):

 

 
  1. pt-heartbeat -D test --update --user=root --password=zhang@123 -h192.168.3.135 --create-table –daemonize 

范例2:監(jiān)控復(fù)制在slave上的落后程度(會(huì)一直監(jiān)控):

 

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

監(jiān)控結(jié)果如下:

 

  1. 0.00s [ 0.00s, 0.00s, 0.00s ] 
  2. 0.00s [ 0.00s, 0.00s, 0.00s ] 
  3. 0.00s [ 0.00s, 0.00s, 0.00s ] 
  4. 0.00s [ 0.00s, 0.00s, 0.00s ] 
  5. 0.00s [ 0.00s, 0.00s, 0.00s ] 
  6. 0.00s [ 0.00s, 0.00s, 0.00s ] 

范例3:監(jiān)控復(fù)制在slave上的落后程度(監(jiān)控一次退出):

 

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

范例4:監(jiān)控PostgreSQL需要添加--dbi-driver Pg:

 

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

2. pt-slave-delay

功能介紹:

設(shè)置從服務(wù)器落后于主服務(wù)器指定時(shí)間。

用法介紹:

pt-slave-delay [OPTION...] SLAVE-HOST [MASTER-HOST]

原理:通過啟動(dòng)和停止復(fù)制sql線程來設(shè)置從落后于主指定時(shí)間。默認(rèn)是基于從上relay日志的二進(jìn)制日志的位置來判斷,因此不需要連接到主服務(wù)器,如果IO進(jìn)程不落后主服務(wù)器太多的話,這個(gè)檢查方式工作很好,如果網(wǎng)絡(luò)通暢的話,一般IO線程落后主通常都是毫秒級(jí)別。一般是通過--delay and --delay"+"--interval來控制。--interval是指定檢查是否啟動(dòng)或者停止從上sql線程的頻繁度,默認(rèn)的是1分鐘檢查一次。

使用示例:

范例1:使從落后主1分鐘,并每隔1分鐘檢測(cè)一次,運(yùn)行10分鐘

 

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

如果不加--run-time參數(shù)會(huì)一直執(zhí)行。

范例2:使從落后主1分鐘,并每隔15秒鐘檢測(cè)一次,運(yùn)行10分鐘

 

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

運(yùn)行結(jié)果如下:

 

 
  1. 2012-05-20T16:34:50 slave running 0 seconds behind 
  2. 2012-05-20T16:34:50 STOP SLAVE until 2012-05-20T16:35:50 at master position mysql-bin.000032/4392054 
  3. 2012-05-20T16:35:05 slave stopped at master position mysql-bin.000032/4397124 
  4. 2012-05-20T16:35:20 slave stopped at master position mysql-bin.000032/4402194 
  5. 2012-05-20T16:35:35 slave stopped at master position mysql-bin.000032/4407264 
  6. 2012-05-20T16:35:50 no new binlog events 
  7. 2012-05-20T16:36:05 START SLAVE until master 2012-05-20T16:35:05 mysql-bin.000032/4397124 

3. pt-slave-find

功能介紹:

查找和打印mysql所有從服務(wù)器復(fù)制層級(jí)關(guān)系

用法介紹:

pt-slave-find [OPTION...] MASTER-HOST

原理:連接mysql主服務(wù)器并查找其所有的從,然后打印出所有從服務(wù)器的層級(jí)關(guān)系。

使用示例:

范例1:查找主服務(wù)器為192.168.3.135的mysql有所有從的層級(jí)關(guān)系:

 

 
  1. pt-slave-find --user=root --password=zhang@123 --host=192.168.3.135 

4. pt-slave-restart

功能介紹:

監(jiān)視mysql復(fù)制錯(cuò)誤,并嘗試重啟mysql復(fù)制當(dāng)復(fù)制停止的時(shí)候

用法介紹:

pt-slave-restart [OPTION...] [DSN]

監(jiān)視一個(gè)或者多個(gè)mysql復(fù)制錯(cuò)誤,當(dāng)從停止的時(shí)候嘗試重新啟動(dòng)復(fù)制。你可以指定跳過的錯(cuò)誤并運(yùn)行從到指定的日志位置。

使用示例:

范例1:監(jiān)視192.168.3.92的從,跳過1個(gè)錯(cuò)誤

 

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

范例2:監(jiān)視192.168.3.92的從,跳過錯(cuò)誤代碼為1062的錯(cuò)誤。

 

 
  1. pt-slave-restart --user=root --password=zhang@123 --host=192.168.3.92 --error-numbers=1062 

5. pt-table-checksum

功能介紹:

檢查mysql復(fù)制一致性

用法介紹:

pt-table-checksum [OPTION...] [DSN]

工作原理:pt-table-checksum在主上執(zhí)行檢查語句在線檢查mysql復(fù)制的一致性,生成replace語句,然后通過復(fù)制傳遞到從,再通過update更新master_src的值。通過檢測(cè)從上this_src和master_src的值從而判斷復(fù)制是否一致。

注意:使用的時(shí)候選擇業(yè)務(wù)地峰的時(shí)候運(yùn)行,因?yàn)檫\(yùn)行的時(shí)候會(huì)造成表的部分記錄鎖定。使用--max-load來指定最大的負(fù)載情況,如果達(dá)到那個(gè)負(fù)載這個(gè)暫停運(yùn)行。如果發(fā)現(xiàn)有不一致的數(shù)據(jù),可以使用pt-table-sync工具來修復(fù)。

注意:和1.0版本不同,新版本的pt-table-checksum只需要在master上執(zhí)行即可。

通過 –explain參數(shù)再結(jié)合二進(jìn)制日志就可以看出腳本的工作原理,如我的test庫(kù)有一個(gè)名字為zhang的表,我們通過抓取二進(jìn)制日志來查看腳本的原理:

 

 
  1. 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*/
  2. UPDATE `test`.`checksums` SET chunk_time = '0.000563', master_crc = '31012777', master_cnt = '4' WHERE db = 'test' AND tbl = 'zhang' AND chunk = '1' 

從這里可以很明顯的看出原理了,前面已經(jīng)說了,這里就不贅述了。

使用示例:

范例1:比較test數(shù)據(jù)庫(kù)同步是否一致,結(jié)果顯示所有的表。

 

 
  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 

參數(shù)說明:第一次運(yùn)行的時(shí)候需要添加--create-replicate-table參數(shù),如果不加這個(gè)就需要手工運(yùn)行添加表結(jié)構(gòu)的SQL,表結(jié)構(gòu)SQL如下:

 

 
  1. CREATE TABLE checksums ( 
  2. db char(64) NOT NULL, 
  3. tbl char(64) NOT NULL, 
  4. chunk int NOT NULL, 
  5. chunk_time float NULL, 
  6. chunk_index varchar(200) NULL, 
  7. lower_boundary text NULL, 
  8. upper_boundary text NULL, 
  9. this_crc char(40) NOT NULL, 
  10. this_cnt int NOT NULL, 
  11. master_crc char(40) NULL, 
  12. master_cnt int NULL, 
  13. ts timestamp NOT NULL, 
  14. PRIMARY KEY (db, tbl, chunk), 
  15. INDEX ts_db_tbl (ts, db, tbl) 
  16. ) ENGINE=InnoDB; 

之所以使用--nocheck-replication-filters參數(shù)是因?yàn)槲业膍y.cnf配置了replicate-ignore-db和replicate-wild-do-table等參數(shù)。另外需要特別注意執(zhí)行的checksums所在的數(shù)據(jù)庫(kù)必須是同步的數(shù)據(jù)庫(kù)。我剛開始使用的時(shí)候摸索的很久,官網(wǎng)也沒有范例。呵呵!

結(jié)果如下:

 

 
  1. TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE 
  2. 05-23T16:19:29 0 1 2 1 0 0.006 test.aaa 
  3. 05-23T16:19:29 0 0 1 1 0 0.017 test.bbb 
  4. 05-23T16:19:29 0 0 0 1 0 0.007 test.category_part 
  5. 05-23T16:19:31 0 0 233617 6 0 1.887 test.collect_data 
  6. 05-23T16:19:34 0 0 250346 5 0 2.709 test.effective_user 
  7. 05-23T16:19:34 0 1 1 1 0 0.008 test.heartbeat 
  8. 05-23T16:19:39 0 0 1000000 11 0 5.353 test.oss_pvinfo2 

從結(jié)果中,我們可以看到test.aaa和test.heartbeat表的DIFFS不為0,那么就是這兩個(gè)表不同步了。

范例2:比較test數(shù)據(jù)庫(kù)同步是否一致,結(jié)果只顯示數(shù)據(jù)不一致的表(添加--replicate-check-only參數(shù)即可,這個(gè)值查看checksums數(shù)據(jù)不會(huì)重新對(duì)表進(jìn)行比較,因此需要先運(yùn)行上面的比較語句之后再運(yùn)行這個(gè)語句,否則顯示不了最新的變化。)。

 

 
  1. 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 

結(jié)果如下:

 

 
  1. Differences on localhost.localdomain 
  2. TABLE CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDARY UPPER_BOUNDARY 
  3. test.aaa 1 1 1  
  4. test.heartbeat 1 0 1 

從結(jié)果可以看出,只顯示了兩個(gè)不同步的表。

6. pt-table-sync

功能介紹:

高效同步mysql表的數(shù)據(jù)

用法介紹:

pt-table-sync [OPTION...] DSN [DSN...]

原理:總是在主上執(zhí)行數(shù)據(jù)的更改,再同步到從上,不會(huì)直接更改成從的數(shù)據(jù),在主上執(zhí)行更改是基于主上現(xiàn)在的數(shù)據(jù),不會(huì)更改主上的數(shù)據(jù)。注意使用之前先備份你的數(shù)據(jù),避免造成數(shù)據(jù)的丟失.執(zhí)行execute之前最好先換成--print或--dry-run查看一下會(huì)變更哪些數(shù)據(jù)。

使用示例:

范例1:同步3.135的test庫(kù)的aaa表到192.168.3.92,在執(zhí)行之前可以用--execute參數(shù)換成--print來查看會(huì)變更什么東西,后面那個(gè)主機(jī)必須是master,否則會(huì)報(bào)錯(cuò)推出。

 

 
  1. 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數(shù)據(jù)庫(kù)同步到192.168.3.92,使從上具有一樣的數(shù)據(jù)。

 

 
  1. pt-table-sync --execute --sync-to-master --user=root --password=zhang@123 h=192.168.3.92 --database test 

范例3:只同步指定的表

 

  1. pt-table-sync --execute --sync-to-master --user=root --password=zhang@123 h=192.168.3.92,D=test,t=aaa 

范例4:根據(jù)pt-table-checksum的結(jié)果進(jìn)行數(shù)據(jù)同步

 

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

范例5:根據(jù)pt-table-checksum使從的數(shù)據(jù)和主的數(shù)據(jù)一致

 

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

監(jiān)控類工具 1. pt-deadlock-logger

功能介紹:

提取和記錄mysql死鎖的相關(guān)信息

用法介紹:

pt-deadlock-logger [OPTION...] SOURCE_DSN

收集和保存mysql上最近的死鎖信息,可以直接打印死鎖信息和存儲(chǔ)死鎖信息到數(shù)據(jù)庫(kù)中,死鎖信息包括發(fā)生死鎖的服務(wù)器、最近發(fā)生死鎖的時(shí)間、死鎖線程id、死鎖的事務(wù)id、發(fā)生死鎖時(shí)事務(wù)執(zhí)行了多長(zhǎng)時(shí)間等等非常多的信息。詳情見下面的示例。

使用示例:

范例1:打印本地mysql的死鎖信息

 

 
  1. pt-deadlock-logger --user=root --password=zhang@123 h=localhost –print 

范例2:將本地的mysql死鎖信息記錄到數(shù)據(jù)庫(kù)的表中,也打印出來

 

 
  1. pt-deadlock-logger --user=root --password=zhang@123 h=localhost --print D=test,t=deadlocks 

2. pt-fk-error-logger

功能介紹:

提取和記錄mysql外鍵錯(cuò)誤信息

用法介紹:

pt-fk-error-logger [OPTION...] SOURCE_DSN

通過SHOW INNODB STATUS提取和保存mysql數(shù)據(jù)庫(kù)最近發(fā)生的外鍵錯(cuò)誤信息。可以通過參數(shù)控制直接打印錯(cuò)誤信息或者將錯(cuò)誤信息存儲(chǔ)到數(shù)據(jù)庫(kù)的表中。

使用示例:

我在服務(wù)器上運(yùn)行的時(shí)候一直報(bào)如下錯(cuò)誤:

 

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

我懷疑是這個(gè)程序有問題,回頭換一個(gè)版本試一下或者調(diào)試一下那個(gè)程序。

3. pt-mext

功能介紹:

并行查看SHOW GLOBAL STATUS的多個(gè)樣本的信息。

用法介紹:

pt-mext [OPTIONS] -- COMMAND

原理:pt-mext執(zhí)行你指定的COMMAND,并每次讀取一行結(jié)果,把空行分割的內(nèi)容保存到一個(gè)一個(gè)的臨時(shí)文件中,最后結(jié)合這些臨時(shí)文件并行查看結(jié)果。

使用示例:

范例1:每隔10s執(zhí)行一次SHOW GLOBAL STATUS,并將結(jié)果合并到一起查看

 

 
  1. pt-mext -- mysqladmin ext -uroot -pzhang@123 -i10 -c3 

4. pt-query-digest

功能介紹:

分析查詢執(zhí)行日志,并產(chǎn)生一個(gè)查詢報(bào)告,為MySQL、PostgreSQL、 memcached過濾、重放或者轉(zhuǎn)換語句。

用法介紹:

pt-query-digest [OPTION...] [FILE]

解析和分析mysql日志文件

使用示例:

范例1:分析本地的慢查詢文件

 

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

范例2:重新回顧滿查詢?nèi)罩荆⒔Y(jié)果保存到query_review中,注意query_review表的表結(jié)構(gòu)必須先建好,表結(jié)構(gòu)如下:

 

 
  1. CREATE TABLE query_review ( 
  2. checksum BIGINT UNSIGNED NOT NULL PRIMARY KEY, 
  3. fingerprint TEXT NOT NULL, 
  4. sample TEXT NOT NULL, 
  5. first_seen DATETIME, 
  6. last_seen DATETIME, 
  7. reviewed_by VARCHAR(20), 
  8. reviewed_on DATETIME, 
  9. comments TEXT 
  10. ); 

命令如下:

 

 
  1. pt-query-digest --user=root --password=zhang@123 --review h=localhost,D=test,t=query_review /data/dbdata/localhost-slow.log 

5. pt-trend

功能介紹:

居于一組時(shí)間序列的數(shù)據(jù)點(diǎn)做統(tǒng)計(jì)。

用法介紹:

pt-trend [OPTION...] [FILE ...]

讀取一個(gè)慢查詢?nèi)罩荆⑤敵鼋y(tǒng)計(jì)信息。也可以指定多個(gè)文件。如果不指定文件的話直接從標(biāo)準(zhǔn)輸入中讀取信息。

使用示例:

范例1:讀取本地慢查詢?nèi)罩静⑤敵鼋y(tǒng)計(jì)信息

 

 
  1. pt-trend /data/dbdata/localhost-slow.log 


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到MYSQL教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 百色市| 嘉义县| 大英县| 页游| 富民县| 石楼县| 漳浦县| 泗水县| 天台县| 泰顺县| 苏尼特右旗| 抚宁县| 甘孜县| 荣成市| 拉萨市| 安福县| 绵阳市| 绍兴市| 临清市| 木里| 利川市| 右玉县| 宜阳县| 开阳县| 邢台市| 南皮县| 永新县| 京山县| 武隆县| 板桥市| 二手房| 富阳市| 南靖县| 安义县| 上饶市| 泽库县| 淮阳县| 荃湾区| 兴国县| 茌平县| 合川市|