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優化
- TiDB小型叢集部署實踐TiDB
- 記某百億級mongodb叢集資料過期效能最佳化實踐MongoDB
- DM 中 relay log 效能優化實踐丨TiDB 工具分享優化TiDB
- DM8搭建MPP叢集
- influxDB叢集模式實踐UX模式
- RabbitMQ叢集運維實踐MQ運維
- Docker Swarm 叢集搭建實踐DockerSwarm
- 從零部署TiDB叢集TiDB
- rosedb 事務實踐ROS
- kubernetes實踐之十八:叢集各模組之間的通訊
- 大資料專案實踐(一)——之HDFS叢集配置大資料
- TKE 叢集組建最佳實踐
- Redis叢集環境搭建實踐Redis
- Tidb 運維--叢集檢視的使用TiDB運維
- 微服務Consul系列之叢集搭建微服務
- DM7搭建讀寫分離叢集
- DM8配置讀寫分離叢集
- 京東雲Kubernetes叢集最佳實踐
- 滴滴 Elasticsearch 多叢集架構實踐Elasticsearch架構
- Kubernetes叢集健康檢查最佳實踐
- Redis叢集slot遷移改造實踐Redis
- Kubernetes 叢集無損升級實踐
- 三艾雲 Kubernetes 叢集最佳實踐
- PingCAP Clinic 服務:貫穿雲上雲下的 TiDB 叢集診斷服務PingCAPTiDB
- TiDB應用實踐TiDB
- kubernetes實踐之十五:Kubernetes叢集主要啟動引數說明
- Dubbo原始碼解析之服務叢集原始碼
- Redis服務之叢集節點管理Redis
- kratos分散式事務實踐分散式
- hadoop叢集搭建及程式設計實踐Hadoop程式設計
- 利用 Kubeadm部署 Kubernetes 1.13.1 叢集實踐錄
- 容器雲平臺物理叢集配置實踐
- Proxmox VE 超融合叢集實踐真傳
- 美團點評Kubernetes叢集管理實踐
- 分散式、微服務、叢集,個人理解分散式微服務