前置條件
- 已使用TiUP部署DM集群:參考此前文章。
- 已添加使用DM-worker時所需的上下游數(shù)據(jù)庫用戶權(quán)限、以及各處理單元所需的用戶權(quán)限:參考如下表格。
上游數(shù)據(jù)庫 (MySQL/MariaDB) 用戶必須擁有以下權(quán)限:
權(quán)限 | 作用域 |
---|---|
SELECT | Tables |
RELOAD | Global |
REPLICATION SLAVE | Global |
REPLICATION CLIENT | Global |
下游數(shù)據(jù)庫 (TiDB) 用戶必須擁有以下權(quán)限:
權(quán)限 | 作用域 |
---|---|
SELECT | Tables |
INSERT | Tables |
UPDATE | Tables |
DELETE | Tables |
CREATE | Databases各拷,tables |
DROP | Databases,tables |
ALTER | Tables |
INDEX | Tables |
處理單元所需的最小權(quán)限:
處理單元 | 最小上游 (MySQL/MariaDB) 權(quán)限 | 最小下游 (TiDB) 權(quán)限 | 最小系統(tǒng)權(quán)限 |
---|---|---|---|
Relay log | REPLICATION SLAVE (讀取 binlog)闷营、REPLICATION CLIENT (show master status, show slave status) | 無 | 本地讀/寫磁盤 |
Dump | SELECT烤黍、RELOAD(獲取讀鎖將表數(shù)據(jù)刷到磁盤,進(jìn)行一些操作后傻盟,再釋放讀鎖對表進(jìn)行解鎖) | 無 | 本地寫磁盤 |
Load | 無 | SELECT(查詢 checkpoint 歷史)速蕊、CREATE(創(chuàng)建數(shù)據(jù)庫或表)、DELETE(刪除 checkpoint)娘赴、INSERT(插入 dump 數(shù)據(jù)) | 讀/寫本地文件 |
Binlog replication | REPLICATION SLAVE(讀 binlog)规哲、REPLICATION CLIENT (show master status, show slave status) | SELECT(顯示索引和列)、INSERT (DML)诽表、UPDATE (DML)唉锌、DELETE (DML)、CREATE(創(chuàng)建數(shù)據(jù)庫或表)关顷、DROP(刪除數(shù)據(jù)庫或表)糊秆、ALTER(修改表)武福、INDEX(創(chuàng)建或刪除索引) | 本地讀/寫磁盤 |
創(chuàng)建MySQL數(shù)據(jù)源
“小數(shù)據(jù)量”通常指MySQL 數(shù)據(jù)在 TB 級別以下议双。
如果是極小量數(shù)據(jù)(MB級別),還可以使用數(shù)據(jù)庫連接工具的功能直接導(dǎo)捉片。
一般而言平痰,受到表結(jié)構(gòu)索引數(shù)目等信息、硬件以及網(wǎng)絡(luò)環(huán)境影響伍纫,遷移速率在 30~50GB/h 不等宗雇。
首先,新建 source1.yaml 文件莹规,寫入以下內(nèi)容:
# 唯一命名赔蒲,不可重復(fù)。
source-id: "mysql-01"
# DM-worker 是否使用全局事務(wù)標(biāo)識符 (GTID) 拉取 binlog良漱。使用前提是上游 MySQL 已開啟 GTID 模式舞虱。若上游存在主從自動切換,則必須使用 GTID 模式母市。
enable-gtid: true
from:
host: "10.0.8.86" # 例如:172.16.10.81
user: "wenjie.wang"
password: "xxxxxx" # 支持但不推薦使用明文密碼矾兜,建議使用 dmctl encrypt 對明文密碼進(jìn)行加密后使用
port: 3306
然后使用 tiup dmctl 將數(shù)據(jù)源配置加載到 DM 集群中:
tiup dmctl --master-addr ${advertise-addr} operate-source create source1.yaml
該命令中的參數(shù)描述如下:
參數(shù) 描述
- --master-addr dmctl 要連接的集群的任意 DM-master 節(jié)點(diǎn)的 {advertise-addr},例如:172.16.10.71:8261
- operate-source create 向 DM 集群加載數(shù)據(jù)源
我們測試環(huán)境是:
cd /home/tidb/.tiup/bin
tiup dmctl --master-addr 10.0.8.86:8261 operate-source create /data/tidb/source1.yaml
可以看到輸出結(jié)果:
Starting component dmctl: /home/tidb/.tiup/components/dmctl/v8.1.1/dmctl/dmctl --master-addr 10.0.8.86:8261 operate-source create /data/tidb/source1.yaml
{
"result": true,
"msg": "",
"sources": [
{
"result": true,
"msg": "",
"source": "mysql-01",
"worker": "dm-10.0.8.86-8262"
}
]
}
創(chuàng)建遷移任務(wù)
新建 task1.yaml 文件
vim /data/tidb/task1.yaml
寫入以下內(nèi)容:
# 任務(wù)名患久,多個同時運(yùn)行的任務(wù)不能重名椅寺。
name: "test01"
# 任務(wù)模式浑槽,可設(shè)為
# full:只進(jìn)行全量數(shù)據(jù)遷移
# incremental: binlog 實(shí)時同步
# all: 全量 + binlog 遷移
task-mode: "all"
# 下游 TiDB 配置信息。
target-database:
host: "10.0.8.88" # 例如:172.16.10.83
port: 4000
user: "wenjie.wang"
password: "xxxxxx" # 支持但不推薦使用明文密碼返帕,建議使用 dmctl encrypt 對明文密碼進(jìn)行加密后使用
# 當(dāng)前數(shù)據(jù)遷移任務(wù)需要的全部上游 MySQL 實(shí)例配置桐玻。
mysql-instances:
-
# 上游實(shí)例或者復(fù)制組 ID。
source-id: "mysql-01"
# 需要遷移的庫名或表名的黑白名單的配置項(xiàng)名稱荆萤,用于引用全局的黑白名單配置畸冲,全局配置見下面的 `block-allow-list` 的配置。
block-allow-list: "listA"
# 黑白名單全局配置观腊,各實(shí)例通過配置項(xiàng)名引用邑闲。
block-allow-list:
listA: # 名稱
do-dbs: [pingcap", "test_collation"]
關(guān)于任務(wù)的更多配置項(xiàng),可以參考 DM 任務(wù)完整配置文件介紹梧油。
啟動任務(wù)
在你啟動數(shù)據(jù)遷移任務(wù)之前苫耸,建議使用 check-task 命令檢查配置是否符合 DM 的配置要求,以避免后期報(bào)錯儡陨。
tiup dmctl --master-addr ${advertise-addr} check-task task.yaml
我們測試環(huán)境是:
cd /home/tidb/.tiup/bin
tiup dmctl --master-addr 10.0.8.86:8261 check-task /data/tidb/task1.yaml
返回結(jié)果為:
Starting component dmctl: /home/tidb/.tiup/components/dmctl/v8.1.1/dmctl/dmctl --master-addr 10.0.8.86:8261 check-task /data/tidb/task1.yaml
{
"result": true,
"msg": "pre-check is passed. "
}
使用 tiup dmctl 執(zhí)行以下命令啟動數(shù)據(jù)遷移任務(wù)褪子。
tiup dmctl --master-addr ${advertise-addr} start-task task.yaml
該命令中的參數(shù)描述如下:
- --master-addr dmctl 要連接的集群的任意 DM-master 節(jié)點(diǎn)的 {advertise-addr},例如: 172.16.10.71:8261
- start-task 參數(shù)用于啟動數(shù)據(jù)遷移任務(wù)
如果任務(wù)啟動失敗骗村,可根據(jù)返回結(jié)果的提示進(jìn)行配置變更后執(zhí)行 start-task task.yaml 命令重新啟動任務(wù)嫌褪。遇到問題請參考故障及處理方法以及常見問題。
我們測試環(huán)境中執(zhí)行:
tiup dmctl --master-addr 10.0.8.86:8261 start-task /data/tidb/task1.yaml
測試環(huán)境由于數(shù)據(jù)量少胚股,很快完成遷移笼痛,返回結(jié)果為:
Starting component dmctl: /home/tidb/.tiup/components/dmctl/v8.1.1/dmctl/dmctl --master-addr 10.0.8.86:8261 start-task /data/tidb/task1.yaml
{
"result": true,
"msg": "",
"sources": [
{
"result": true,
"msg": "",
"source": "mysql-01",
"worker": "dm-10.0.8.86-8262"
}
],
"checkResult": "pre-check is passed. "
}
檢查目標(biāo)tidb數(shù)據(jù),已全部同步過來琅拌,如果collation為utf8mb3缨伊,則遷移后會變?yōu)閡tf8_bin,而utf8mb4則不會變进宝。
目標(biāo)tidb會新增兩個遷移相關(guān)的庫:
- dm_meta
- lightning_task_info
查看任務(wù)狀態(tài)
如需了解 DM 集群中是否存在正在運(yùn)行的遷移任務(wù)及任務(wù)狀態(tài)等信息刻坊,可使用 tiup dmctl 執(zhí)行 query-status 命令進(jìn)行查詢:
tiup dmctl --master-addr ${advertise-addr} query-status ${task-name}
關(guān)于查詢結(jié)果的詳細(xì)解讀,請參考查詢狀態(tài)党晋。
監(jiān)控任務(wù)與查看日志
(此步驟為非必要項(xiàng)谭胚。)
要查看遷移任務(wù)的歷史狀態(tài)以及更多的內(nèi)部運(yùn)行指標(biāo),可參考以下步驟未玻。
如果使用 TiUP 部署 DM 集群時灾而,正確部署了 Prometheus、Alertmanager 與 Grafana深胳,則使用部署時填寫的 IP 及端口進(jìn)入 Grafana绰疤,選擇 DM 的 Dashboard 查看 DM 相關(guān)監(jiān)控項(xiàng)。
DM 在運(yùn)行過程中舞终,DM-worker轻庆、DM-master 及 dmctl 都會通過日志輸出相關(guān)信息癣猾。各組件的日志目錄如下:
- DM-master 日志目錄:通過 DM-master 進(jìn)程參數(shù) --log-file設(shè)置纬向。如果使用 TiUP 部署 DM吼鱼,則日志目錄默認(rèn)位于 /dm-deploy/dm-master-8261/log/雁仲。
- DM-worker 日志目錄:通過 DM-worker 進(jìn)程參數(shù) --log-file 設(shè)置惋增。如果使用 TiUP 部署 DM,則日志目錄默認(rèn)位于 /dm-deploy/dm-worker-8262/log/暖释。