使用DM遷移MySQL小量數(shù)據(jù)到TiDB

前置條件

  • 已使用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/暖释。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坏瞄,一起剝皮案震驚了整個濱河市扬跋,隨后出現(xiàn)的幾起案子桩砰,更是在濱河造成了極大的恐慌拓春,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亚隅,死亡現(xiàn)場離奇詭異硼莽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)煮纵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門懂鸵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人行疏,你說我怎么就攤上這事匆光。” “怎么了酿联?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵终息,是天一觀的道長。 經(jīng)常有香客問我货葬,道長采幌,這世上最難降的妖魔是什么劲够? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任震桶,我火速辦了婚禮,結(jié)果婚禮上征绎,老公的妹妹穿的比我還像新娘蹲姐。我一直安慰自己,他們只是感情好人柿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布柴墩。 她就那樣靜靜地躺著,像睡著了一般凫岖。 火紅的嫁衣襯著肌膚如雪江咳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天哥放,我揣著相機(jī)與錄音歼指,去河邊找鬼爹土。 笑死,一個胖子當(dāng)著我的面吹牛踩身,可吹牛的內(nèi)容都是我干的胀茵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼挟阻,長吁一口氣:“原來是場噩夢啊……” “哼琼娘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起附鸽,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤脱拼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后坷备,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挪拟,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年击你,在試婚紗的時候發(fā)現(xiàn)自己被綠了玉组。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡丁侄,死狀恐怖惯雳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鸿摇,我是刑警寧澤石景,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站拙吉,受9級特大地震影響潮孽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜筷黔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一往史、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧佛舱,春花似錦椎例、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肆捕,卻和暖如春刷晋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工眼虱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留或舞,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓蒙幻,卻偏偏與公主長得像映凳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子邮破,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容