程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> percona-toolkit對MySQL的復制和監控類操作教程

percona-toolkit對MySQL的復制和監控類操作教程

編輯:MySQL綜合教程

percona-toolkit對MySQL的復制和監控類操作教程。本站提示廣大學習愛好者:(percona-toolkit對MySQL的復制和監控類操作教程)文章只能為提供參考,不一定能成為您想要的結果。以下是percona-toolkit對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引擎。表構造為:

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
);

 
應用示例:
典范1:創立一個後台過程按期更新主上的test庫的heartbeat表()默許是1s,可以--interval指定,履行後會成一個heartbeat表,test庫為我監控的同步庫:

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

 
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分鐘

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

假如不加--run-time參數會一向履行。
典范2:使從落伍主1分鐘,並每隔15秒鐘檢測一次,運轉10分鐘

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 behind
2012-05-20T16:34:50 STOP SLAVE until 2012-05-20T16:35:50 at master position mysql-bin.000032/4392054
2012-05-20T16:35:05 slave stopped at master position mysql-bin.000032/4397124
2012-05-20T16:35:20 slave stopped at master position mysql-bin.000032/4402194
2012-05-20T16:35:35 slave stopped at master position mysql-bin.000032/4407264
2012-05-20T16:35:50 no new binlog events
2012-05-20T16:36:05 START SLAVE until master 2012-05-20T16:35:05 mysql-bin.000032/4397124

 
3. pt-slave-find
功效引見:
查找和打印mysql一切從辦事器復制層級關系
用法引見:
pt-slave-find [OPTION...] MASTER-HOST
道理:銜接mysql主辦事器並查找其一切的從,然後打印出一切從辦事器的層級關系。
應用示例:
典范1:查找主辦事器為192.168.3.135的mysql有一切從的層級關系:

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

4. pt-slave-restart
功效引見:
監督mysql復制毛病,並測驗考試重啟mysql復制當復制停滯的時刻
用法引見:
pt-slave-restart [OPTION...] [DSN]
監督一個或許多個mysql復制毛病,當從停滯的時刻測驗考試從新啟動復制。你可以指定跳過的毛病並運轉從到指定的日記地位。
應用示例:
典范1:監督192.168.3.92的從,跳過1個毛病

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
功效引見:
檢討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上履行便可。
經由過程 –explain參數再聯合二進制日記便可以看出劇本的任務道理,如我的test庫有一個名字為zhang的表,我們經由過程抓取二進制日記來檢查劇本的道理:

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'

從這裡可以很顯著的看出道理了,後面曾經說了,這裡就不贅述了。
應用示例:
典范1:比擬test數據庫同步能否分歧,成果顯示一切的表。

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 TABLE
05-23T16:19:29 0  1    2  1 0 0.006 test.aaa
05-23T16:19:29 0  0    1  1 0 0.017 test.bbb
05-23T16:19:29 0  0    0  1 0 0.007 test.category_part
05-23T16:19:31 0  0  233617  6 0 1.887 test.collect_data
05-23T16:19:34 0  0  250346  5 0 2.709 test.effective_user
05-23T16:19:34 0  1    1  1 0 0.008 test.heartbeat
05-23T16:19:39 0  0 1000000 11 0 5.353 test.oss_pvinfo2

從成果中,我們可以看到test.aaa和test.heartbeat表的DIFFS不為0,那末就是這兩個表分歧步了。
 
典范2:比擬test數據庫同步能否分歧,成果只顯示數據紛歧致的表(添加--replicate-check-only參數便可,這個值檢查checksums數據不會從新對表停止比擬,是以須要先運轉下面的比擬語句以後再運轉這個語句,不然顯示不了最新的變更。)。

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.localdomain
TABLE CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDARY UPPER_BOUNDARY
test.aaa 1 1 1 
test.heartbeat 1 0 1

從成果可以看出,只顯示了兩個分歧步的表。

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,不然會報錯推出。

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

監控類對象
1. pt-deadlock-logger
功效引見:
提取和記載mysql逝世鎖的相干信息
用法引見:
pt-deadlock-logger [OPTION...] SOURCE_DSN
搜集和保留mysql上比來的逝世鎖信息,可以直接打印逝世鎖信息和存儲逝世鎖信息到數據庫中,逝世鎖信息包含產生逝世鎖的辦事器、比來產生逝世鎖的時光、逝世鎖線程id、逝世鎖的事務id、產生逝世鎖時勢務履行了多長時光等等異常多的信息。概況見上面的示例。
應用示例:
典范1:打印當地mysql的逝世鎖信息

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
功效引見:
提取和記載mysql外鍵毛病信息
用法引見:
pt-fk-error-logger [OPTION...] SOURCE_DSN
經由過程SHOW INNODB STATUS提取和保留mysql數據庫比來產生的外鍵毛病信息。可以經由過程參數掌握直接打印毛病信息或許將毛病信息存儲到數據庫的表中。
應用示例:
我在辦事器上運轉的時刻一向報以下毛病:

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

我疑惑是這個法式有成績,回頭換一個版本試一下或許調試一下誰人法式。
 
3. pt-mext
功效引見:
並行檢查SHOW GLOBAL STATUS的多個樣本的信息。
用法引見:
pt-mext [OPTIONS] -- COMMAND
道理:pt-mext履行你指定的COMMAND,並每次讀取一行成果,把空行朋分的內容保留到一個一個的暫時文件中,最初聯合這些暫時文件並行檢查成果。
應用示例:
典范1:每隔10s履行一次SHOW GLOBAL STATUS,並將成果歸並到一路檢查

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

 
4. pt-query-digest
功效引見:
剖析查詢履行日記,並發生一個查詢申報,為MySQL、PostgreSQL、 memcached過濾、重放或許轉換語句。
用法引見:
pt-query-digest [OPTION...] [FILE]
解析和剖析mysql日記文件
應用示例:
典范1:剖析當地的慢查詢文件

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 [OPTION...] [FILE ...]
讀取一個慢查詢日記,並輸入統計信息。也能夠指定多個文件。假如不指定文件的話直接從尺度輸出中讀守信息。
應用示例:
典范1:讀取當地慢查詢日記並輸入統計信息

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved