中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

網站開發(fā)與維護工資多少西安百度公司官網

網站開發(fā)與維護工資多少,西安百度公司官網,紹興網站設計公司,做問卷美觀的網站Percona Toolkit 神器全攻略(復制類) Percona Toolkit 神器全攻略系列共八篇,前文回顧: 前文回顧Percona Toolkit 神器全攻略Percona Toolkit 神器全攻略(實用類)Percona Toolkit 神器全攻略(配…

Percona Toolkit 神器全攻略(復制類)

file

Percona Toolkit 神器全攻略系列共八篇,前文回顧:

前文回顧
Percona Toolkit 神器全攻略
Percona Toolkit 神器全攻略(實用類)
Percona Toolkit 神器全攻略(配置類)
Percona Toolkit 神器全攻略(監(jiān)控類)
Percona Toolkit 神器全攻略(系統(tǒng)類)
Percona Toolkit 神器全攻略(開發(fā)類)

全文約定:$為命令提示符、greatsql>為GreatSQL數據庫提示符。在后續(xù)閱讀中,依據此約定進行理解與操作

復制類

在Percona Toolkit中復制類共有以下工具

  • pt-heartbeat:監(jiān)控MySQL/GreatSQL復制延遲
  • pt-slave-delay:設定從落后主的時間
  • pt-slave-find:查找和打印所有MySQL/GreatSQL復制層級關系
  • pt-slave-restart:監(jiān)控Salve錯誤,并嘗試重啟Salve
  • pt-table-checksum:校驗主從復制一致性
  • pt-table-sync:高效同步表數據
  • pt-galera-log-explainer:對多個 Galera 日志進行過濾、聚合和匯總

pt-heartbeat

概要

用來監(jiān)測主從延遲的情況,此工具的設計為向 Master 中插入一條帶有當前時間(GreatSQL中的now()函數)的記錄到心跳表中,然后,該記錄會復制到 Slave 中。Slave 根據當前的系統(tǒng)時間戳(Perl中的time函數)減去heartbeat表中的記錄值來判斷主從的延遲情況。

用法

  • pt-heartbeat [OPTIONS] [DSN] --update|--monitor|--check|--stop

選項

至少指定 --stop 、 --update 、 --monitor--check 之一

互斥關系

--update 、 --monitor--check 是互斥的

--daemonize--check 是互斥的

該工具所有選項如下

參數含義
--ask-pass連接MySQL/GreatSQL提示輸入密碼
--charset默認字符集
--check檢查一次從機延遲并退出
--check-read-only檢查服務器是否啟用了read_only
--config讀取這個逗號分隔的配置文件列表,如果指定,這必須是命令行上的第一個選項
--create-table如果heartbeat表--table不存在,則創(chuàng)建它
--create-table-engine設置用于heartbeat表的引擎
--daemonize后臺運行
--database用于連接的數據庫
--dbi-driver指定連接的驅動程序
--defaults-file只從給定文件中讀取 GreatSQL 選項
--file將最新的--monitor輸出打印到此文件
--frames平均值的時間范圍,默認為1m,5m,15m
--help顯示幫助
--host連接到主機
--[no]insert-heartbeat-row如果--table中不存在心跳行,則插入該行
--interval更新或檢查heartbeat表的頻率,默認1秒
--log后臺運行時將所有輸出打印到此文件
--master-server-id根據此主服務器 ID 計算--monitor--check的延遲
--monitor連續(xù)監(jiān)控從機延遲
--fail-successive-errors如果指定,將在給定數量的連續(xù) DBI 錯誤(無法連接到服務器或發(fā)出查詢)后失敗
--password連接時使用的密碼
--pid創(chuàng)建給定的 PID 文件
--port用于連接的端口號
--print-master-server-id打印自動檢測到的或給定的--master-server-id
--read-only-interval當指定--check-read-only 時,發(fā)現服務器處于只讀狀態(tài)時休眠的時間間隔
--recurse--check模式下遞歸檢查從站到此深度
--recursion-method用于查找從站的首選遞歸方法
--replace使用REPLACE而不是UPDATE進行 –update
--run-time運行時間
--sentinel如果該文件存在則退出
--slave-user設置用于連接從站的用戶
--slave-password設置用于連接從站的密碼
--set-vars在這個以逗號分隔的variable=value對列表中設置 MySQL/GreatSQL 變量
--skew延遲檢查多久,默認值:0.5
--socket用于連接的套接字文件
--stop通過創(chuàng)建哨兵文件來停止運行實例
--table用于心跳的表
--update更新主機的心跳
--user登錄的用戶
--utc忽略系統(tǒng)時區(qū)并僅使用 UTC
--version顯示版本
--[no]version-check版本檢查

最佳實踐

為演示該工具,在主機上部署單機多實例并搭建一主一從模式,環(huán)境如下:

數據庫IP端口號角色
GreatSQL-8.0.32-25192.168.6.553306Master
GreatSQL-8.0.32-25192.168.6.553307Slave

首先需要在Master上添加表

$ pt-heartbeat --user=root --ask-pass -S /data/GreatSQL/mysql.sock -D test_db --master-server-id=103306 --create-table --update

-D:選擇一個數據庫中有的庫

--master-server-id:設置主機的server_id

--create-table:用于創(chuàng)建表

--update:會每秒更新一次heartbeat表的記錄

現在進入Master上可以看到在test_db庫下有一張heartbeat表,這里有一條記錄的數據。在Slave節(jié)點上也應該出現這張表

greatsql> SELECT * FROM test_db.heartbeat;
+----------------------------+-----------+---------------+----------+-----------------------+---------------------+
| ts                         | server_id | file          | position | relay_master_log_file | exec_master_log_pos |
+----------------------------+-----------+---------------+----------+-----------------------+---------------------+
| 2024-04-22T15:57:44.001900 |    103306 | binlog.000032 |    41464 | NULL                  |                NULL |
+----------------------------+-----------+---------------+----------+-----------------------+---------------------+
1 row in set (0.00 sec)

接下來我們更新主庫上這張表,并讓他在后臺運行

$ pt-heartbeat --user=root --ask-pass -S /data/GreatSQL/mysql.sock -D test_db --master-server-id=103306 --update --daemonize

進入從機,開始監(jiān)控主從延遲

$ pt-heartbeat --user=root --ask-pass -S /data/GreatSQL02/mysql.sock -D test_db --master-server-id=103306 --monitor --print-master-server-id
Enter password:
0.00s [  0.00s,  0.00s,  0.00s ] 103306
0.00s [  0.00s,  0.00s,  0.00s ] 103306
0.00s [  0.00s,  0.00s,  0.00s ] 103306
0.00s [  0.00s,  0.00s,  0.00s ] 103306

輸出的結果為:實時延遲,[1分鐘延遲,5分鐘延遲,15分鐘延遲] 主節(jié)點的Server_id

  1. 當然也可以使用--interval參數控制主庫上的更新間隔,默認是1秒

  2. 如果使用守護進程的方式,要關閉的話可以采用pt-heartbeat --stop

  3. 單次查看Slave庫上的延遲情況可以把monitor換成--check

pt-slave-delay

概要

可能在日常工作中會存在誤刪除數據的可能,所以可以用該工具設置Slave服務器落后于Master服務器,達到構建一個延遲從庫

原理

通過啟動和停止復制SQL線程來設置Slave庫落后于Master庫的指定時間

用法

  • pt-slave-delay [OPTIONS] SLAVE_DSN [MASTER_DSN]

選項

該工具所有選項如下

參數含義
--ask-pass連接時提示輸入密碼
--charset默認字符集
--config讀取這個逗號分隔的配置文件列表,如果指定,這必須是命令行上的第一個選項
--[no]continue退出后繼續(xù)正常復制
--daemonize后臺運行
--database用于連接的數據庫
--defaults-file只從給定文件中讀取MySQL/GreatSQL選項
--delay從庫延遲于主庫的時間,默認1小時
--help顯示幫助
--host連接到主機的IP地址
--interval啟動或停止的頻率。默認1分鐘
--log后臺運行時日志輸出的位置
--password連接時使用的密碼
--pid創(chuàng)建給定的 PID 文件
--port用于連接的端口號
--quiet不要打印有關操作的信息性消息
--run-time運行時間,默認是一直運行
--set-vars在這個以逗號分隔的variable=value對列表中設置 MySQL/GreatSQL 變量
--socket用于連接的套接字文件
--use-master從Master庫獲取二進制日志位置,而不從Slave庫獲取
--user用于登錄的用戶
--version顯示版本
--[no]version-check版本檢查

最佳實踐

此工具只需在Slave庫運行即可,無需在Master節(jié)點運行

$ pt-slave-delay --user=root --ask-pass -S /data/GreatSQL02/mysql.sock --delay=1m --interval=15s --run-time=10m

將主從延遲設定為1分鐘,每15秒進行一次檢測,持續(xù)運行10分鐘

輸出結果如下

2024-04-23T09:29:00 slave running 0 seconds behind
2024-04-23T09:29:00 STOP SLAVE until 2024-04-23T09:30:00 at master position binlog.000032/500611
2024-04-23T09:29:15 slave stopped at master position binlog.000032/500611
2024-04-23T09:29:30 slave stopped at master position binlog.000032/500611
......中間省略
2024-04-23T09:30:30 Setting slave to run normally

如果在運行的過程中進入Slave節(jié)點查看SHOW SLAVE STATUS\G

Slave_IO_Running: Yes
Slave_SQL_Running: No

可以看到SQL線程已關閉,證明此工具精準控制SQL線程的啟停,有效實現主從延遲

也可使用CHANGE REPLICATION SOURCE TO SOURCE_DELAY=3600;該命令來控制主從延遲的時間

pt-slave-find

概要

查找和打印主從架構中主庫的從庫個數,類似于拓撲圖的意思

用法

  • pt-slave-find [OPTIONS] [DSN]

選項

參數含義
--ask-pass連接MySQL/GreatSQL提示輸入密碼
--charset默認字符集
--config讀取這個逗號分隔的配置文件列表,如果指定,這必須是命令行上的第一個選項
--databases僅檢查此逗號分隔的數據庫列表
--defaults-file只從給定文件中讀取 MySQL/GreatSQL 選項
--help顯示幫助
--host連接到主機
--password連接時使用的密碼
--pid創(chuàng)建給定的 PID 文件
--port用于連接的端口號
--recurse層次結構中要遞歸的級別數,默認為無限
--recursion-method用于查找從庫的首選遞歸方法,有三種 (processlist、hosts、none)
--report-format設置打印有關從庫的哪些信息
--resolve-address將 IP 地址解析為主機名
--slave-user設置用于連接從庫的用戶
--slave-password設置用于連接從庫的密碼
--set-vars以逗號分隔的variable=value對列表中設置 MySQL/GreatSQL 變量
--socket用于連接的套接字文件
--user登錄的用戶
--version顯示版本

最佳實踐

連接到主從集群的Master節(jié)點,查看該集群的復制層次數

$ pt-slave-find h=192.168.6.55,u=root --ask-pass
192.168.6.55
Version         8.0.32-25
Server ID       103306
Uptime          20:38:01 (started 2024-04-22T14:09:23)
Replication     Is not a slave, has 1 slaves connected, is not read_only
Filters
Binary logging  ROW
Slave status
Slave mode      STRICT
Auto-increment  increment 1, offset 1
InnoDB version  8.0.32-8.0.32
+- 192.168.6.55:3307Version         8.0.32-25Server ID       103307Uptime          20:35:59 (started 2024-04-22T14:12:02)Replication     Is a slave, has 0 slaves connected, is not read_onlyFiltersBinary logging  ROWSlave status    0 seconds behind, running, no errorsSlave mode      STRICTAuto-increment  increment 1, oInnoDB version  8.0.32-8.0.32

可以看到該主節(jié)點下只有一個從節(jié)點,且輸出也顯示了主節(jié)點和總結點的信息

pt-slave-restart

概要

監(jiān)視一個或多個 GreatSQL 復制從庫是否有錯誤,并在復制停止時嘗試重新啟動復制

用法

  • pt-slave-restart [OPTIONS] [DSN]

選項

參數含義
--always永不停止Slave線程
--ask-pass連接MySQL/GreatSQL提示輸入密碼
--charset默認字符集
--[no]check-relay-log在檢查從庫錯誤之前檢查最后一個中繼日志文件和位置
--config讀取這個逗號分隔的配置文件列表,如果指定,這必須是命令行上的第一個選項
--daemonize后臺運行
--databases數據庫列表
--defaults-file只從給定文件中讀取 MySQL/GreatSQL 選項
--error-length要打印的錯誤消息的最大長度
--error-numbers指定跳過哪些錯誤,可用,進行分隔
--error-text根據錯誤的信息進行匹配跳過
--help顯示幫助
--host連接到主機
--log后臺運行時,將輸出打印到此文件
--max-sleep再次輪詢從庫之前休眠的最長時間
--min-sleep再次輪詢從庫之前休眠眠的最短時間
--monitor是否監(jiān)控從機(默認)
--password連接時使用的密碼
--pid創(chuàng)建給定的 PID 文件
--port用于連接的端口號
--quiet抑制正常輸出(禁用--verbose
--recurse在主庫執(zhí)行,監(jiān)控從庫,默認深度 0 表示“僅監(jiān)視指定的從庫”
--recursion-method用于查找從庫的首選遞歸方法
--run-time運行時間
--sentinel如果該文件存在則退出,默認值:/tmp/pt-slave-restart-sentinel
--slave-user設置用于連接從庫的用戶
--slave-password設置用于連接從庫的密碼
--set-vars以逗號分隔的variable=value 對列表中設置 MySQL/GreatSQL 變量
--skip-count重新啟動從庫時要跳過的語句數,默認1
--master-uuid使用 GTID 時,應創(chuàng)建一個空事務以便跳過它
--sleep檢查從庫之間的初始睡眠秒數
--socket用于連接的套接字文件
--stop停止運行實例
--until-master運行到指定的master_log_pos,file位置后停止
--until-relay運行到指定的中繼日志文件和位置后停止
--user用于登錄的用戶
--verbose向輸出添加更多信息
--version顯示版本
--[no]version-check版本檢查

最佳實踐

在主庫創(chuàng)建一張t1表,并插入5條數據

greatsql> CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(255) NOT NULL);
greatsql> INSERT INTO t1 (name) VALUES ('張三');  
greatsql> INSERT INTO t1 (name) VALUES ('李四');  
greatsql> INSERT INTO t1 (name) VALUES ('王五');  
greatsql> INSERT INTO t1 (name) VALUES ('趙六');  
greatsql> INSERT INTO t1 (name) VALUES ('孫七');

主庫查看數據

greatsql> SELECT * FROM test_db.t1;
+----+--------+
| id | name   |
+----+--------+
|  1 | 張三   |
|  2 | 李四   |
|  3 | 王五   |
|  4 | 趙六   |
|  5 | 孫七   |
+----+--------+
5 rows in set (0.00 sec)

從庫查看數據

greatsql> SELECT * FROM test_db.t1;
+----+--------+
| id | name   |
+----+--------+
|  1 | 張三   |
|  2 | 李四   |
|  3 | 王五   |
|  4 | 趙六   |
|  5 | 孫七   |
+----+--------+
5 rows in set (0.00 sec)
主動處理錯誤

在從庫執(zhí)行pt-slave-restart工具監(jiān)控從庫

$ pt-slave-restart h=192.168.6.55,P=3307,u=root --ask-pass

注意,若使用該工具,參數slave_parallel_workers必須設置為0,否則會報錯”Cannot skip transactions properly because GTID is enabled and slave_parallel_workers > 0. See 'GLOBAL TRANSACTION IDS' in the tool's documentation.“ 如果不關閉多線程復制,工具會分不清到底哪個線程復制出了問題

此時已經開啟了從庫監(jiān)控,我們在主庫上人為造成一個主從復制錯誤

greatsql> SET sql_log_bin=0;
greatsql> INSERT INTO t1 VALUES(6,'周八');
greatsql> SET sql_log_bin=1;
greatsql> DELETE FROM t1 WHERE id=6;

此時工具檢測到了主從復制異常,并且馬上修復了該錯誤,使主從復制正常運行

$ pt-slave-restart h=192.168.6.55,P=3307,u=root --ask-pass
# 時間戳 + 從庫端信息 + relay log + relat log 位置 + 主從復制報錯碼
2024-04-24T10:33:54 P=3307,h=192.168.6.55,u=root myarch-relay-bin.000003   36702 1032
手動處理錯誤

如果一直運行工具,檢測到錯誤會直接修復。如果是已經有錯誤了要如何使用該工具修復?還是同樣的錯誤,再次主庫手動執(zhí)行

greatsql> SET sql_log_bin=0;
greatsql> INSERT INTO t1 VALUES(6,'周八');
greatsql> SET sql_log_bin=1;
greatsql> DELETE FROM t1 WHERE id=6;

此時查看從庫報錯

greatsql> SHOW SLAVE STATUS\G
Slave_IO_Running: Yes
Slave_SQL_Running: No
Last_SQL_Error: Could not execute Delete_rows event on table test_db.t1; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log binlog.000032, end_log_pos 504208

記住報錯的錯誤碼1032,接著在從庫機器上使用該工具

$ pt-slave-restart h=192.168.6.55,P=3307,u=root --ask-pass --error-numbers=1032

使用--error-numbers=指定錯誤碼

此時就會輸出對應的信息

$ pt-slave-restart h=192.168.6.55,P=3307,u=root --ask-pass --error-numbers=10322024-04-24T10:49:26 P=3307,h=192.168.6.55,u=root myarch-relay-bin.000003     37046 1032

接著在從庫上查看主從狀態(tài),就可以看到主從復制已經是正常的了

greatsql> SHOW SLAVE STATUS\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Last_SQL_Error:

pt-table-checksum

這款數據校驗與修復工具雖廣受歡迎,卻存在不容忽視的短板:不支持MySQL/GreatSQL的MGR場景、國內普遍的上云下云業(yè)務,以及MySQL/GreatSQL與Oracle間的異構數據庫等多元化場景。為了攻克這些難題,GreatSQL推出了名為gt-checksum的校驗&修復工具,旨在全面滿足各類業(yè)務需求!

  • Gitee倉庫地址:https://gitee.com/GreatSQL/gt-checksum

概要

檢查 MySQL/GreatSQL 的主從數據是否一致

用法

  • pt-table-checksum [OPTIONS] [DSN]

選項

參數含義
--ask-pass連接MySQL/GreatSQL提示輸入密碼
--channel指定復制通道
--[no]check-binlog-format檢查所有服務器上的binlog_format系統(tǒng)參數是否相同
--binary-index修改--create-replicate-table的行為,使復制表的上下邊界列以 BLOB 數據類型創(chuàng)建
--check-interval指定因選項--max-lag檢查之間休眠時間
--[no]check-plan檢查查詢執(zhí)行計劃的安全性
--[no]check-replication-filters指定檢測主從復制是否有設置復制過濾器
--check-slave-lag指定復制延遲大于選項--max-lag指定的值之后暫停檢查校驗操作
--[no]check-slave-tables檢查從庫上的表是否存在并具有所有校驗和--columns
--chunk-index指定使用哪個索引對表進行chunk分塊操作
--chunk-index-columns指定使用選項--chunk-index的索引使用最左前綴幾個索引字段,只適用于復合索引
--chunk-size為每個校驗和查詢選擇的行數,允許的后綴單位為k、M、G
--chunk-size-limit指定chunk的行數最多可以超過選項--chunk-size指定的行數的多少倍
--chunk-time動態(tài)調整每個chunk的大小使相應的表行數都在指定的時間內完成校驗操作
--columns指定只需要校驗的字段,如有多個則用逗號隔開
--config讀取這個逗號分隔的配置文件列表,如果指定,這必須是命令行上的第一個選項
--[no]create-replicate-table創(chuàng)建選項--replicate指定的數據庫和表
--databases僅對逗號分隔的數據庫列表進行校驗
--databases-regex僅名稱與此正則表達式匹配和數據庫進行校驗
--defaults-file只從給定文件中讀取 MySQL/GreatSQL 選項
--disable-qrt-plugin如果啟用了 QRT(查詢響應時間)插件,請將其禁用
--[no]empty-replicate-table在對表進行校驗和之前,刪除每個表之前的校驗和
--engines僅校驗使用這些存儲引擎的表
--explain顯示但不執(zhí)行校驗和查詢(禁用--[no]empty-replicate-table
--fail-on-stopped-replication若復制停止,則會失敗并顯示錯誤(退出狀態(tài) 128),而不是等到復制重新啟動
--float-precisionFLOAT 和 DOUBLE 數字到字符串轉換的精度
--function指定校驗操作使用的哈希函數??蛇x函數有SHA1、MD5等
--help顯示幫助
--host連接到主機
--ignore-columns指定需要忽略校驗的字段
--ignore-databases指定需要忽略校驗的數據庫
--ignore-databases-regex指定采用正則表達式匹配忽略校驗的數據庫
--ignore-engines指定需要忽略校驗的存儲引擎列表
--ignore-tables指定需要忽略校驗的表
--ignore-tables-regex指定采用正則表達式匹配忽略校驗的表
--max-lag指定允許主從復制延遲時長的最大值,單位秒
--max-load在每個塊之后檢查`SHOW GLOBAL STATUS,如果任何狀態(tài)變量高于閾值則暫停
--password連接時使用的密碼
--pause-file當此參數指定的文件存在時,執(zhí)行將暫停
--pid創(chuàng)建給定的 PID 文件
--plugin定義pt_table_checksum_plugin類的 Perl 模塊文件
--port用于連接的端口號
--progress將進度報告打印到 STDERR
--quiet僅打印最重要的信息(禁用 --progress
--recurse指定搜尋從庫的層級,默認無限
--recursion-method指定獲取從庫的方式
--replicate將校驗和結果寫入此表
--[no]replicate-check指定在校驗完每張表后檢查主從當前表是否出現不一致
--replicate-check-only檢查副本的一致性,而無需執(zhí)行校驗和查詢
--replicate-check-retries指定當校驗出主從數據不一致重試校驗的次數
--replicate-database指定工具在執(zhí)行校驗操作時在哪個數據庫下進行
--resume指定從最后完成校驗的chunk開始恢復校驗
--retries指定當出現非嚴重性錯誤時重復校驗一個塊的次數
--run-time指定校驗操作運行的時間
--separator用于 CONCAT_WS() 的分隔符
--skip-check-slave-lag指定DSN連接從庫時跳過主從延遲檢查,可以指定多個從庫檢查
--slave-user設置用于連接從庫的用戶
--slave-password設置用于連接從庫的密碼
--set-vars運行檢查時指定參數值,如有多個用逗號分隔
--socket用于連接的套接字文件
--slave-skip-tolerance當主表被標記為僅在一個塊中進行校驗和,但從表超過了可接受的最大大小時,該表將被跳過
--tables僅對這個以逗號分隔的表列表進行校驗和
--tables-regex僅對名稱與此 Perl 正則表達式匹配的表進行校驗
--trim將 TRIM() 添加到 VARCHAR 列(在比較 4.1 和 >= 5.0 時有幫助)
--truncate-replicate-table在開始校驗和之前截斷復制表
--user登錄的用戶
--version顯示版本
--[no]version-check版本檢查
--where僅執(zhí)行與此 WHERE 子句匹配的行

最佳實踐

校驗主從數據是否一致(主從端口一致)

主從機器端口一致時,可以使用此方法

檢測差異,并寫入差異到checksums表中,主庫上執(zhí)行如下命令

pt-table-checksum --create-replicate-table --replicate=test_db.checksums --nocheck-replication-filters --nocheck-binlog-format --recursion-method=processlist --databases=test_db --user=root --ask-pass --host=192.168.6.55 --port=3306
  • --nocheck-replication-filters:不檢查復制過濾器,建議啟用

  • --no-check-binlog-format:不檢查復制的binlog模式,要是binlog模式是ROW,則會報錯

結果如下

Checking if all tables can be checksummed ...
Starting checksum ...TS ERRORS  DIFFS     ROWS  DIFF_ROWS  CHUNKS SKIPPED    TIME TABLE
04-24T15:57:13      0      0        9          0       1       0   0.008 test_db.test_t1
  • TS:完成檢查的時間
  • ERRORS:檢查時候發(fā)生錯誤和警告的數量
  • DIFFS:0表示一致,非0表示不一致
  • DIFF_ROWS:主庫和從庫差異的數據行數
  • CHUNKS:被劃分到表中的塊的數目
  • SKIPPED:由于錯誤或警告或過大,則跳過塊的數目
  • TIME:執(zhí)行的時間
  • TABLE:被檢查的表名

同時結果也保存到了表中

greatsql> select * from checksums;
+---------+--------------------+-------+------------+-------------+----------------+----------------+----------+----------+------------+------------+---------------------+
| db      | tbl                | chunk | chunk_time | chunk_index | lower_boundary | upper_boundary | this_crc | this_cnt | master_crc | master_cnt | ts                  |
+---------+--------------------+-------+------------+-------------+----------------+----------------+----------+----------+------------+------------+---------------------+
| test_db | t1                 |     1 |   0.001848 | NULL        | NULL           | NULL           | 6d60e23f |        5 | 6d60e23f   |          5 | 2024-04-24 16:29:30 |
+---------+--------------------+-------+------------+-------------+----------------+----------------+----------+----------+------------+------------+---------------------+
1 rows in set (0.01 sec)
校驗主從數據是否一致(主從端口不一致)

主從機器端口不一致時,可以使用此方法

在主庫創(chuàng)建一張DSN表

greatsql> CREATE TABLE test_db.dsns ( id int(11) NOT NULL AUTO_INCREMENT, parent_id int(11) DEFAULT NULL,dsn varchar(255) NOT NULL, PRIMARY KEY (id) );greatsql> INSERT INTO test_db.dsns(dsn) VALUES ('h=192.168.6.55,P=3307,u=root,p=');

使用工具校驗,注意此時--recursion-method就要改為DSN模式

$ pt-table-checksum --replicate=test_db.checksums --nocheck-replication-filters --no-check-binlog-format --host=192.168.6.55 --port=3306 --user=root --ask-pass --databases=test_db --recursion-method dsn=h=192.168.6.55,D=test_db,t=dsns

結果如下

Checking if all tables can be checksummed ...
Starting checksum ...TS ERRORS  DIFFS     ROWS  DIFF_ROWS  CHUNKS SKIPPED    TIME TABLE
04-24T17:04:42      0      0        1          0       1       0   0.035 test_db.dsns
04-24T17:04:42      0      0        1          0       1       0   0.022 test_db.heartbeat
04-24T17:04:42      0      0        0          0       1       0   0.036 test_db.my_table
04-24T17:04:42      0      2    10000       9823       4       0   0.097 test_db.ptosc
04-24T17:04:42      0      0        5          0       1       0   0.021 test_db.t1
04-24T17:04:42      0      1       15         15       1       0   0.026 test_db.tc10011_ta4
04-24T17:04:42      0      1        9          9       1       0   0.078 test_db.test_t1
04-24T17:04:42      0      0        0          0       1       0   0.066 test_db.test_table

可以看到有三張表被檢測出來不一致。如果連表都不存在則會報錯Table 'XXXX' doesn't exist

出現了主從數據不一致,就要使用pt-table-sync工具進行修復

pt-table-sync

概要

高效同步 MySQL/GreatSQL 表數據

用法

  • pt-table-sync [OPTIONS] DSN [DSN]

選項

至少指定 --print 、 --execute--dry-run 之一。--where--replicate 是互斥的

參數含義
--algorithms比較表時使用的算法(按優(yōu)先順序),默認值:Chunk、Nibble、GroupBy、Stream
--ask-pass連接 MySQL/GreatSQL 提示輸入密碼
--bidirectional啟用第一個和后續(xù)主機之間的雙向同步
--[no]bin-log指定同步操作記錄二進制日志,相當于執(zhí)行SET SQL_LOG_BIN=1
--buffer-in-mysql指定 MySQL/GreatSQL 在其內存中緩沖查詢
--[no]buffer-to-client比較時從 MySQL/GreatSQL 中逐一獲取行
--channel指定復制通道
--charset默認字符集
--[no]check-child-tables檢查--execute是否會對子表產生不利影響
--[no]check-master指定當選項--sync-to-master時,嘗試驗證工具連接到的主庫是否是真正的主庫
--[no]check-slave檢查目標服務器是否為從服務器
--[no]check-triggers檢查目標表上是否未定義觸發(fā)器
--chunk-column指定根據表中字段對表進行chunk操作
--chunk-index指定使用哪個索引對表進行chunk分塊操作
--chunk-size每個塊的行數或數據大小
--columns比較以逗號分隔的列列表
--config讀取這個逗號分隔的配置文件列表,如果指定,這必須是命令行上的第一個選項
--conflict-column--bidirectional同步期間發(fā)生行沖突時比較此列
--conflict-comparison選擇具有此屬性的--conflict-column作為源
--conflict-error如何報告無法解決的沖突和沖突錯誤,默認為:warn(警告)
--conflict-threshold一個--conflict-column必須超過另一個的數量
--conflict-value將此值用于某些--conflict-comparison
--databases僅同步的數據庫列表,如有多個用逗號分隔
--defaults-file只從給定文件中讀取 GreatSQL 選項
--dry-run分析、決定要使用的同步算法、打印并退出
--engines僅同步的存儲引擎列,如有多個用逗號分隔
--execute執(zhí)行查詢以使表具有相同的數據
--explain-hosts打印連接信息并退出
--float-precisionFLOATDOUBLE 數字到字符串轉換的精度
--[no]foreign-key-checks啟用外鍵檢查 (SET FOREIGN_KEY_CHECKS=1)
--function選擇使用哪個哈希函數作為校驗和,默認為 CRC32
--help顯示幫助
--[no]hex-blobHEX() BLOB、TEXT和 BINARY列
--host連接到主機
--ignore-columns要忽略的列,如有多個用逗號分隔
--ignore-databases要忽略的數據庫,如有多個用逗號分隔
--ignore-engines要忽略的引擎,如有多個用逗號分隔
--ignore-tables要忽略的表,如有多個用逗號分隔
--ignore-tables-regex要忽略的表正則表達式,如有多個用逗號分隔
--[no]index-hint將 FORCE/USE INDEX 提示添加到塊和行查詢中
--lock鎖定表:0=永不鎖表,1=每個同步周期鎖表,2=表操作時鎖表,3=每個DSN連接的服務器鎖表
--lock-and-rename指定鎖定源表和目標表,執(zhí)行同步操作,然后進行表名交換
--password連接時使用的密碼
--pid創(chuàng)建給定的 PID 文件
--port用于連接的端口號
--print打印將解決差異的查詢
--recursion-method用于查找從站的首選遞歸方法
--replace將所有INSERTUPDATE語句寫為REPLACE
--replicate同步此表中列為不同的表
--slave-user設置用于連接從庫的用戶
--slave-password設置用于連接從庫的密碼
--set-vars以逗號分隔的variable=value對列表中設置 MySQL/GreatSQL 變量
--socket用于連接的套接字文件
--sync-to-master指定將DSN連接信息確認為從庫,并同步信息到主庫
--tables要同步的表,如有多個用逗號分隔
--timeout-ok指定當選項--wait導致工具執(zhí)行失敗時跳過失敗繼續(xù)執(zhí)行
--[no]transaction指定工具操作使用事務代替LOCK TABLES語句進行鎖表
--trimBIT_XORACCUM 模式下的 TRIM() VARCHAR
--[no]unique-checks啟用唯一鍵檢查 ( SET UNIQUE_CHECKS=1 )
--user用于連接的用戶
--verbose打印同步操作的結果
--version顯示版本
--[no]version-check版本檢查
--wait指定存在主從復制延遲時從庫可以等待多長時間追上主庫,如果超過時間依然存在延遲就中止退出
--whereWHERE 子句用于限制同步到表的一部分
--[no]zero-chunk為具有零或零等值的行添加塊

最佳實踐

同步單個表

注意,同步時候兩臺機器不能是主從關系。第一DSN為源庫,第二個DSN為被同步庫

將192.168.6.55機器上的test_db.test_t1表同步至192.168.6.129機器

$ pt-table-sync --execute h=192.168.6.55,u=root,p=,P=3306,D=test_db,t=test_t1 h=192.168.6.129,p=test,u=test,P=3306
同步單個庫

注意,同步時候兩臺機器不能是主從關系。第一DSN為源庫,第二個DSN為被同步庫

$ pt-table-sync --execute h=192.168.6.55,u=root,p=,P=3306 h=192.168.6.129,u=test,p=test --databases test_db

此時如果有表不存在,則會報錯

Table test_db.checksums does not exist on P=3306,h=192.168.6.129,p=...,u=test  while doing test_db.checksums on 192.168.6.129

此時只需手動建表即可

同步所有庫表

注意,同步時候兩臺機器不能是主從關系。第一DSN為源庫,第二個DSN為被同步庫

$ pt-table-sync --execute h=192.168.6.55,u=root,p=,P=3306 h=192.168.6.129,u=test,p=test
主從復制同步從庫

同步test_db.checksums中記錄的數據不一致的表。該表中的數據是由pt-table-checksum工具檢測出來的

$ pt-table-sync --execute --replicate 'test_db.checksums' --sync-to-master h=192.168.6.55,P=3307,u=root,p=

本文完 :) 下章節(jié)將介紹Percona Toolkit 神器全攻略(性能類)


Enjoy GreatSQL :)

關于 GreatSQL

GreatSQL是適用于金融級應用的國內自主開源數據庫,具備高性能、高可靠、高易用性、高安全等多個核心特性,可以作為MySQL或Percona Server的可選替換,用于線上生產環(huán)境,且完全免費并兼容MySQL或Percona Server。

相關鏈接: GreatSQL社區(qū) Gitee GitHub Bilibili

GreatSQL社區(qū):

image

社區(qū)有獎建議反饋: https://greatsql.cn/thread-54-1-1.html

社區(qū)博客有獎征稿詳情: https://greatsql.cn/thread-100-1-1.html

(對文章有疑問或者有獨到見解都可以去社區(qū)官網提出或分享哦~)

技術交流群:

微信&QQ群:

QQ群:533341697

微信群:添加GreatSQL社區(qū)助手(微信號:wanlidbc )好友,待社區(qū)助手拉您進群。

http://www.risenshineclean.com/news/53908.html

相關文章:

  • 做教育的網站有哪些指數
  • 武進區(qū)城鄉(xiāng)建設局網站營銷網站搭建
  • 楊浦做網站公司買賣交易平臺
  • 網站建設方案書是什么意思近期新聞事件
  • 自己做的網站打不開外貿營銷網站建設介紹
  • 做網站特別注意什么軟文廣告平臺
  • 采購網站平臺電商軟文范例100字
  • 做網站北京公司西安seo關鍵詞推廣
  • 電子商務網站的建設目標是什么關鍵詞優(yōu)化軟件
  • 咨詢網站 模板高端網站建設企業(yè)
  • 網頁設計素材 旅游seo服務商
  • 國外網站模版免費下載百度電腦版下載
  • 娃哈哈網絡營銷策劃方案佛山seo培訓機構
  • 天津有哪些有名的網站建設公司近三天時政熱點
  • wordpress文章發(fā)布到專題江蘇網站seo
  • 企業(yè)門戶網站包括品牌營銷策劃有限公司
  • 培訓人員網站建設建站教程
  • 安徽科技學院官網百度seo sem
  • 加強縣政府網站建設的幾點建議連云港seo優(yōu)化公司
  • 做h網站風險網站如何優(yōu)化排名
  • 建站公司的工作流程百度熱議
  • 地推拉新接單網seo網站建站
  • wordpress表單編輯插件下載湖南靠譜的關鍵詞優(yōu)化
  • 網站底部懸浮廣告投放數據分析
  • 網站搭建中企動力第一推薦幾個靠譜的網站
  • bootstrap 做企業(yè)網站百度關鍵詞優(yōu)化策略
  • 衡水網站網站建設成都最好的網站推廣優(yōu)化公司
  • 仿做靜態(tài)網站多少錢seo網址超級外鏈工具
  • 游戲網站如何做濰坊seo計費
  • 怎樣優(yōu)化手機網站愛采購seo