From bb0caa5e101a859f9799451a904577c18386cc32 Mon Sep 17 00:00:00 2001 From: CaitinChen Date: Fri, 12 Oct 2018 13:39:13 +0800 Subject: [PATCH 1/9] *: add mydumper --- FAQ.md | 14 ++++++------ README.md | 1 + op-guide/backup-restore.md | 4 ++-- tools/mydumper.md | 47 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 9 deletions(-) create mode 100644 tools/mydumper.md diff --git a/FAQ.md b/FAQ.md index 60b6678a4186..49c071c0aedf 100755 --- a/FAQ.md +++ b/FAQ.md @@ -565,7 +565,7 @@ TiKV 使用了 RocksDB 的 Column Family (CF) 特性,KV 数据最终存储在 - default CF 存储的是真正的数据,与其对应的参数位于 [rocksdb.defaultcf] 项中。 - write CF 存储的是数据的版本信息(MVCC)、索引、小表相关的数据,相关的参数位于 [rocksdb.writecf] 项中。 - lock CF 存储的是锁信息,系统使用默认参数。 -- Raft Rocksdb 实例存储 Raft log。default CF 主要存储的是 Raft log,与其对应的参数位于 [raftdb.defaultcf] 项中。 +- Raft RocksDB 实例存储 Raft log。default CF 主要存储的是 Raft log,与其对应的参数位于 [raftdb.defaultcf] 项中。 - 每个 CF 都有单独的 Block-cache,用于缓存数据块,加速 RocksDB 的读取速度,Block-cache 的大小通过参数 `block-cache-size` 控制,`block-cache-size` 越大,能够缓存的热点数据越多,对读取操作越有利,同时占用的系统内存也会越多。 - 每个 CF 有各自的 Write-buffer,大小通过 `write-buffer-size` 控制。 @@ -656,7 +656,7 @@ TiDB 设计的目标就是针对 MySQL 单台容量限制而被迫做的分库 #### 3.6.1 TiDB 主要备份方式? -目前 TiDB 主要依赖 mydumper 逻辑导出进行备份,具体可以参考 [https://github.com/maxbube/mydumper](https://github.com/maxbube/mydumper),虽然 TiDB 也支持使用 MySQL 官方的 mysqldump 工具来进行数据的备份恢复工作,但相比于 mydumper/loader,性能会慢很多,大量数据的备份恢复会花费很多时间,这里我们并不推荐。 +目前,推荐的备份方式是使用 [PingCAP fork of mydumper](tools/mydumper.md)。尽管 TiDB 也支持使用 MySQL 官方工具 `mysqldump` 进行数据备份、恢复,但其性能低于 [`mydumper`](tools/mydumper.md)/[`loader`](tools/loader.md),并且该工具备份、恢复大量数量时,要耗费更多时间。 使用 mydumper 导出来的数据文件尽可能的小, 最好不要超过 64M, 可以设置参数 -F 64; @@ -666,14 +666,14 @@ loader的 -t 参数可以根据 TiKV 的实例个数以及负载进行评估调 ### 4.1 全量数据导出导入 -#### 4.1.1 Mydumper 工具 +#### 4.1.1 Mydumper -具体可以参考 [https://github.com/maxbube/mydumper](https://github.com/maxbube/mydumper)。 +参见 [mydumper Instructions](tools/mydumper.md)。 -#### 4.1.2 Loader 工具 - -具体可以参考 [https://www.pingcap.com/docs-cn/tools/loader/](tools/loader.md)。 +#### 4.1.2 Loader +参见 [Loader Instructions](tools/loader.md)。 + #### 4.1.3 如何将一个运行在 MySQL 上的应用迁移到 TiDB 上? TiDB 支持绝大多数 MySQL 语法,一般不需要修改代码。我们提供了一个[检查工具](https://github.com/pingcap/tidb-tools/tree/master/checker),用于检查 MySQL 中的 Schema 是否和 TiDB 兼容。 diff --git a/README.md b/README.md index a877e4669d16..6eb45662e242 100755 --- a/README.md +++ b/README.md @@ -111,6 +111,7 @@ - [故障诊断](trouble-shooting.md) + TiDB 周边工具 - [Syncer](tools/syncer.md) + - [mydumper](tools/mydumper.md) - [Loader](tools/loader.md) - [TiDB-Binlog](tools/tidb-binlog-kafka.md) - [PD Control](tools/pd-control.md) diff --git a/op-guide/backup-restore.md b/op-guide/backup-restore.md index 10614b4bcfc0..e058afc2aa57 100644 --- a/op-guide/backup-restore.md +++ b/op-guide/backup-restore.md @@ -38,9 +38,9 @@ cd tidb-enterprise-tools-latest-linux-amd64 `mydumper` 是一个强大的数据备份工具,具体可以参考 [https://github.com/maxbube/mydumper](https://github.com/maxbube/mydumper)。 -我们使用 `mydumper` 从 TiDB 导出数据进行备份,然后用 `loader` 将其导入到 TiDB 里面进行恢复。 +可使用 [`mydumper`](../tools/mydumper.md) 从 TiDB 导出数据进行备份,然后用 [`loader`](../tools/loader.md) 将其导入到 TiDB 里面进行恢复。 -> **注意**:虽然 TiDB 也支持使用 MySQL 官方的 `mysqldump` 工具来进行数据的备份恢复工作,但相比于 `mydumper` / `loader`,性能会慢很多,大量数据的备份恢复会花费很多时间,这里我们并不推荐。 +> **注意**:必须使用 Enterprise Tools package 的 `mydumper`,不要使用你的操作系统的 package manager 提供的 `mydumper`。`mydumper` 的上游版本并不能正确对 TiDB 进行处理 ([#155](https://github.com/maxbube/mydumper/pull/155))。由于使用 `mydumper` 进行数据备份和恢复都要耗费许多时间,这里也并不推荐。 ### `mydumper`/`loader` 全量备份恢复最佳实践 diff --git a/tools/mydumper.md b/tools/mydumper.md new file mode 100644 index 000000000000..9f51145de307 --- /dev/null +++ b/tools/mydumper.md @@ -0,0 +1,47 @@ +--- +title: mydumper 使用文档 +summary: 使用 mydumper 从 TiDB 导出数据。 +category: tools +--- + +# mydumper 使用文档 + +## mydumper 简介 + +`mydumper` 是 [mydumper](https://github.com/maxbube/mydumper) 的 fork 项目,并添加了一些针对 TiDB 的功能。推荐使用此工具对 TiDB 进行逻辑备份。 + +[下载 Binary](http://download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.tar.gz)。 + +## 相比于普通的 mydumper,此工具有哪些改进之处? + ++ 使用 `tidb_snapshot` 而非 `FLUSH TABLES WITH READ LOCK` 提供备份一致性 + ++ `INSERT` 语句中包含隐藏的 `_tidb_rowid` 列 + ++ 允许 `tidb_snapshot` 为 [configurable](../op-guide/history-read.md#how-tidb-reads-data-from-history-versions) (即备份之前的数据) + +### 新添参数 + +``` + -z, --tidb-snapshot: Set the tidb_snapshot to be used for the backup. + Default: NOW()-INTERVAL 1 SECOND. + Accepts either a TSO or valid datetime. For example: -z "2016-10-08 16:45:26" +``` + +### 使用举例 + +命令行参数: + +``` +./bin/mydumper -h 127.0.0.1 -u root -P 4000 +``` + +## FAQ + +### PingCAP 的 mydumper 的源码是否可获取? + +PingCAP 的 mydumper 源码 [位于 GitHub](https://github.com/pingcap/mydumper)。 + +### 是否计划未来让 PingCAP 的 mydumper 对上游的 mydumper 生效? + +是的,PingCAP 团队计划让此 mydumper 对上游的 mydumper 生效。参见 [PR #155](https://github.com/maxbube/mydumper/pull/155). \ No newline at end of file From 0d6c00379d903e13a3e3ea3576ffaa968819ff2e Mon Sep 17 00:00:00 2001 From: Caitin <34535727+CaitinChen@users.noreply.github.com> Date: Tue, 16 Oct 2018 15:25:00 +0800 Subject: [PATCH 2/9] address comments --- FAQ.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/FAQ.md b/FAQ.md index 49c071c0aedf..f86a6ffdc193 100755 --- a/FAQ.md +++ b/FAQ.md @@ -656,11 +656,11 @@ TiDB 设计的目标就是针对 MySQL 单台容量限制而被迫做的分库 #### 3.6.1 TiDB 主要备份方式? -目前,推荐的备份方式是使用 [PingCAP fork of mydumper](tools/mydumper.md)。尽管 TiDB 也支持使用 MySQL 官方工具 `mysqldump` 进行数据备份、恢复,但其性能低于 [`mydumper`](tools/mydumper.md)/[`loader`](tools/loader.md),并且该工具备份、恢复大量数量时,要耗费更多时间。 +目前,推荐的备份方式是使用 [PingCAP fork 的 mydumper](tools/mydumper.md)。尽管 TiDB 也支持使用 MySQL 官方工具 `mysqldump` 进行数据备份、恢复,但其性能低于 [`mydumper`](tools/mydumper.md)/[`loader`](tools/loader.md),并且该工具备份、恢复大量数量时,要耗费更多时间。 使用 mydumper 导出来的数据文件尽可能的小, 最好不要超过 64M, 可以设置参数 -F 64; -loader的 -t 参数可以根据 TiKV 的实例个数以及负载进行评估调整,例如 3 个 TiKV 的场景, 此值可以设为 3 * (1 ~ n),当 TiKV 负载过高,loader 以及 TiDB 日志中出现大量 `backoffer.maxSleep 15000ms is exceeded` 可以适当调小该值,当 TiKV 负载不是太高的时候,可以适当调大该值。 +loader 的 -t 参数可以根据 TiKV 的实例个数以及负载进行评估调整,例如 3 个 TiKV 的场景, 此值可以设为 3 * (1 ~ n),当 TiKV 负载过高,loader 以及 TiDB 日志中出现大量 `backoffer.maxSleep 15000ms is exceeded` 可以适当调小该值,当 TiKV 负载不是太高的时候,可以适当调大该值。 ## 四、数据、流量迁移 @@ -668,11 +668,11 @@ loader的 -t 参数可以根据 TiKV 的实例个数以及负载进行评估调 #### 4.1.1 Mydumper -参见 [mydumper Instructions](tools/mydumper.md)。 +参见 [mydumper 使用文档](tools/mydumper.md)。 #### 4.1.2 Loader -参见 [Loader Instructions](tools/loader.md)。 +参见 [Loader 使用文档](tools/loader.md)。 #### 4.1.3 如何将一个运行在 MySQL 上的应用迁移到 TiDB 上? From 1b0f263285a387ea851dc7b8568abe2712db58b3 Mon Sep 17 00:00:00 2001 From: Caitin <34535727+CaitinChen@users.noreply.github.com> Date: Tue, 16 Oct 2018 15:52:01 +0800 Subject: [PATCH 3/9] update wording --- op-guide/backup-restore.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op-guide/backup-restore.md b/op-guide/backup-restore.md index e058afc2aa57..b4ed85229df5 100644 --- a/op-guide/backup-restore.md +++ b/op-guide/backup-restore.md @@ -40,7 +40,7 @@ cd tidb-enterprise-tools-latest-linux-amd64 可使用 [`mydumper`](../tools/mydumper.md) 从 TiDB 导出数据进行备份,然后用 [`loader`](../tools/loader.md) 将其导入到 TiDB 里面进行恢复。 -> **注意**:必须使用 Enterprise Tools package 的 `mydumper`,不要使用你的操作系统的 package manager 提供的 `mydumper`。`mydumper` 的上游版本并不能正确对 TiDB 进行处理 ([#155](https://github.com/maxbube/mydumper/pull/155))。由于使用 `mydumper` 进行数据备份和恢复都要耗费许多时间,这里也并不推荐。 +> **注意**:必须使用企业版工具集包 的 `mydumper`,不要使用你的操作系统的包管理工具提供的 `mydumper`。`mydumper` 的上游版本并不能正确对 TiDB 进行处理 ([#155](https://github.com/maxbube/mydumper/pull/155))。由于使用 `mysqldump` 进行数据备份和恢复都要耗费许多时间,这里也并不推荐。 ### `mydumper`/`loader` 全量备份恢复最佳实践 From 27bbb53df03a645a424abe26b59b4aa487c68828 Mon Sep 17 00:00:00 2001 From: Caitin <34535727+CaitinChen@users.noreply.github.com> Date: Tue, 16 Oct 2018 16:15:26 +0800 Subject: [PATCH 4/9] Address comments --- tools/mydumper.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/mydumper.md b/tools/mydumper.md index 9f51145de307..2bdcb8fa9213 100644 --- a/tools/mydumper.md +++ b/tools/mydumper.md @@ -18,7 +18,7 @@ category: tools + `INSERT` 语句中包含隐藏的 `_tidb_rowid` 列 -+ 允许 `tidb_snapshot` 为 [configurable](../op-guide/history-read.md#how-tidb-reads-data-from-history-versions) (即备份之前的数据) ++ [允许设置](../op-guide/history-read.md#操作流程) `tidb_snapshot` 的值(即可备份不同时间点的数据) ### 新添参数 @@ -42,6 +42,6 @@ category: tools PingCAP 的 mydumper 源码 [位于 GitHub](https://github.com/pingcap/mydumper)。 -### 是否计划未来让 PingCAP 的 mydumper 对上游的 mydumper 生效? +### 未来是否计划让 PingCAP 对 mydumper 的改动合并到上游? -是的,PingCAP 团队计划让此 mydumper 对上游的 mydumper 生效。参见 [PR #155](https://github.com/maxbube/mydumper/pull/155). \ No newline at end of file +是的,PingCAP 团队计划让此 mydumper 对上游的 mydumper 生效。参见 [PR #155](https://github.com/maxbube/mydumper/pull/155). From 4b831f9b6f58f38bdd95654d64e7288cbfe9ef74 Mon Sep 17 00:00:00 2001 From: Caitin <34535727+CaitinChen@users.noreply.github.com> Date: Tue, 16 Oct 2018 17:34:46 +0800 Subject: [PATCH 5/9] Address a comment --- tools/mydumper.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/mydumper.md b/tools/mydumper.md index 2bdcb8fa9213..09a4be27e63e 100644 --- a/tools/mydumper.md +++ b/tools/mydumper.md @@ -23,9 +23,9 @@ category: tools ### 新添参数 ``` - -z, --tidb-snapshot: Set the tidb_snapshot to be used for the backup. - Default: NOW()-INTERVAL 1 SECOND. - Accepts either a TSO or valid datetime. For example: -z "2016-10-08 16:45:26" + -z, --tidb-snapshot: 设置 tidb_snapshot 用于备份 + 默认值:NOW()-INTERVAL 1 SECOND + 此参数可设为 TSO 时间或有效的 datetime 时间。例如:-z "2016-10-08 16:45:26" ``` ### 使用举例 From 126c1316bea3759a4d8046476204582b5f47e758 Mon Sep 17 00:00:00 2001 From: Caitin <34535727+CaitinChen@users.noreply.github.com> Date: Thu, 18 Oct 2018 15:35:06 +0800 Subject: [PATCH 6/9] Update wording --- op-guide/backup-restore.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op-guide/backup-restore.md b/op-guide/backup-restore.md index b4ed85229df5..3549ab66eec7 100644 --- a/op-guide/backup-restore.md +++ b/op-guide/backup-restore.md @@ -40,7 +40,7 @@ cd tidb-enterprise-tools-latest-linux-amd64 可使用 [`mydumper`](../tools/mydumper.md) 从 TiDB 导出数据进行备份,然后用 [`loader`](../tools/loader.md) 将其导入到 TiDB 里面进行恢复。 -> **注意**:必须使用企业版工具集包 的 `mydumper`,不要使用你的操作系统的包管理工具提供的 `mydumper`。`mydumper` 的上游版本并不能正确对 TiDB 进行处理 ([#155](https://github.com/maxbube/mydumper/pull/155))。由于使用 `mysqldump` 进行数据备份和恢复都要耗费许多时间,这里也并不推荐。 +> **注意**:必须使用企业版工具集包的 `mydumper`,不要使用你的操作系统的包管理工具提供的 `mydumper`。`mydumper` 的上游版本并不能对 TiDB 进行正确处理 ([#155](https://github.com/maxbube/mydumper/pull/155))。由于使用 `mysqldump` 进行数据备份和恢复都要耗费许多时间,这里也并不推荐。 ### `mydumper`/`loader` 全量备份恢复最佳实践 From 5f58fcac59e20d77f6205669e39278b64331de84 Mon Sep 17 00:00:00 2001 From: Caitin <34535727+CaitinChen@users.noreply.github.com> Date: Thu, 18 Oct 2018 15:36:27 +0800 Subject: [PATCH 7/9] Update wording --- tools/mydumper.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/mydumper.md b/tools/mydumper.md index 09a4be27e63e..125b0568a061 100644 --- a/tools/mydumper.md +++ b/tools/mydumper.md @@ -22,7 +22,7 @@ category: tools ### 新添参数 -``` +```bash -z, --tidb-snapshot: 设置 tidb_snapshot 用于备份 默认值:NOW()-INTERVAL 1 SECOND 此参数可设为 TSO 时间或有效的 datetime 时间。例如:-z "2016-10-08 16:45:26" @@ -32,7 +32,7 @@ category: tools 命令行参数: -``` +```bash ./bin/mydumper -h 127.0.0.1 -u root -P 4000 ``` @@ -44,4 +44,4 @@ PingCAP 的 mydumper 源码 [位于 GitHub](https://github.com/pingcap/mydumper) ### 未来是否计划让 PingCAP 对 mydumper 的改动合并到上游? -是的,PingCAP 团队计划让此 mydumper 对上游的 mydumper 生效。参见 [PR #155](https://github.com/maxbube/mydumper/pull/155). +是的,PingCAP 团队计划将对 mydumper 的改动合并到上游。参见 [PR #155](https://github.com/maxbube/mydumper/pull/155). From 700d8f84ac98682b67d7c3e333cac1e5c0576d9b Mon Sep 17 00:00:00 2001 From: Caitin <34535727+CaitinChen@users.noreply.github.com> Date: Thu, 18 Oct 2018 15:37:47 +0800 Subject: [PATCH 8/9] Remove blank lines --- tools/mydumper.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/mydumper.md b/tools/mydumper.md index 125b0568a061..ba28ff53f94b 100644 --- a/tools/mydumper.md +++ b/tools/mydumper.md @@ -15,9 +15,7 @@ category: tools ## 相比于普通的 mydumper,此工具有哪些改进之处? + 使用 `tidb_snapshot` 而非 `FLUSH TABLES WITH READ LOCK` 提供备份一致性 - + `INSERT` 语句中包含隐藏的 `_tidb_rowid` 列 - + [允许设置](../op-guide/history-read.md#操作流程) `tidb_snapshot` 的值(即可备份不同时间点的数据) ### 新添参数 From 9a5f44c90e2e715adec31658dd446e7bcd49d7e9 Mon Sep 17 00:00:00 2001 From: Lilian Lee Date: Fri, 19 Oct 2018 16:11:15 +0800 Subject: [PATCH 9/9] tools: update period --- tools/mydumper.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/mydumper.md b/tools/mydumper.md index ba28ff53f94b..aa85a4455aca 100644 --- a/tools/mydumper.md +++ b/tools/mydumper.md @@ -42,4 +42,4 @@ PingCAP 的 mydumper 源码 [位于 GitHub](https://github.com/pingcap/mydumper) ### 未来是否计划让 PingCAP 对 mydumper 的改动合并到上游? -是的,PingCAP 团队计划将对 mydumper 的改动合并到上游。参见 [PR #155](https://github.com/maxbube/mydumper/pull/155). +是的,PingCAP 团队计划将对 mydumper 的改动合并到上游。参见 [PR #155](https://github.com/maxbube/mydumper/pull/155)。