pos機(jī)常用查詢(xún)工具, 數(shù)據(jù)校驗(yàn)工具pt

 新聞資訊2  |   2023-05-25 12:28  |  投稿人:pos機(jī)之家

網(wǎng)上有很多關(guān)于pos機(jī)常用查詢(xún)工具, 數(shù)據(jù)校驗(yàn)工具pt的知識(shí),也有很多人為大家解答關(guān)于pos機(jī)常用查詢(xún)工具的問(wèn)題,今天pos機(jī)之家(m.dsth100338.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來(lái)看下吧!

本文目錄一覽:

1、pos機(jī)常用查詢(xún)工具

pos機(jī)常用查詢(xún)工具

作者:耿進(jìn)

愛(ài)可生 DBA 團(tuán)隊(duì)成員,負(fù)責(zé)公司 DMP 產(chǎn)品的運(yùn)維和客戶 mysql 問(wèn)題的處理。對(duì)數(shù)據(jù)庫(kù)技術(shù)有著濃厚的興趣。你見(jiàn)過(guò)凌晨四點(diǎn) MySQL 的 error 嗎?

本文來(lái)源:原創(chuàng)投稿

*愛(ài)可生開(kāi)源社區(qū)出品,原創(chuàng)內(nèi)容未經(jīng)授權(quán)不得隨意使用,轉(zhuǎn)載請(qǐng)聯(lián)系小編并注明來(lái)源。

參考文檔:https://www.percona.com/doc/percona-toolkit/LATEST/pt-table-checksum.html

1. 概述

pt-table-checksum 是 Percona-Toolkit 的組件之一,用于檢測(cè) MySQL 主、從庫(kù)的數(shù)據(jù)是否一致。其原理是在主庫(kù)執(zhí)行基于 statement 的 SQL 語(yǔ)句來(lái)生成主庫(kù)數(shù)據(jù)塊的checksum,把相同的 SQL 語(yǔ)句傳遞到從庫(kù)執(zhí)行,并在從庫(kù)上計(jì)算相同數(shù)據(jù)塊的 checksum,最后,比較主從庫(kù)上相同數(shù)據(jù)塊的 checksum 值,由此判斷主從數(shù)據(jù)是否一致。它能在非常大的表上工作的一個(gè)原因是,它把每個(gè)表分成行塊,并檢查每個(gè)塊與單個(gè)替換。選擇查詢(xún)。它改變塊的大小,使校驗(yàn)和查詢(xún)?cè)谒璧臅r(shí)間內(nèi)運(yùn)行。分塊表的目的是確保校驗(yàn)和不受干擾,并且不會(huì)在服務(wù)器上造成太多復(fù)制延遲或負(fù)載,而不是使用單個(gè)大查詢(xún)處理每個(gè)表。這就是為什么默認(rèn)情況下每個(gè)塊的目標(biāo)時(shí)間是 0.5 秒。

2. 場(chǎng)景

pt-table-checksum 默認(rèn)情況下可以應(yīng)對(duì)絕對(duì)部分場(chǎng)景,官方說(shuō),即使上千個(gè)庫(kù)、上萬(wàn)億的行,它依然可以很好的工作,這源自于設(shè)計(jì)很簡(jiǎn)單,一次檢查?個(gè)表,不需要太多的內(nèi)存和多余的操作;必要時(shí),pt-table-checksum 會(huì)根據(jù)服務(wù)器負(fù)載動(dòng)態(tài)改變 chunk 大小,減少?gòu)膸?kù)的延遲。

為了減少對(duì)數(shù)據(jù)庫(kù)的干預(yù),pt-table-checksum 還會(huì)?動(dòng)偵測(cè)并連接到從庫(kù),當(dāng)然如果失敗,可以指定 --recursion-method 選項(xiàng)來(lái)告訴從庫(kù)在哪里。它的易用性還體現(xiàn)在,復(fù)制若有延遲,在從庫(kù) checksum 會(huì)暫停直到趕上主庫(kù)的計(jì)算時(shí)間點(diǎn)(也通過(guò)選項(xiàng) -- 設(shè)定一個(gè)可容忍的延遲最大值,超過(guò)這個(gè)值也認(rèn)為不一致)。

3. 保障措施

pt-table-checksum 有許多其他的安全措施,以確保它不會(huì)?擾任何服務(wù)器的操作,包括副本。為了做到這?點(diǎn),pt-table-checksum 檢測(cè)副本并?動(dòng)連接到它們。(如果失敗,可以使?遞歸?法選項(xiàng)給它?個(gè)提示。)

該工具持續(xù)監(jiān)控副本。如果任何副本在復(fù)制過(guò)程中遠(yuǎn)遠(yuǎn)落后,pt 表校驗(yàn)和會(huì)暫停以使其趕上來(lái)。如果任何副本有錯(cuò)誤,或者復(fù)制停止,pt-table 校驗(yàn)和將暫停并等待。此外,pt-table-checksum 查找問(wèn)題的常見(jiàn)原因,比如復(fù)制過(guò)濾器,并且拒絕操作,除?您強(qiáng)迫它這樣做。復(fù)制篩選器是危險(xiǎn)的,因?yàn)?pt-table-checksum 執(zhí)行的查詢(xún)可能與它們發(fā)生沖突,并導(dǎo)致復(fù)制失敗。

pt-table 校驗(yàn)和驗(yàn)證塊是否太大而不能安全校驗(yàn)和。它對(duì)每個(gè)塊執(zhí)行解釋查詢(xún),并跳過(guò)可能大于所需行數(shù)的塊。您可以使用 --chunk-size-limit 選項(xiàng)配置此保護(hù)措施的敏感性。如果一個(gè)表因?yàn)樾袛?shù)少而要在單個(gè)塊中對(duì)其進(jìn)行校驗(yàn),那么 pt-table-checksum 將額外驗(yàn)證該表在副本上是否過(guò)大。這避免了以下場(chǎng)景:表在主服務(wù)器上是空的,但在副本上非常大,并且在一個(gè)大型查詢(xún)中進(jìn)行檢查,這會(huì)導(dǎo)致復(fù)制過(guò)程中出現(xiàn)非常長(zhǎng)的延遲。

還有?些其他的保障措施。例如,pt-table-checksum 將它的會(huì)話級(jí) innodb_lock_wait_timeout 設(shè)置為 1 秒,這樣,如果存在鎖等待,它將成為受害者,而不是導(dǎo)致其他查詢(xún)超時(shí)。另一個(gè)安全措施檢查數(shù)據(jù)庫(kù)服務(wù)器上的負(fù)載,如果負(fù)載過(guò)高則暫停。對(duì)于如何做到這一點(diǎn),沒(méi)有一個(gè)正確的答案,但是默認(rèn)情況下,如果有超過(guò) 25 個(gè)并發(fā)執(zhí)行的查詢(xún),pt-table-checksum 將暫停。您可能應(yīng)該使用 --max-load 選項(xiàng)為服務(wù)器設(shè)置一個(gè)合理的值。

校驗(yàn)和通常是一個(gè)低優(yōu)先級(jí)的任務(wù),應(yīng)該讓位給服務(wù)器上的其他?作。然而,一個(gè)必須經(jīng)常重啟的共工具是很難使用的。因此,pt 表校驗(yàn)和對(duì)錯(cuò)誤具有很強(qiáng)的彈性。例如,如果數(shù)據(jù)庫(kù)管理員出于任何原因需要?dú)⑺?pt-table-checksum 的查詢(xún),這就不是一個(gè)致命錯(cuò)誤。?戶經(jīng)常運(yùn)行 pt-kill 來(lái)終止任何長(zhǎng)時(shí)間運(yùn)行的校驗(yàn)和查詢(xún)。該工具將重試一次已殺死的查詢(xún),如果再次失敗,它將移動(dòng)到該表的下一個(gè)塊。如果存在鎖等待超時(shí),則應(yīng)用相同的行為。如果發(fā)生這樣的錯(cuò)誤,工具將打印一個(gè)警告,但每個(gè)表只打印一次。如果到任何服務(wù)器的連接失敗,pt-table-checksum 將嘗試重新連接并繼續(xù)?作。

4. 操作步驟

1. 創(chuàng)建主從架構(gòu)

安裝 mysql(略)

# 創(chuàng)建復(fù)制?戶(?便切換,從庫(kù)也創(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 造表,并且會(huì)同步至從庫(kù)。

[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. 校驗(yàn)

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 查詢(xún)?cè)?percona.checksums 表中,不?定?上查看結(jié)果呀 —— yes 則馬上比較 chunk 的 crc32 值并輸出 DIFFS 列,否則不輸出。默認(rèn) yes,如果指定為 --noreplicate-check,一般后續(xù)使用下面的 --replicate-check-only 去輸出 DIFF 結(jié)果。

--replicate-check-only:不在主從庫(kù)做 checksum 查詢(xún),只在原有 percona.checksums 表中查詢(xún)結(jié)果,并輸出數(shù)據(jù)不?致的信息。周期性的檢測(cè)?致性時(shí)可能?到。

--nocheck-binlog-format:不檢測(cè)日志格式。這個(gè)選項(xiàng)對(duì)于 ROW 模式的復(fù)制很重要,因?yàn)?pt-table-checksum 會(huì)在 Master 和 Slave 上設(shè)置 binlog_format=STATEMENT(確保從庫(kù)也會(huì)執(zhí)行 checksum SQL),MySQL 限制從庫(kù)是無(wú)法設(shè)置的,所以假如行復(fù)制從庫(kù),再作為主庫(kù)復(fù)制出新從庫(kù)時(shí)(A->B->C),B 的 checksums 數(shù)據(jù)將無(wú)法傳輸。

--replicate= 指定 checksum 計(jì)算結(jié)果存到哪個(gè)庫(kù)表?,如果沒(méi)有指定,默認(rèn)是 percona.checksums 。

3.3 執(zhí)行校驗(yàn)

1)場(chǎng)景 1

標(biāo)準(zhǔn)端口 檢查某庫(kù)下某表 ?主?從 從庫(kù) 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...#會(huì)?動(dòng)創(chuàng)建校驗(yàn)庫(kù)表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)場(chǎng)景 2(dsn)

非標(biāo)準(zhǔn)端口(主從端口不?致) 一主多從 全實(shí)例校驗(yàn)

# 創(chuàng)建校驗(yàn)庫(kù)表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)# 添加從庫(kù)信息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 ># 校驗(yàn)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機(jī)常用查詢(xún)工具, 數(shù)據(jù)校驗(yàn)工具pt的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于pos機(jī)常用查詢(xún)工具的知識(shí),希望能夠幫助到大家!

轉(zhuǎn)發(fā)請(qǐng)帶上網(wǎng)址:http://m.dsth100338.com/newsone/55629.html

你可能會(huì)喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 babsan@163.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。