網(wǎng)上有很多關(guān)于pos機常用查詢工具, 數(shù)據(jù)校驗工具pt的知識,也有很多人為大家解答關(guān)于pos機常用查詢工具的問題,今天pos機之家(www.rcqwhg.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
pos機常用查詢工具
作者:耿進
愛可生 DBA 團隊成員,負責(zé)公司 DMP 產(chǎn)品的運維和客戶 mysql 問題的處理。對數(shù)據(jù)庫技術(shù)有著濃厚的興趣。你見過凌晨四點 MySQL 的 error 嗎?
本文來源:原創(chuàng)投稿
*愛可生開源社區(qū)出品,原創(chuàng)內(nèi)容未經(jīng)授權(quán)不得隨意使用,轉(zhuǎn)載請聯(lián)系小編并注明來源。
參考文檔:https://www.percona.com/doc/percona-toolkit/LATEST/pt-table-checksum.html
1. 概述pt-table-checksum 是 Percona-Toolkit 的組件之一,用于檢測 MySQL 主、從庫的數(shù)據(jù)是否一致。其原理是在主庫執(zhí)行基于 statement 的 SQL 語句來生成主庫數(shù)據(jù)塊的checksum,把相同的 SQL 語句傳遞到從庫執(zhí)行,并在從庫上計算相同數(shù)據(jù)塊的 checksum,最后,比較主從庫上相同數(shù)據(jù)塊的 checksum 值,由此判斷主從數(shù)據(jù)是否一致。它能在非常大的表上工作的一個原因是,它把每個表分成行塊,并檢查每個塊與單個替換。選擇查詢。它改變塊的大小,使校驗和查詢在所需的時間內(nèi)運行。分塊表的目的是確保校驗和不受干擾,并且不會在服務(wù)器上造成太多復(fù)制延遲或負載,而不是使用單個大查詢處理每個表。這就是為什么默認情況下每個塊的目標時間是 0.5 秒。
2. 場景pt-table-checksum 默認情況下可以應(yīng)對絕對部分場景,官方說,即使上千個庫、上萬億的行,它依然可以很好的工作,這源自于設(shè)計很簡單,一次檢查?個表,不需要太多的內(nèi)存和多余的操作;必要時,pt-table-checksum 會根據(jù)服務(wù)器負載動態(tài)改變 chunk 大小,減少從庫的延遲。
為了減少對數(shù)據(jù)庫的干預(yù),pt-table-checksum 還會?動偵測并連接到從庫,當然如果失敗,可以指定 --recursion-method 選項來告訴從庫在哪里。它的易用性還體現(xiàn)在,復(fù)制若有延遲,在從庫 checksum 會暫停直到趕上主庫的計算時間點(也通過選項 -- 設(shè)定一個可容忍的延遲最大值,超過這個值也認為不一致)。
3. 保障措施pt-table-checksum 有許多其他的安全措施,以確保它不會?擾任何服務(wù)器的操作,包括副本。為了做到這?點,pt-table-checksum 檢測副本并?動連接到它們。(如果失敗,可以使?遞歸?法選項給它?個提示。)
該工具持續(xù)監(jiān)控副本。如果任何副本在復(fù)制過程中遠遠落后,pt 表校驗和會暫停以使其趕上來。如果任何副本有錯誤,或者復(fù)制停止,pt-table 校驗和將暫停并等待。此外,pt-table-checksum 查找問題的常見原因,比如復(fù)制過濾器,并且拒絕操作,除?您強迫它這樣做。復(fù)制篩選器是危險的,因為 pt-table-checksum 執(zhí)行的查詢可能與它們發(fā)生沖突,并導(dǎo)致復(fù)制失敗。
pt-table 校驗和驗證塊是否太大而不能安全校驗和。它對每個塊執(zhí)行解釋查詢,并跳過可能大于所需行數(shù)的塊。您可以使用 --chunk-size-limit 選項配置此保護措施的敏感性。如果一個表因為行數(shù)少而要在單個塊中對其進行校驗,那么 pt-table-checksum 將額外驗證該表在副本上是否過大。這避免了以下場景:表在主服務(wù)器上是空的,但在副本上非常大,并且在一個大型查詢中進行檢查,這會導(dǎo)致復(fù)制過程中出現(xiàn)非常長的延遲。
還有?些其他的保障措施。例如,pt-table-checksum 將它的會話級 innodb_lock_wait_timeout 設(shè)置為 1 秒,這樣,如果存在鎖等待,它將成為受害者,而不是導(dǎo)致其他查詢超時。另一個安全措施檢查數(shù)據(jù)庫服務(wù)器上的負載,如果負載過高則暫停。對于如何做到這一點,沒有一個正確的答案,但是默認情況下,如果有超過 25 個并發(fā)執(zhí)行的查詢,pt-table-checksum 將暫停。您可能應(yīng)該使用 --max-load 選項為服務(wù)器設(shè)置一個合理的值。
校驗和通常是一個低優(yōu)先級的任務(wù),應(yīng)該讓位給服務(wù)器上的其他?作。然而,一個必須經(jīng)常重啟的共工具是很難使用的。因此,pt 表校驗和對錯誤具有很強的彈性。例如,如果數(shù)據(jù)庫管理員出于任何原因需要殺死 pt-table-checksum 的查詢,這就不是一個致命錯誤。?戶經(jīng)常運行 pt-kill 來終止任何長時間運行的校驗和查詢。該工具將重試一次已殺死的查詢,如果再次失敗,它將移動到該表的下一個塊。如果存在鎖等待超時,則應(yīng)用相同的行為。如果發(fā)生這樣的錯誤,工具將打印一個警告,但每個表只打印一次。如果到任何服務(wù)器的連接失敗,pt-table-checksum 將嘗試重新連接并繼續(xù)?作。
4. 操作步驟1. 創(chuàng)建主從架構(gòu)
安裝 mysql(略)
# 創(chuàng)建復(fù)制?戶(?便切換,從庫也創(chuàng)建)master82 >GRANT REPLICATION SLAVE ON *.* TO repl@'10.186.63.%' IDENTIFIED BY '123';Query OK, 0 rows affected, 1 warning (0.01 sec)# 建?復(fù)制slave83 >change master tomaster_host='10.186.63.82',master_port=4380,master_user='repl',master_password='123',MASTER_AUTO_POSITION=1;Query OK, 0 rows affected, 2 warnings (0.01 sec)slave83 >start slave;Query OK, 0 rows affected (0.04 sec)slave83 >show slave status\\G*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 10.186.63.82 Master_User: repl Master_Port: 4380 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 220764474 Relay_Log_File: mysql-relay.000002 Relay_Log_Pos: 24944 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: Yes
2. 造數(shù)據(jù)
使用 sysbench 造表,并且會同步至從庫。
[root@node01 ~]# sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=10.186.63.82 \\--mysql-port=4380 --mysql-user=gengjin --mysql-password=123 --mysql-db=test \\--table-size=1000000 --tables=10 --threads=50 --report-interval=3 --time=20 preparesysbench 1.0.17 (using system LuaJIT 2.0.4)Initializing worker threads...Creating table 'sbtest3'...Creating table 'sbtest6'...Creating table 'sbtest5'...Creating table 'sbtest8'...Creating table 'sbtest1'...Creating table 'sbtest9'...Creating table 'sbtest7'...Creating table 'sbtest4'...Creating table 'sbtest2'...Creating table 'sbtest10'...Inserting 1000000 records into 'sbtest1'Inserting 1000000 records into 'sbtest8'Inserting 1000000 records into 'sbtest9'Inserting 1000000 records into 'sbtest6'Inserting 1000000 records into 'sbtest7'Inserting 1000000 records into 'sbtest5'Inserting 1000000 records into 'sbtest4'Inserting 1000000 records into 'sbtest3'Inserting 1000000 records into 'sbtest2'Inserting 1000000 records into 'sbtest10'master82 >use test;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmaster82 >show tables;+----------------+| Tables_in_test |+----------------+| sbtest1 || sbtest10 || sbtest2 || sbtest3 || sbtest4 || sbtest5 || sbtest6 || sbtest7 || sbtest8 || sbtest9 |+----------------+10 rows in set (0.00 sec)master82 >slave83 >use test;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedslave83 >show tables;+----------------+| Tables_in_test |+----------------+| sbtest1 || sbtest10 || sbtest2 || sbtest3 || sbtest4 || sbtest5 || sbtest6 || sbtest7 || sbtest8 || sbtest9 |+----------------+10 rows in set (0.00 sec)slave83 >
3. 校驗
3.1 下載安裝 pt 工具
#下載wget https://www.percona.com/downloads/percona-toolkit/3.1.0/binary/tarball/percona-toolkit-3.1.0_x86_64.tar.gzyum -y install perl-devel perl-Digest-MD5 perl-DBI perl-DBD-MySQL perl-IO-Socket-SSL.noarch perl-Time-HiRescd percona-toolkit-3.1.0/perl Makefile.PL PREFIX=/usr/local/makemake install
3.2 參數(shù)
--replicate-check:執(zhí)行完 checksum 查詢在 percona.checksums 表中,不?定?上查看結(jié)果呀 —— yes 則馬上比較 chunk 的 crc32 值并輸出 DIFFS 列,否則不輸出。默認 yes,如果指定為 --noreplicate-check,一般后續(xù)使用下面的 --replicate-check-only 去輸出 DIFF 結(jié)果。
--replicate-check-only:不在主從庫做 checksum 查詢,只在原有 percona.checksums 表中查詢結(jié)果,并輸出數(shù)據(jù)不?致的信息。周期性的檢測?致性時可能?到。
--nocheck-binlog-format:不檢測日志格式。這個選項對于 ROW 模式的復(fù)制很重要,因為 pt-table-checksum 會在 Master 和 Slave 上設(shè)置 binlog_format=STATEMENT(確保從庫也會執(zhí)行 checksum SQL),MySQL 限制從庫是無法設(shè)置的,所以假如行復(fù)制從庫,再作為主庫復(fù)制出新從庫時(A->B->C),B 的 checksums 數(shù)據(jù)將無法傳輸。
--replicate= 指定 checksum 計算結(jié)果存到哪個庫表?,如果沒有指定,默認是 percona.checksums 。
3.3 執(zhí)行校驗
1)場景 1
標準端口 檢查某庫下某表 ?主?從 從庫 binlog 不是 ROW 格式[root@node01 percona-toolkit-3.1.0]# pt-table-checksum h=10.186.63.82,u=gengjin,p='123',P=3306 -- databases=test --tables=sbtest1,sbtest2 --nocheck-replication-filtersChecking if all tables can be checksummed ...Starting checksum ... TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE12-21T09:42:57 0 0 1000000 0 8 0 3.859 test.sbtest112-21T09:43:02 0 0 1000000 0 6 0 5.122 test.sbtest2...#會?動創(chuàng)建校驗庫表master82 >show tables;+-------------------+| Tables_in_percona |+-------------------+| checksums |+-------------------+mysql> select * from checksums -> ;+------+---------+-------+------------+-------------+----------------+----------------+----------+----------+------------+------------+---------------------+| db | tbl | chunk | chunk_time | chunk_index | lower_boundary | upper_boundary | this_crc | this_cnt| master_crc | master_cnt | ts |+------+---------+-------+------------+-------------+----------------+----------------+----------+----------+------------+------------+---------------------+| test | sbtest1 | 1 | 0.004363 | PRIMARY | 1 | 1000 | 949e9d20 | 1000| 949e9d20 | 1000 | 2020-12-22 03:26:13 || test | sbtest1 | 2 | 0.282387 | PRIMARY | 1001 | 115598 | daeb5f19 | 114598| daeb5f19 | 114598 | 2020-12-22 03:26:13 || test | sbtest1 | 3 | 0.382239 | PRIMARY | 115599 | 317495 | d748771b | 201897| d748771b | 201897 | 2020-12-22 03:26:14 || test | sbtest1 | 4 | 0.462463 | PRIMARY | 317496 | 559251 | 2b9cc322 | 241756| 2b9cc322 | 241756 | 2020-12-22 03:26:14 || test | sbtest1 | 5 | 0.43845 | PRIMARY | 559252 | 810981 | 1bef4fe1 | 251730| 1bef4fe1 | 251730 | 2020-12-22 03:26:15 || test | sbtest1 | 6 | 0.337617 | PRIMARY | 810982 | 1000000 | 6daaef2b | 189019| 6daaef2b | 189019 | 2020-12-22 03:26:15 || test | sbtest1 | 7 | 0.002212 | PRIMARY | NULL | 1 | 0 | 0| 0 | 0 | 2020-12-22 03:26:15 || test | sbtest1 | 8 | 0.011642 | PRIMARY | 1000000 | NULL | 0 | 0| 0 | 0 | 2020-12-22 03:26:15 || test | sbtest2 | 1 | 0.447947 | PRIMARY | 1 | 262120 | d454c57a | 262120| d454c57a | 262120 | 2020-12-22 03:26:18 || test | sbtest2 | 2 | 0.507594 | PRIMARY | 262121 | 554699 | 221a4326 | 292579| 221a4326 | 292579 | 2020-12-22 03:26:19 || test | sbtest2 | 3 | 0.497652 | PRIMARY | 554700 | 844644 | b47933a4 | 289945| b47933a4 | 289945 | 2020-12-22 03:26:20 || test | sbtest2 | 4 | 0.286117 | PRIMARY | 844645 | 1000000 | 7246a964 | 155356| 7246a964 | 155356 | 2020-12-22 03:26:20 || test | sbtest2 | 5 | 0.002235 | PRIMARY | NULL | 1 | 0 | 0| 0 | 0 | 2020-12-22 03:26:20 || test | sbtest2 | 6 | 0.002173 | PRIMARY | 1000000 | NULL | 0 | 0| 0 | 0 | 2020-12-22 03:26:20 |+------+---------+-------+------------+-------------+----------------+----------------+----------+----------+------------+------------+---------------------+14 rows in set (0.01 sec)mysql>
2)場景 2(dsn)
非標準端口(主從端口不?致) 一主多從 全實例校驗# 創(chuàng)建校驗庫表master82 >CREATE DATABASE IF NOT EXISTS percona; Query OK, 1 row affected (0.00 sec)master82 >CREATE TABLE IF NOT EXISTS percona.checksums ( db CHAR(64) NOT NULL, tbl CHAR(64) NOT NULL, chunkINT NOT NULL, chunk_time FLOAT NULL, chunk_index VARCHAR(200) NULL, lower_boundary TEXT NULL, upper_boundaryTEXT 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 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (db,tbl,chunk),INDEX ts_db_tbl(ts,db,tbl) ) ENGINE=InnoDB; Query OK, 0 rows affected (0.06 sec)# 創(chuàng)建dsn表master82 >CREATE DATABASE IF NOT EXISTS percona; Query OK, 1 row affected, 1 warning (0.00 sec)master82 >CREATE TABLE percona.dsns ( id int(11) NOT NULL AUTO_INCREMENT, parent_id int(11) DEFAULT NULL,dsn varchar(255) NOT NULL, PRIMARY KEY (id) );Query OK, 0 rows affected (0.01 sec)master82 >show tables;+-------------------+| Tables_in_percona |+-------------------+| checksums || dsns |+-------------------+2 rows in set (0.00 sec)# 添加從庫信息master82 >insert into percona.dsns(dsn) values('h=10.186.63.83,P=4380,u=gengjin,p=123');Query OK, 1 row affected (0.00 sec)master82 ># 校驗root@node01 percona-toolkit-3.1.0]# pt-table-checksum --replicate=percona.checksums --nocheck-replicationfilters --no-check-binlog-format --max-load Threads_connected=600 h=10.186.63.82,u=gengjin,p='123',P=4380 --recursion-method dsn=h=10.186.63.83,u=gengjin,p='123',P=4380,D=percona,t=dsns --function MD5Checking if all tables can be checksummed ...Starting checksum ...# A software update is available: TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE12-21T09:03:19 0 0 0 0 1 0 0.358 mysql.columns_priv12-21T09:03:19 0 0 10 0 1 0 0.497 mysql.db12-21T09:03:20 0 0 2 0 1 0 0.497 mysql.engine_cost12-21T09:03:20 0 0 0 0 1 0 0.497 mysql.event12-21T09:03:21 0 0 0 0 1 0 0.497 mysql.func12-21T09:03:21 0 0 41 0 1 0 0.498 mysql.help_category12-21T09:03:22 0 0 699 0 1 0 0.497 mysql.help_keyword12-21T09:03:22 0 0 1413 0 1 0 0.497 mysql.help_relation12-21T09:03:23 0 0 643 0 1 0 0.497 mysql.help_topic12-21T09:03:23 0 0 0 0 1 0 0.498 mysql.ndb_binlog_index12-21T09:03:24 0 0 0 0 1 0 0.498 mysql.plugin12-21T09:03:24 0 0 48 0 1 0 0.494 mysql.proc12-21T09:03:25 0 0 0 0 1 0 0.501 mysql.procs_priv12-21T09:03:25 0 0 2 0 1 0 0.492 mysql.proxies_priv12-21T09:03:26 0 0 6 0 1 0 0.498 mysql.server_cost12-21T09:03:26 0 0 0 0 1 0 0.498 mysql.servers12-21T09:03:27 0 0 2 0 1 0 0.497 mysql.tables_priv12-21T09:03:27 0 0 0 0 1 0 0.498 mysql.time_zone12-21T09:03:28 0 0 0 0 1 0 0.496 mysql.time_zone_leap_second12-21T09:03:28 0 0 0 0 1 0 0.497 mysql.time_zone_name12-21T09:03:29 0 0 0 0 1 0 0.499 mysql.time_zone_transition12-21T09:03:30 0 0 0 0 1 0 0.510 mysql.time_zone_transition_type12-21T09:03:30 0 1 8 0 1 0 0.481 mysql.user12-21T09:03:30 0 0 1 0 1 0 0.485 percona.dsns12-21T09:03:31 0 0 6 0 1 0 0.485 sys.sys_config12-21T09:03:42 0 0 1000000 0 11 0 11.002 test.sbtest112-21T09:03:53 0 0 1000000 0 10 0 10.662 test.sbtest1012-21T09:04:02 0 0 1000000 0 9 0 9.797 test.sbtest212-21T09:04:14 0 0 1000000 0 10 0 11.497 test.sbtest312-21T09:04:24 0 0 1000000 0 10 0 10.495 test.sbtest412-21T09:04:33 0 0 1000000 0 9 0 8.996 test.sbtest512-21T09:04:42 0 0 1000000 0 9 0 8.198 test.sbtest612-21T09:04:51 0 0 1000000 0 9 0 9.302 test.sbtest712-21T09:05:00 0 0 1000000 0 9 0 9.141 test.sbtest812-21T09:05:08 0 0 1000000 0 9 0 8.345 test.sbtest912-21T09:05:09 0 0 1 0 1 0 0.490 universe.u_delay查看checksums表數(shù)據(jù)(略)
以上就是關(guān)于pos機常用查詢工具, 數(shù)據(jù)校驗工具pt的知識,后面我們會繼續(xù)為大家整理關(guān)于pos機常用查詢工具的知識,希望能夠幫助到大家!