tidb和mysql導資料 TIDB資料遷移

2021-10-18 17:38:48 字數 4506 閱讀 8438

使用 mydumper/loader 全量匯出匯入資料

將 mysql 的資料遷移到 tidb,tidb完全相容 mysql 協議和生態,遷移便捷

使用官方提供的遷移工具

wget

wget

# 檢查檔案完整性,返回 ok 則正確

sha256sum -c tidb-enterprise-tools-latest-linux-amd64.sha256

# 解開壓縮包

tar xzf tidb-enterprise-tools-latest-linux-amd64.tar.gz

cd tidb-enterprise-tools-latest-linux-amd64

從 mysql 匯出資料

使用 mydumper 從 mysql 匯出資料,如下:

./bin/mydumper -h 172.16.93.68 -p 3306 -u root -p 'password' -t 16 -f 64 -b 510cto --skip-tz-utc -o /var/test

使用 -b 510cto 這個 database 操作,用 -t t1,t2 表明只匯出 t1,t2 兩張表。

-t 16 表明使用 16 個執行緒去匯出資料。-f 64 是將實際的 table 切分成多大的 chunk,這裡就是 64mb 乙個 chunk。

可以了解下 mydumper 的引數配置

向 tidb 匯入資料

使用 loader 將之前匯出的資料匯入到 tidb

./bin/loader -h 172.16.100.129 -u root -p 4000 -t 32 -d /var/test

匯入成功之後,我們可以用 mysql 官方客戶端進入 tidb,檢視:

mysql -h 172.16.100.129 -p4000 -uroot

mysql> show tables;

| tables_in_test |

| t1 |

| t2 |

mysql> select * from t1;

| id | age |

| 1 | 1 |

| 2 | 2 |

| 3 | 3 |

mysql> select * from t2;

| id | name |

| 1 | a |

| 2 | b |

| 3 | c |

使用 syncer 增量匯入資料

獲取同步 position

mydumper 匯出的資料目錄裡面有乙個 metadata 檔案,裡面就包含了我們所需的 position 資訊。

[root@sync ~]# cat /var/test/metadata

started dump at: 2018-09-09 10:48:10

show master status:

log: mysql-bin.000003

pos: 930143241

gtid:

finished dump at: 2018-09-09 10:48:11

我們將 position 相關的資訊儲存到乙個 syncer.meta 檔案裡面,用於 syncer 的同步:

[root@sync /]# vi syncer.meta

binlog-name = "mysql-bin.000003"

binlog-pos = 930143241

binlog-gtid =

注意:syncer.meta 只需要第一次使用的時候配置,後續 syncer 同步新的 binlog 之後會自動將其更新到最新的 position。

設定 syncer 引數

[root@sync tidb-enterprise-tools-latest-linux-amd64]# vi config.toml

log-level = "info"

server-id = 101

## meta 檔案位址

meta = "./syncer.meta"

worker-count = 16

batch = 10

## pprof 除錯位址, prometheus 也可以通過該位址拉取 syncer metrics

## 將 127.0.0.1 修改為相應主機 ip 位址

status-addr = "127.0.0.1:10086"

## 跳過 ddl 或者其他語句,格式為 **字首完全匹配**,如: `drop table abc`,則至少需要填入`drop table`.

# skip-sqls = ["alter user", "create user"]

## 在使用 route-rules 功能後,

## replicate-do-db & replicate-ignore-db 匹配合表之後(target-schema & target-table )數值

## 優先順序關係: replicate-do-db --> replicate-do-table --> replicate-ignore-db --> replicate-ignore-table

## 指定要同步資料庫名;支援正則匹配,表示式語句必須以 `~` 開始

#replicate-do-db = ["~^b.*","s1"]

## 指定要同步的 db.table 表

## db-name 與 tbl-name 不支援 `db-name ="dbname,dbname2"` 格式

#[[replicate-do-table]]

#db-name ="dbname"

#tbl-name = "table-name"

#[[replicate-do-table]]

#db-name ="dbname1"

#tbl-name = "table-name1"

## 指定要同步的 db.table 表;支援正則匹配,表示式語句必須以 `~` 開始

#[[replicate-do-table]]

#db-name ="test"

#tbl-name = "~^a.*"

## 指定**忽略**同步資料庫;支援正則匹配,表示式語句必須以 `~` 開始

#replicate-ignore-db = ["~^b.*","s1"]

## 指定**忽略**同步資料庫

## db-name & tbl-name 不支援 `db-name ="dbname,dbname2"` 語句格式

#[[replicate-ignore-table]]

#db-name = "your_db"

#tbl-name = "your_table"

## 指定要**忽略**同步資料庫名;支援正則匹配,表示式語句必須以 `~` 開始

#[[replicate-ignore-table]]

#db-name ="test"

#tbl-name = "~^a.*"

# sharding 同步規則,採用 wildcharacter

# 1. 星號字元 (*) 可以匹配零個或者多個字元,

# 例子, doc* 匹配 doc 和 document, 但是和 dodo 不匹配;

# 星號只能放在 pattern 結尾,並且乙個 pattern 中只能有乙個

# 2. 問號字元 (?) 匹配任一乙個字元

#[[route-rules]]

#pattern-schema = "route_*"

#pattern-table = "abc_*"

#target-schema = "route"

#target-table = "abc"

#[[route-rules]]

#pattern-schema = "route_*"

#pattern-table = "xyz_*"

#target-schema = "route"

#target-table = "xyz"

[from]

host = "172.16.93.68"

user = "root"

password = "passwd"

port = 3306

[to]

host = "172.16.100.12"

user = "root"

password = ""

port = 4000

啟動 syncer:

注:可以直接放在後台執行

./bin/syncer -config config.toml

2018/09/09 15:22:01 binlogsyncer.go:552: [info] rotate to (mysql-bin.000003, 1280)

2018/09/09 15:22:01 syncer.go:549: [info] rotate binlog to (mysql-bin.000003, 1280)

注:保障機器不停機執行而且任務不能結束

在 mysql 插入新的資料,然後登入tidb檢視,syncer 每隔 30s 會輸出當前的同步統計

mysql導資料小結

查詢結果匯出 指令碼中執行 方式一 mysql h u p p 3306 d db name e select from mblog info order by mid desc limit 10 data.txt 方式二 mysql h u p p 3306 d db name test.sql ...

Mysql資料遷移到TIDB詳解

我從業16年來,使用了太多的資料庫 rdbms nosql newsql 首先我說一下資料庫的變遷和發展歷史 以 mysql 為例剛開始時,它是乙個單機模式,但是隨著資料庫的資料量的增加及使用者對效能要求的提高,它的儲存容量和效能都遇到了瓶頸。這些需求催生了新的解決方案,那就是 mysql 主從模式...

canal資料同步mysql到tidb

canal進行資料同步 將mysql資料同步至tidb,方便其他業務和資料的統計 遇到的坑 資料檢查是乙個問題 兩台機器搭建canal server集群遇到問題 存量資料更新時 xorm中對於xorm created和update資料會進行當前時間的替換 監聽binlog進行更新,資料庫update...