tidb之dm叢集跳過某個事務實踐
被動跳過 SQL 語句,參考官方文件
假設業務上可以接受下游 TiDB 不執行此 DDL 語句(即繼續保持原有的表結構),則可以透過使用 sql-skip 命令跳過該 DDL 語句以恢復遷移任務。操作步驟如下:
一:使用 query-error 獲取遷移出錯的 binlog event 的 position 資訊。
position 資訊可直接由 query-error 返回的 failedBinlogPosition 獲得。
本示例中的 position 為 mysql-bin|000001.000003:34642。
二:使用 sql-skip 預設一個 binlog event 跳過操作,該操作將在使用 resume-task 後遷移該 binlog event 到下游時生效。
» sql-skip --worker=127.0.0.1:8262 --binlog-pos=mysql-bin|000001.000003:34642 test
{ "result": true, "msg": "", "workers": [ { "result": true, "worker": "", "msg": "" } ]}
二:對應 DM-worker 節點中也可以看到類似如下日誌:
2018/12/28 11:17:51 operator.go:121: [info] [sql-operator] set a new operatoruuid: 6bfcf30f-2841-4d70-9a34-28d7082bdbd7, pos: (mysql-bin|000001.000003, 34642), op: SKIP, args:on replication unit
三:使用 resume-task 恢復之前出錯中斷的遷移任務。
» resume-task --worker=127.0.0.1:8262 test
{ "op": "Resume", "result": true, "msg": "", "workers": [ { "op": "Resume", "result": true, "worker": "127.0.0.1:8262", "msg": "" } ]}
四:對應 DM-worker 節點中也可以看到類似如下日誌:
2018/12/28 11:27:46 operator.go:158: [info] [sql-operator] binlog-pos (mysql-bin|000001.000003, 34642) matched,applying operator uuid: 6bfcf30f-2841-4d70-9a34-28d7082bdbd7, pos: (mysql-bin|000001.000003, 34642), op: SKIP, args:
五:使用 query-status 確認該任務的 stage 已經轉為 Running。
» query-status --worker=127.0.0.1:8262 test
六:使用 query-error 確認原錯誤資訊已不再存在。
»query-error --worker=127.0.0.1:8262 test
具體案例:
首先模擬出主鍵衝突的報錯,注意模擬的時候一定注意等你task執行一段時間後,再模擬,因為safe-mode: false # 設定為 true,則將來自上游的 `INSERT` 改寫為 `REPLACE`,將 `UPDATE` 改寫為 `DELETE` 與 `REPLACE`,保證在表結構中存在主鍵或唯一索引的條件下遷移資料時可以重複匯入 DML。在啟動或恢復增量複製任務的前 5 分鐘內 TiDB DM 會自動啟動 safe mode,這是這個原因所以當你啟動某個task_mode 為all的任務的時候,當全量同步完成後,切換到增量的前5分鐘內是safe-mode:true,這樣就不會有主鍵衝突的問題!所以需要過5分鐘後再模擬主鍵衝突!
然後透過 query-error檢視報錯的binlog點位!如下紅色部分所示:failedBinlogPosition": "binlog|000001.000025:166513224"
[tidb@tidb-monitor-01 kv]$ dmctl --master-addr 11.28.11.143:8261 query-error liuwenhe
{
"result": true,
"msg": "",
"workers": [
{
"result": true,
"worker": "11.28.11.147:8266",
"msg": "",
"subTaskError": [
{
"name": "liuwenhe",
"stage": "Paused",
"unit": "Sync",
"sync": {
"errors": [
{
"msg": "[code=10006:class=database:scope=not-set:level=high]execute statement failed: INSERT INTO `bre_tidb`.`bre_event_data` (`REQUEST_ID`,`BUSINESS_ID`,`SYSTEM_CODE`,`DECISION_NUM`,`LOGIN_TYPE`,`SOURCE_TYPE`,`PRODUCT_TYPE`,`CUST_CHANNEL_CODE`,`NODE_NAME`,`CUST_NO`,`PROD_NO`,`SUB_PROD_NO`,`type`,`ID_NO`,`PHONE`,`DATA_PATH`,`BLAZE_PACKAGE_NAME`,`EXPERIMENT_NO`,`BLAZE_SIGN`,`CREATE_DATE`,`CREATE_TIME`,`UPDATE_DATE`,`UPDATE_TIME`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?): Error 1062: Duplicate entry 'C011802110030080021' for key 'PRIMARY'",
"failedBinlogPosition": "binlog|000001.000025:166513224",
"errorSQL": "[tp: insert, sql: INSERT INTO `bre_tidb`.`bre_event_data` (`REQUEST_ID`,`BUSINESS_ID`,`SYSTEM_CODE`,`DECISION_NUM`,`LOGIN_TYPE`,`SOURCE_TYPE`,`PRODUCT_TYPE`,`CUST_CHANNEL_CODE`,`NODE_NAME`,`CUST_NO`,`PROD_NO`,`SUB_PROD_NO`,`type`,`ID_NO`,`PHONE`,`DATA_PATH`,`BLAZE_PACKAGE_NAME`,`EXPERIMENT_NO`,`BLAZE_SIGN`,`CREATE_DATE`,`CREATE_TIME`,`UPDATE_DATE`,`UPDATE_TIME`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?), args: [C011802110030080021 C011802110047862166 rms TransactionCheck AND001 DF bnh_product zhifubao Application 150000407304 101 \u003cnil\u003e \u003cnil\u003e 360733198610043678 18807972084 /ReportFile/2018/02/11/C011802110030080021.gz \u003cnil\u003e \u003cnil\u003e \u003cnil\u003e 20180211 181415 20180211 181415], key: C011802110030080021`bre_tidb`.`bre_event_data`, ddls: [], last_pos: (binlog|000001.000025, 166512691), current_pos: (binlog|000001.000025, 166513224), gtid:\u003cnil\u003e]"
}
]
}
}
],
"RelayError": {
"msg": ""
}
}
]
}
執行具體的sql-skip操作:
[tidb@tidb-monitor-01 kv]$ dmctl --master-addr 11.28.11.143:8261Welcome to dmctl
Release Version: v1.0.6
Git Commit Hash: eaf2683c05ab44143bfb286bfbbc3ba157c555cc
Git Branch: release-1.0
UTC Build Time: 2020-06-17 10:22:01
Go Version: go version go1.13 linux/amd64
» sql-skip --worker=11.28.11.147:8266 --binlog-pos="binlog|000001.000025:166513224" liuwenhe
{
"result": true,
"msg": "",
"workers": [
{
"result": true,
"worker": "",
"msg": ""
}
]
}
恢復處於Paused狀態的task:
» resume-task liuwenhe
{
"op": "Resume",
"result": true,
"msg": "",
"workers": [
{
"meta": {
"result": true,
"worker": "11.28.11.147:8266",
"msg": ""
},
"op": "Resume",
"logID": "4736"
}
]
}
再次檢視發現已經正常:
» query-status liuwenhe
{
"result": true,
"msg": "",
"workers": [
{
"result": true,
"worker": "11.28.11.147:8266",
"msg": "",
"subTaskStatus": [
{
"name": "liuwenhe",
"stage": "Running",
"unit": "Sync",
"result": null,
"unresolvedDDLLockID": "",
"sync": {
"totalEvents": "3",
"totalTps": "0",
"recentTps": "0",
"masterBinlog": "(binlog.000025, 292158424)",
"masterBinlogGtid": "78ad9491-9efa-11ea-b4dc-005056b3c9fc:1-27595888",
"syncerBinlog": "(binlog|000001.000025, 163696575)",
"syncerBinlogGtid": "",
"blockingDDLs": [
],
"unresolvedGroups": [
],
"synced": false
}
}
],
"relayStatus": {
"masterBinlog": "(binlog.000025, 292158424)",
"masterBinlogGtid": "78ad9491-9efa-11ea-b4dc-005056b3c9fc:1-27595888",
"relaySubDir": "78ad9491-9efa-11ea-b4dc-005056b3c9fc.000001",
"relayBinlog": "(binlog.000025, 292158424)",
"relayBinlogGtid": "78ad9491-9efa-11ea-b4dc-005056b3c9fc:1-27595888",
"relayCatchUpMaster": true,
"stage": "Running",
"result": null
},
"sourceID": "13-3323-8266"
}
]
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-2840117/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- tidb dm叢集修改某個dm-worker的儲存目錄TiDB
- tidb之dm叢集同步異常處理TiDB
- 記某百億級mongodb叢集資料過期效能優化實踐MongoDB優化
- 記某百億級mongodb叢集資料過期效能最佳化實踐MongoDB
- TiDB小型叢集部署實踐TiDB
- skip a transaction in goldengate(跳過一個事務OGG)Go
- DM8搭建MPP叢集
- DM 中 relay log 效能優化實踐丨TiDB 工具分享優化TiDB
- 【Docker】Docker三劍客實踐之部署叢集Docker
- goldengate跳過/提交一個未完成的事務Go
- Docker Swarm 叢集搭建實踐DockerSwarm
- influxDB叢集模式實踐UX模式
- RabbitMQ叢集運維實踐MQ運維
- rosedb 事務實踐ROS
- 大資料專案實踐(一)——之HDFS叢集配置大資料
- Redis叢集環境搭建實踐Redis
- TKE 叢集組建最佳實踐
- DM7搭建讀寫分離叢集
- kubernetes實踐之十八:叢集各模組之間的通訊
- Tidb 運維--叢集檢視的使用TiDB運維
- 滴滴 Elasticsearch 多叢集架構實踐Elasticsearch架構
- Redis叢集技術及Codis實踐Redis
- Redis叢集slot遷移改造實踐Redis
- Redis服務之叢集節點管理Redis
- Dubbo原始碼解析之服務叢集原始碼
- 微服務Consul系列之叢集搭建微服務
- kratos分散式事務實踐分散式
- TiDB應用實踐TiDB
- 京東雲Kubernetes叢集最佳實踐
- 容器雲平臺物理叢集配置實踐
- Proxmox VE 超融合叢集實踐真傳
- 騰訊大規模Hadoop叢集實踐Hadoop
- Percolator 和 TiDB 事務演算法TiDB演算法
- PingCAP Clinic 服務:貫穿雲上雲下的 TiDB 叢集診斷服務PingCAPTiDB
- 事務管理最佳實踐全面解析
- 微服務實踐Aspire專案釋出到遠端k8s叢集微服務K8S
- TIDB DM資料同步step by stepTiDB
- DM資料庫操作實踐資料庫