天天看點

TiDB 資料庫的備份與恢複

本文檔将詳細介紹如何對 TiDB 進行全量備份與恢複。增量備份與恢複可使用 TiDB Binlog。

這裡我們假定 TiDB 服務資訊如下:

Name Address Port User Password
TiDB 127.0.0.1 4000 root *

在這個備份恢複過程中,我們會用到下面的工具:

  • mydumper 從 TiDB 導出資料
  • loader 導入資料到 TiDB

下載下傳 TiDB 工具集 (Linux)

# 下載下傳 tool 壓縮包wget http://download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.tar.gzwget http://download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.sha256# 檢查檔案完整性,傳回 ok 則正确sha256sum -c tidb-enterprise-tools-latest-linux-amd64.sha256# 解開壓縮包tar -xzf tidb-enterprise-tools-latest-linux-amd64.tar.gzcd tidb-enterprise-tools-latest-linux-amd64           

複制

使用

mydumper

/

loader

全量備份恢複資料

mydumper

是一個強大的資料備份工具,具體可以參考 https://github.com/maxbube/mydumper。

可使用

mydumper

從 TiDB 導出資料進行備份,然後用

loader

将其導入到 TiDB 裡面進行恢複。

注意:

必須使用企業版工具集包的

mydumper

,不要使用你的作業系統的包管理工具提供的

mydumper

mydumper

的上遊版本并不能對 TiDB 進行正确處理 (#155)。由于使用

mysqldump

進行資料備份和恢複都要耗費許多時間,這裡也并不推薦。

mydumper

/

loader

全量備份恢複最佳實踐

為了快速的備份恢複資料 (特别是資料量巨大的庫), 可以參考以下建議:

  • 使用 mydumper 導出來的資料檔案盡可能的小, 最好不要超過 64M, 可以設定參數 -F 64
  • loader的

    -t

    參數可以根據 tikv 的執行個體個數以及負載進行評估調整,例如 3個 tikv 的場景, 此值可以設為

    3 *(1 ~ n)

    ;當 tikv 負載過高,loader 以及 tidb 日志中出現大量

    backoffer.maxSleep 15000ms is exceeded

    可以适當調小該值,當 tikv 負載不是太高的時候,可以适當調大該值。

資料恢複示例及相關的配置:

  • mydumper 導出後總資料量 214G,單表 8 列,20 億行資料
  • 叢集拓撲
    • TIKV * 12
    • TIDB * 4
    • PD * 3
  • mydumper -F 設定為 16, loader -t 參數 64

結果:導入時間 11 小時左右,19.4 G/小時

從 TiDB 備份資料

我們使用

mydumper

從 TiDB 備份資料,如下:

./bin/mydumper -h 127.0.0.1 -P 4000 -u root -t 16 -F 64 -B test -T t1,t2 --skip-tz-utc -o ./var/test           

複制

上面,我們使用

-B test

表明是對

test

這個 database 操作,然後用

-T t1,t2

表明隻導出

t1

t2

兩張表。

-t 16

表明使用 16 個線程去導出資料。

-F 64

是将實際的 table 切分成多大的 chunk,這裡就是 64MB 一個 chunk。

--skip-tz-utc

添加這個參數忽略掉 TiDB 與導資料的機器之間時區設定不一緻的情況,禁止自動轉換。

向 TiDB 恢複資料

我們使用

loader

将之前導出的資料導入到 TiDB,完成恢複操作。Loader 的下載下傳和具體的使用方法見 Loader 使用文檔

./bin/loader -h 127.0.0.1 -u root -P 4000 -t 32 -d ./var/test           

複制

導入成功之後,我們可以用 MySQL 官方用戶端進入 TiDB,檢視:

 複制代碼mysql -h127.0.0.1 -P4000 -urootmysql> 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    |+-++           

複制