使用 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...