本文為您介紹全球數據庫網絡(Global Database Network,簡稱GDN)主從實例數據校驗的方法。
前提條件
已開通GDN服務并添加從實例,詳情請參見開通GDN服務。
注意事項
本操作只支持在從實例中執行。
數據校驗會占用一部分存儲資源,建議在業務低峰期進行。
提交校驗任務
語法
CHECK REPLICA TABLE {`test_db`.`test_tb`} | {`test_db`} [CHANNEL='channel_name'] [MODE=direct|snapshot];
使用限制
不支持對無主鍵表進行校驗。
正在校驗的表,再次提交校驗任務時,新的校驗任務會被忽略。
對已經完成校驗的表再次進行校驗時,系統會自動刪除之前的校驗結果,然后生成新的校驗結果。
校驗任務以異步方式執行。
支持對單張表進行校驗,也支持對指定庫中的所有表進行校驗。
CHANNEL
:可以通過在從實例上執行SHOW SLAVE STATUS
獲取Channel_Name
字段,詳情請參見SHOW SLAVE STATUS。MODE
為校驗模式:snapshot
:構造上下游一致性快照進行校驗,需要先開啟Sync Point
,詳情請參見開啟Sync Point。direct
:直接讀取上下游數據進行校驗,存在誤報率。
示例
mysql> check replica table `testdb`.`testtb` channel='test' mode=direct;
Query OK, 0 rows affected (0.05 sec)
開啟Sync Point
在主實例執行如下SQL即可開啟Sync Point功能:
set global enable_polarx_sync_point = true;
set global enable_sync_point = true;
set global enable_xa_tso = true;
set global enable_auto_commit_tso = true;
# 設置sync point產生的時間間隔,單位:毫秒
set global SYNC_POINT_TASK_INTERVAL = 5000;
開啟Sync Point功能后,CDC(Change Data Capture,日志節點)在主從實例數據同步過程中會實時構造主從實例的TSO-MAPPING,您可以通過從實例中的information_schema.rpl_sync_point
視圖來查看所有的TSO-MAPPING。
mysql> select * from information_schema.rpl_sync_point limit 10;
+-------+---------------------+---------------------+---------------------+
| ID | PRIMARY_TSO | SECONDARY_TSO | CREATE_TIME |
+-------+---------------------+---------------------+---------------------+
| 31482 | 7211850887478640704 | 7211850889504489536 | 2024-06-27 06:00:41 |
| 31483 | 7211850908445966400 | 7211850910203379776 | 2024-06-27 06:00:46 |
| 31484 | 7211850929417486400 | 7211850931690799168 | 2024-06-27 06:00:51 |
| 31485 | 7211850950393200704 | 7211850952322580544 | 2024-06-27 06:00:56 |
| 31486 | 7211850971368915008 | 7211850973738696768 | 2024-06-27 06:01:01 |
| 31487 | 7211850992327852096 | 7211850994282397760 | 2024-06-27 06:01:06 |
| 31488 | 7211851013303566400 | 7211851015677542464 | 2024-06-27 06:01:11 |
| 31489 | 7211851034275086400 | 7211851036204466240 | 2024-06-27 06:01:16 |
| 31490 | 7211851055250800704 | 7211851057595416640 | 2024-06-27 06:01:21 |
| 31491 | 7211851076218126400 | 7211851078210420800 | 2024-06-27 06:01:26 |
+-------+---------------------+---------------------+---------------------+
10 rows in set (0.04 sec)
TSO:格式為時間戳,Binlog中每一個事務都包含TSO,用于區分每一個事務。詳情請參見日志服務(Binlog)。
TSO-MAPPING:某一時刻主從實例的TSO。
查看校驗進度
語法
CHECK REPLICA TABLE {`test_db`.`test_tb`} | {`test_db`} SHOW PROGRESS;
支持查看單張表的校驗進度,同時也支持查看指定數據庫下所有表的校驗進度。
示例
mysql> CHECK REPLICA TABLE `test_db`.`test_tb` SHOW PROGRESS;
+----------+---------+-------+----------+---------+
| DATABASE | TABLE | STAGE | STATUS | SUMMARY |
+----------+---------+-------+----------+---------+
| test_db | test_tb | CHECK | FINISHED | SUCCESS |
+----------+---------+-------+----------+---------+
1 row in set (0.04 sec)
暫停校驗任務
語法
CHECK REPLICA TABLE {`test_db`.`test_tb`} | {`test_db`} PAUSE;
每張表的校驗任務會對應一個或多個子任務(根據數據量進行自動拆分)。在執行完暫停校驗語句后,處于執行狀態的子任務將繼續執行,而未進入執行狀態的子任務將不再執行。
示例
mysql> CHECK REPLICA TABLE `testdb`.`testtb` PAUSE;
Query OK, 0 rows affected (0.05 sec)
重啟校驗任務
語法
CHECK REPLICA TABLE {`test_db`.`test_tb`} | {`test_db`} CONTINUE;
重啟校驗任務后,未進入執行過的子任務將會執行。
示例
mysql> CHECK REPLICA TABLE `testdb`.`testtb` CONTINUE;
Query OK, 0 rows affected (0.05 sec)
查看校驗結果
語法
CHECK REPLICA TABLE {`test_db`.`test_tb`} | {`test_db`} SHOW DIFF;
示例
mysql> CHECK REPLICA TABLE `test_db`.`test_tb` SHOW DIFF;
+----------+---------+------------+--------+--------------+-------------+--------------+-------------+
| DATABASE | TABLE | ERROR_TYPE | STATUS | SRC_KEY_NAME | SRC_KEY_VAL | DST_KEY_NAME | DST_KEY_VAL |
+----------+---------+------------+--------+--------------+-------------+--------------+-------------+
| test_db | test_tb | Miss | FOUND | [id] | [2] | [id] | NULL |
+----------+---------+------------+--------+--------------+-------------+--------------+-------------+
1 row in set (0.00 sec)
ERROR_TYPE
字段用于表示產生差異數據的原因,其取值范圍如下所示:
Miss:下游缺少數據。
Orphan:下游多數據。
Diff:上下游數據不一致。
刪除校驗任務
語法
CHECK REPLICA TABLE {`test_db`.`test_tb`} | {`test_db`} CANCEL;
刪除校驗任務后,將會同時清理校驗結果。
示例
mysql> CHECK REPLICA TABLE `testdb`.`testtb` CANCEL;
Query OK, 0 rows affected (0.05 sec)