From f545c2e9e1d72dfa7388dccab74a8ce5865e11fd Mon Sep 17 00:00:00 2001 From: yikeke Date: Fri, 24 Aug 2018 16:41:51 +0800 Subject: [PATCH 01/60] tools: add add two commands in tikv-ctl Via: https://github.com/pingcap/docs/pull/581/ --- tools/tikv-control.md | 50 ++++++++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/tools/tikv-control.md b/tools/tikv-control.md index 55ab74ede87f..51079ce22566 100644 --- a/tools/tikv-control.md +++ b/tools/tikv-control.md @@ -5,7 +5,9 @@ category: tools # TiKV Control 使用说明 -TiKV Control (tikv-ctl) 是随 TiKV 附带的一个简单的管理工具,以下简称 tikv-ctl。在编译 TiKV 时,tikv-ctl 命令也会同时被编译出来,而通过 Ansible 部署的集群,在对应的 `tidb-ansible/resources/bin` 目录下也会有这个二进制文件。 +TiKV Control (tikv-ctl) 是随 TiKV 附带的一个简单的管理工具,以下简称 tikv-ctl。 + +在编译 TiKV 时,tikv-ctl 命令也会同时被编译出来,而通过 Ansible 部署的集群,在对应的 `tidb-ansible/resources/bin` 目录下也会有这个二进制文件。 ## 通用参数 @@ -144,17 +146,6 @@ success! > - `--pd/-p` 选项的参数指定 PD 的 endponits,它没有 `http` 前缀。 > - **这个命令只支持本地模式**。需要指定 PD 的 endpoints 的原因是需要询问 PD 是否可以安全地 tombstone。因此,在 tombstone 之前往往还需要在 `pd-ctl` 中把该 Region 在这台机器上的对应 Peer 拿掉。 -### 强制 Region 从多副本失败状态恢复服务 - -`unsafe-recover remove-fail-stores` 命令将一些失败掉的机器从所有 Region 的 peers 列表中移除。这样,这些 Region 便可以在 TiKV 重启之后以剩下的健康的副本继续提供服务了。这个命令常常用于多个 TiKV store 损坏或被删除的情况。 - -```bash -$ tikv-ctl --db /path/to/tikv/db unsafe-recover remove-fail-stores 3,4,5 -success! -``` - -> **注意**:**这个命令只支持本地模式**。在运行成功后,会打印 `success!`。 - ### 向 TiKV 发出 consistency-check 请求 **这个命令只支持远程模式**,它可以让某个 Region 对应的 Raft 进行一次副本之间的一致性检查。如果检查失败,TiKV 自身会 panic。如果 `--host` 指定的 TiKV 不是这个 Region 的 Leader,则会报告错误。 @@ -212,4 +203,37 @@ $ tikv-ctl modify-tikv-config -m kvdb -n write.block-cache-size -v 256MB success! $ tikv-ctl modify-tikv-config -m raftdb -n default.disable_auto_compactions -v true success! -``` \ No newline at end of file +``` + +### 强制 Region 从多副本失败状态恢复服务 + +`unsafe-recover remove-fail-stores` 命令将一些失败掉的机器从所有 Region 的 peers 列表中移除。这样,这些 Region 便可以在 TiKV 重启之后以剩下的健康的副本继续提供服务了。这个命令常常用于多个 TiKV store 损坏或被删除的情况。 + +变量 `--stores` 接受多个以逗号分隔的 `store_id`,并使用变量 `--regions` 来指定包含的 Region。否则,所有 Region 中位于这些 store 上的 peers 默认都会被移除。 + +```bash +$ tikv-ctl --db /path/to/tikv/db unsafe-recover remove-fail-stores --stores 3 --regions 1001,1002 +success! +``` + +> **注意**: +> +> - **这个命令只支持本地模式**。在运行成功后,会打印 `success!`。 +> - 对于指定 Region 的 peers 所在的每个 store,你都必须运行这个命令。如果不设置变量 `--regions`,所有的 Region 都会被包含进来,你便需要为所有的 store 都运行这个命令。 + +### 恢复损坏的 MVCC 数据 + +`recover-mvcc` 命令可以用于 MVCC 数据损坏而造成 TiKV 无法正常运行的情况。为了从不同种类的不一致情况中恢复,该命令会反复检查 3 个 CF ("default", "write", "lock")。 + +`--regions` 变量可以通过 `region_id` 指定包含的 Region, `--pd` 变量可以指定 PD 的端点。 + +```bash +$ tikv-ctl --db /path/to/tikv/db recover-mvcc --regions 1001,1002 --pd 127.0.0.1:2379 +success! +``` + +> **注意**: +> +> - **这个命令只支持本地模式**。在运行成功后,会打印 `success!`。 +> - `--pd` 变量指定 PD 的端点,但不使用 `http` 前缀。指定 PD 端点就是去查询指定的 `region_id` 是否有效。 +> - 对于指定 Region 的 peers 所在的每个 store,你都需要运行这个命令。 From 10e4b8c82057f2f32c8bc4bb28346f060dfe1762 Mon Sep 17 00:00:00 2001 From: Lilian Lee Date: Mon, 3 Sep 2018 19:27:36 +0800 Subject: [PATCH 02/60] tools: update wording --- tools/tikv-control.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/tikv-control.md b/tools/tikv-control.md index 51079ce22566..9cda1f50519b 100644 --- a/tools/tikv-control.md +++ b/tools/tikv-control.md @@ -209,7 +209,7 @@ success! `unsafe-recover remove-fail-stores` 命令将一些失败掉的机器从所有 Region 的 peers 列表中移除。这样,这些 Region 便可以在 TiKV 重启之后以剩下的健康的副本继续提供服务了。这个命令常常用于多个 TiKV store 损坏或被删除的情况。 -变量 `--stores` 接受多个以逗号分隔的 `store_id`,并使用变量 `--regions` 来指定包含的 Region。否则,所有 Region 中位于这些 store 上的 peers 默认都会被移除。 +`--stores` 选项接受多个以逗号分隔的 `store_id`,并使用 `--regions` 参数来指定包含的 Region。否则,所有 Region 中位于这些 store 上的 peers 默认都会被移除。 ```bash $ tikv-ctl --db /path/to/tikv/db unsafe-recover remove-fail-stores --stores 3 --regions 1001,1002 @@ -219,13 +219,13 @@ success! > **注意**: > > - **这个命令只支持本地模式**。在运行成功后,会打印 `success!`。 -> - 对于指定 Region 的 peers 所在的每个 store,你都必须运行这个命令。如果不设置变量 `--regions`,所有的 Region 都会被包含进来,你便需要为所有的 store 都运行这个命令。 +> - 对于指定 Region 的 peers 所在的每个 store,均须运行这个命令。如果不设置 `--regions` 选项,所有的 Region 都会被包含进来,你则需要为所有的 store 都执行这个命令。 ### 恢复损坏的 MVCC 数据 -`recover-mvcc` 命令可以用于 MVCC 数据损坏而造成 TiKV 无法正常运行的情况。为了从不同种类的不一致情况中恢复,该命令会反复检查 3 个 CF ("default", "write", "lock")。 +`recover-mvcc` 命令用于 MVCC 数据损坏导致 TiKV 无法正常运行的情况。为了从不同种类的不一致情况中恢复,该命令会反复检查 3 个 CF ("default", "write", "lock")。 -`--regions` 变量可以通过 `region_id` 指定包含的 Region, `--pd` 变量可以指定 PD 的端点。 +`--regions` 选项可以通过 `region_id` 指定包含的 Region,`--pd` 选项可以指定 PD 的端点。 ```bash $ tikv-ctl --db /path/to/tikv/db recover-mvcc --regions 1001,1002 --pd 127.0.0.1:2379 @@ -235,5 +235,5 @@ success! > **注意**: > > - **这个命令只支持本地模式**。在运行成功后,会打印 `success!`。 -> - `--pd` 变量指定 PD 的端点,但不使用 `http` 前缀。指定 PD 端点就是去查询指定的 `region_id` 是否有效。 -> - 对于指定 Region 的 peers 所在的每个 store,你都需要运行这个命令。 +> - `--pd` 选项指定 PD 的端点,不使用 `http` 前缀。指定 PD 端点就是去查询指定的 `region_id` 是否有效。 +> - 对于指定 Region 的 peers 所在的每个 store,均须执行这个命令。 From 3dd1f1d2f278032c3112692924f60fc359a0862c Mon Sep 17 00:00:00 2001 From: Lilian Lee Date: Tue, 4 Sep 2018 10:39:49 +0800 Subject: [PATCH 03/60] tools: address the comment --- tools/tikv-control.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/tikv-control.md b/tools/tikv-control.md index 9cda1f50519b..c0397144862e 100644 --- a/tools/tikv-control.md +++ b/tools/tikv-control.md @@ -225,7 +225,7 @@ success! `recover-mvcc` 命令用于 MVCC 数据损坏导致 TiKV 无法正常运行的情况。为了从不同种类的不一致情况中恢复,该命令会反复检查 3 个 CF ("default", "write", "lock")。 -`--regions` 选项可以通过 `region_id` 指定包含的 Region,`--pd` 选项可以指定 PD 的端点。 +`--regions` 选项可以通过 `region_id` 指定包含的 Region,`--pd` 选项可以指定 PD 的 endpoint。 ```bash $ tikv-ctl --db /path/to/tikv/db recover-mvcc --regions 1001,1002 --pd 127.0.0.1:2379 @@ -235,5 +235,5 @@ success! > **注意**: > > - **这个命令只支持本地模式**。在运行成功后,会打印 `success!`。 -> - `--pd` 选项指定 PD 的端点,不使用 `http` 前缀。指定 PD 端点就是去查询指定的 `region_id` 是否有效。 +> - `--pd` 选项指定 PD 的 endpoint,不使用 `http` 前缀,用于查询指定的 `region_id` 是否有效。 > - 对于指定 Region 的 peers 所在的每个 store,均须执行这个命令。 From 2e3e05f1411f0501d7ae7d30f89ed383c795177c Mon Sep 17 00:00:00 2001 From: CaitinChen Date: Wed, 5 Sep 2018 19:26:20 +0800 Subject: [PATCH 04/60] faq, sql: update wording --- FAQ.md | 2 +- sql/slow-query.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/FAQ.md b/FAQ.md index 6dd0cee34855..0bbb99636ae0 100755 --- a/FAQ.md +++ b/FAQ.md @@ -974,4 +974,4 @@ update mysql.tidb set variable_value='30m' where variable_name='tikv_gc_life_tim #### 9.2.4 ERROR 9001 (HY000): PD server timeout start timestamp may fall behind safe point -这个报错一般是 TiDB 访问 PD 出了问题,TiDB 后台有个 worker 会不断地从 PD 查询 safepoint,如果超过 100s 查不成功就会报这个错。一般是因为 PD 有故障或者 TiDB 和 PD 之间的网络有问题。TiDB 常见错误码请参考[错误码与故障诊断](sql/error.md)。 +这个报错一般是 TiDB 访问 PD 出了问题,TiDB 后台有个 worker 会不断地从 PD 查询 safepoint,如果超过 100s 查不成功就会报这个错。一般是因为 PD 磁盘操作过忙、反应过慢,或者 TiDB 和 PD 之间的网络有问题。TiDB 常见错误码请参考[错误码与故障诊断](sql/error.md)。 diff --git a/sql/slow-query.md b/sql/slow-query.md index fe2e256932ae..615e27ec1184 100644 --- a/sql/slow-query.md +++ b/sql/slow-query.md @@ -51,7 +51,7 @@ sql:select count(c) from sbtest1 use index (k_1) #### processed_keys -表示 coprocessor 处理的 key 的数量。相比 total_keys,processed_keys 不包含 mvcc 的旧版本和 mvcc delete 标记。如果 processed_keys 和 total_keys 相差很大,说明旧版本比较多。 +表示 coprocessor 处理的 key 的数量。相比 total_keys,processed_keys 不包含 mvcc 的旧版本。如果 processed_keys 和 total_keys 相差很大,说明旧版本比较多。 #### succ From 12aa67007bb8031c9d98147bbfefe455522d2c39 Mon Sep 17 00:00:00 2001 From: Caitin <34535727+CaitinChen@users.noreply.github.com> Date: Wed, 5 Sep 2018 19:40:58 +0800 Subject: [PATCH 05/60] Update wording --- sql/slow-query.md | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/sql/slow-query.md b/sql/slow-query.md index 615e27ec1184..acd008d893c0 100644 --- a/sql/slow-query.md +++ b/sql/slow-query.md @@ -11,7 +11,7 @@ category: user guide 通过在 TiDB 的日志文件上 grep `SLOW_QUERY` 这个关键字,可以得到执行时间超过 [slow-threshold](../op-guide/tidb-config-file.md#slow-threshold) 的语句日志。 -`slow-threshold` 可以通过配置文件修改,默认是 300ms。如果配置了 [slow-query-file](../op-guide/tidb-config-file.md#slow-query-file), 慢查询日志会全部写在这个文件里。 +`slow-threshold` 可以通过配置文件修改,默认是 300ms。如果配置了 [slow-query-file](../op-guide/tidb-config-file.md#slow-query-file),慢查询日志会全部写在这个文件里。 ### 示例 @@ -35,7 +35,7 @@ sql:select count(c) from sbtest1 use index (k_1) #### wait_time -表示这个语句在 TiKV 的等待时间之和,因为 TiKV 的 coprocessor 线程数是有限的,当所有的 coprocessor 线程都在工作的时候,请求会排队,当队列中有某些请求耗时很长的时候,后面的请求的等待时间都会增加。 +表示这个语句在 TiKV 的等待时间之和,因为 TiKV 的 Coprocessor 线程数是有限的,当所有的 Coprocessor 线程都在工作的时候,请求会排队,当队列中有某些请求耗时很长的时候,后面的请求的等待时间都会增加。 #### backoff_time @@ -43,15 +43,15 @@ sql:select count(c) from sbtest1 use index (k_1) #### request_count -表示这个语句发送的 coprocessor 请求的数量。 +表示这个语句发送的 Coprocessor 请求的数量。 #### total_keys -表示 coprocessor 扫过的 key 的数量 +表示 Coprocessor 扫过的 key 的数量 #### processed_keys -表示 coprocessor 处理的 key 的数量。相比 total_keys,processed_keys 不包含 mvcc 的旧版本。如果 processed_keys 和 total_keys 相差很大,说明旧版本比较多。 +表示 Coprocessor 处理的 key 的数量。相比 total_keys,processed_keys 不包含 MVCC 的旧版本。如果 processed_keys 和 total_keys 相差很大,说明旧版本比较多。 #### succ @@ -88,8 +88,3 @@ sql:select count(c) from sbtest1 use index (k_1) ### 定位问题语句的方法 并不是所有 SLOW_QUERY 的语句都是有问题的。会造成集群整体压力增大的,是那些 process_time 很大的语句。wait_time 很大,但 process_time 很小的语句通常不是问题语句,是因为被问题语句阻塞,在执行队列等待造成的响应时间过长。 - - - - - From 3c41cc451aceab0f25b88be17fc64b62aeab6896 Mon Sep 17 00:00:00 2001 From: CaitinChen Date: Fri, 7 Sep 2018 19:22:20 +0800 Subject: [PATCH 06/60] readme, releases: add 2.0.7 release notes --- README.md | 1 + releases/207.md | 36 ++++++++++++++++++++++++++++++++++++ releases/rn.md | 1 + 3 files changed, 38 insertions(+) create mode 100644 releases/207.md diff --git a/README.md b/README.md index b93e3830b4bf..000696a4447d 100755 --- a/README.md +++ b/README.md @@ -120,6 +120,7 @@ - [常见问题与解答(FAQ)](FAQ.md) - [最佳实践](https://pingcap.com/blog-cn/tidb-best-practice/) + [版本发布历史](releases/rn.md) + - [2.0.7](releases/207.md) - [2.1 RC1](releases/21rc1.md) - [2.0.6](releases/206.md) - [2.0.5](releases/205.md) diff --git a/releases/207.md b/releases/207.md new file mode 100644 index 000000000000..82cba1593466 --- /dev/null +++ b/releases/207.md @@ -0,0 +1,36 @@ +--- +title: TiDB 2.0.7 release notes +category: Releases +--- + +# TiDB 2.0.7 Release Notes + +2018 年 9 月 7 日,TiDB 发布 2.0.7 版。该版本在 2.0.6 版的基础上,对系统兼容性、稳定性做出了改进。 + +## TiDB + +- New Feature + - 在 `information_schema` 里添加 `PROCESSLIST` 表 [#7286](https://github.com/pingcap/tidb/pull/7286) +- Improvements + - 收集更多语句执行细节,并输出在 `SLOW QUERY` 日志里 [#7364](https://github.com/pingcap/tidb/pull/7364) + - `SHOW CREATE TABLE` 不再输出分区信息 [#7388](https://github.com/pingcap/tidb/pull/7388) + - 通过设置 RC 隔离级别和低优先级优化 `ANALYZE` 语句执行效率 [#7500](https://github.com/pingcap/tidb/pull/7500) + - 加速 `ADD UNIQUE INDEX` [#7562](https://github.com/pingcap/tidb/pull/7562) + - 增加控制 DDL 并发度的选项 [#7563](https://github.com/pingcap/tidb/pull/7563) +- Bug Fixes + - 修复 `PRIMARY KEY` 为整数的表,无法使用 `USE INDEX(PRIMARY)` 的问题 [#7298](https://github.com/pingcap/tidb/pull/7298) + - 修复 `Merge Join` 和 `Index Join` 在 inner row 为 `NULL` 时输出多余结果的问题 [#7301](https://github.com/pingcap/tidb/pull/7301) + - 修复 chunk size 设置过小时,`Join` 输出多余结果的问题 [#7315](https://github.com/pingcap/tidb/pull/7315) + - 修复建表语句中包含 `range column` 语法导致 panic 的问题 [#7379](https://github.com/pingcap/tidb/pull/7379) + - 修复 `admin check table` 对时间类型的列误报的问题 [#7457](https://github.com/pingcap/tidb/pull/7457) + - 修复以默认值 `current_timestamp` 插入的数据无法用 `=` 条件查询到的问题 [#7467](https://github.com/pingcap/tidb/pull/7467) + - 修复以 `ComStmtSendLongData` 命令插入空字符串参数被误解析为 `NULL` 的问题 [#7508](https://github.com/pingcap/tidb/pull/7508) + - 修复特定场景下 `auto analyze` 不断重复执行的问题 [#7556](https://github.com/pingcap/tidb/pull/7556) + - 修复 parser 无法解析以换行符结尾的单行注释的问题 [#7635](https://github.com/pingcap/tidb/pull/7635) + +## TiKV + +- Improvement + - 空集群默认打开 `dynamic-level-bytes` 参数减少空间放大 +- Bug Fix + - 在 Region merge 之后更新 Region 的 `approximate size` 和 keys \ No newline at end of file diff --git a/releases/rn.md b/releases/rn.md index 5c7690f5f71d..c92e4901204c 100644 --- a/releases/rn.md +++ b/releases/rn.md @@ -7,6 +7,7 @@ category: release TiDB 历史版本发布声明如下: + - [2.0.7](207.md) - [2.1 RC1](releases/21rc1.md) - [2.0.6](206.md) - [2.0.5](205.md) From c4a4394f7fa70bd95c9f2d275ee3c81bd0d19d80 Mon Sep 17 00:00:00 2001 From: Haibin Xie Date: Mon, 10 Sep 2018 13:58:24 +0800 Subject: [PATCH 07/60] sql: remove documentation about read committed --- sql/transaction-isolation.md | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/sql/transaction-isolation.md b/sql/transaction-isolation.md index 8ddcc901272a..045ac220cee0 100644 --- a/sql/transaction-isolation.md +++ b/sql/transaction-isolation.md @@ -16,25 +16,13 @@ sql 92标准定义了4种隔离级别,读未提交、读已提交、可重复 | Repeatable read | Not possible | Not possible | Not possible in TiDB | Possible | | Serializable | Not possible | Not possible | Not possible | Not possible | -TiDB 实现了其中的两种:读已提交和可重复读。 +TiDB 实现了其中的可重复读。 TiDB 使用 [Percolator 事务模型](https://research.google.com/pubs/pub36726.html),当事务启动时会获取全局读时间戳,事务提交时也会获取全局提交时间戳,并以此确定事务的执行顺序,如果想了解 TiDB 事务模型的实现可以详细阅读以下两篇文章:[TiKV 的 MVCC (Multi-Version Concurrency Control) 机制](https://pingcap.com/blog-cn/mvcc-in-tikv/),[Percolator 和 TiDB 事务算法](https://pingcap.com/blog-cn/percolator-and-txn/)。 -可以通过以下命令设置 session 或者 global 的事务的隔离级别: - -``` -SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL [read committed|repeatable read] -``` - -如果不使用 session 或者 global 关键字,以下这条语句只会对下一个执行的事务生效,不会对整个会话或者全局生效: - -``` -SET TRANSACTION ISOLATION LEVEL [read committed|repeatable read] -``` - ## 可重复读 -可重复读是 TiDB 的默认隔离级别,当事务隔离级别为可重复读时,只能读到该事务启动时已经提交的其他事务修改的数据,未提交的数据或在事务启动后其他事务提交的数据是不可见的。对于本事务而言,事务语句可以看到之前的语句做出的修改。 +当事务隔离级别为可重复读时,只能读到该事务启动时已经提交的其他事务修改的数据,未提交的数据或在事务启动后其他事务提交的数据是不可见的。对于本事务而言,事务语句可以看到之前的语句做出的修改。 对于运行于不同节点的事务而言,不同事务启动和提交的顺序取决于从 PD 获取时间戳的顺序。 @@ -60,12 +48,6 @@ commit; | MySQL 可重复读隔离级别在更新时并不检验当前版本是否可见,也就是说,即使该行在事务启动后被更新过,同样可以继续更新。这种情况在 TiDB 会导致事务回滚并后台重试,重试最终可能会失败,导致事务最终失败,而 MySQL 是可以更新成功的。 MySQL 的可重复读隔离级别并非 snapshot 隔离级别,MySQL 可重复读隔离级别的一致性要弱于 snapshot 隔离级别,也弱于 TiDB 的可重复读隔离级别。 -## 读已提交 - -读已提交隔离级别和可重复读隔离级别不同,它仅仅保证不能读到未提交事务的数据,需要注意的是,事务提交是一个动态的过程,因此读已提交隔离级别可能读到某个事务部分提交的数据。 - -不推荐在有严格一致要求的数据库中使用读已提交隔离级别。 - ## 事务重试 对于 insert/delete/update 操作,如果事务执行失败,并且系统判断该错误为可重试,会在系统内部自动重试事务。 From 662ff508fa7121e7e6b0ab5b1dbab815fd1b5ba0 Mon Sep 17 00:00:00 2001 From: lilin90 Date: Mon, 10 Sep 2018 14:01:54 +0800 Subject: [PATCH 08/60] sql: update the YEAR type and syntax element Via: https://github.com/pingcap/docs/pull/608 --- sql/datatype.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sql/datatype.md b/sql/datatype.md index 03f4beb06782..be8b4ba15367 100644 --- a/sql/datatype.md +++ b/sql/datatype.md @@ -63,7 +63,7 @@ BIGINT[(M)] [UNSIGNED] [ZEROFILL] | 语法元素 | 说明 | | ---- | --------| -| M | 类型长度,可选的 | +| M | 类型显示宽度,可选 | | UNSIGNED | 无符号数,如果不加这个标识,则为有符号数 | | ZEROFILL | 补零标识,如果有这个标识,TiDB 会自动给类型增加 UNSIGNED 标识,但是没有做补零的操作 | @@ -174,8 +174,8 @@ TIME[(fsp)] > 时间。范围是`-838:59:59.000000`到`838:59:59.000000`。以`HH:MM:SS[.fraction]`格式显示 TIME 值。 fsp 参数是表示秒精度,取值范围为:0-6。默认值取 0。 -YEAR[(2|4)] -> 两位或四位格式的年。默认是四位格式。在四位格式中,允许的值是 1901 到 2155 和 0000。在两位格式中,允许的值是 70 到 69,表示从 1970 年到 2069 年。 +YEAR[(4)] +> 四位格式的年。允许的值是 1901 到 2155 和 0000。 ``` ## 字符串类型 From e78012c736016cf9112a5ba704cb1299e4c8d70e Mon Sep 17 00:00:00 2001 From: Louis Date: Mon, 10 Sep 2018 14:27:56 +0800 Subject: [PATCH 09/60] op-guide: update note about tidb-ansible branch and tidb version (#872) --- op-guide/ansible-deployment.md | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/op-guide/ansible-deployment.md b/op-guide/ansible-deployment.md index 8bbab0645181..bb582a178e8a 100644 --- a/op-guide/ansible-deployment.md +++ b/op-guide/ansible-deployment.md @@ -77,10 +77,15 @@ Ansible 是一款自动化运维工具,[TiDB-Ansible](https://github.com/pingc tidb ALL=(ALL) NOPASSWD: ALL ``` -生成 ssh key: 执行 `su` 命令从 `root` 用户切换到 `tidb` 用户下,创建 `tidb` 用户 ssh key, 提示 `Enter passphrase` 时直接回车即可。执行成功后,ssh 私钥文件为 `/home/tidb/.ssh/id_rsa`, ssh 公钥文件为 `/home/tidb/.ssh/id_rsa.pub`。 +生成 ssh key: 执行 `su` 命令从 `root` 用户切换到 `tidb` 用户下。 ``` # su - tidb +``` + +创建 `tidb` 用户 ssh key, 提示 `Enter passphrase` 时直接回车即可。执行成功后,ssh 私钥文件为 `/home/tidb/.ssh/id_rsa`, ssh 公钥文件为 `/home/tidb/.ssh/id_rsa.pub`。 + +``` $ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/tidb/.ssh/id_rsa): @@ -107,11 +112,16 @@ The key's randomart image is: ## 在中控机器上下载 TiDB-Ansible -以 `tidb` 用户登录中控机并进入 `/home/tidb` 目录。 +以 `tidb` 用户登录中控机并进入 `/home/tidb` 目录。以下为 tidb-ansible 分支与 TiDB 版本对应关系,版本选择可以咨询官方。 + +| tidb-ansible 分支 | TiDB 版本 | 备注 | +| ---------------- | --------- | --- | +| release-2.0 | 2.0 版本 | 最新稳定版本,可用于生产环境。 | +| master | master 版本 | 包含最新特性,每日更新。 | -使用以下命令从 Github [TiDB-Ansible 项目](https://github.com/pingcap/tidb-ansible)上下载 TiDB-Ansible 相应版本,默认的文件夹名称为 `tidb-ansible`,以下为各版本下载示例,版本选择可以咨询官方。 +使用以下命令从 Github [TiDB-Ansible 项目](https://github.com/pingcap/tidb-ansible)上下载 TiDB-Ansible 相应分支,默认的文件夹名称为 `tidb-ansible`。 -下载 2.0 GA 版本: +下载 2.0 版本: ``` $ git clone -b release-2.0 https://github.com/pingcap/tidb-ansible.git From 91a9a5b9c0853bfd6da0b74ad390e77f07334a57 Mon Sep 17 00:00:00 2001 From: lilin90 Date: Mon, 10 Sep 2018 16:38:38 +0800 Subject: [PATCH 10/60] sql: remove unsupported functions Via: https://github.com/pingcap/docs/pull/607 --- sql/string-functions.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/sql/string-functions.md b/sql/string-functions.md index de7cbe354f0b..b9d5f20817e6 100644 --- a/sql/string-functions.md +++ b/sql/string-functions.md @@ -53,8 +53,6 @@ category: user guide | [`FORMAT()`](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_format) | 返回指定小数位数格式的数字 | | [`ORD()`](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_ord) | 返回参数中最左字符的字符代码 | | [`QUOTE()`](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_quote)                         | 引用一个字符串,返回一个在 SQL 语句中可用作正确转义的数据值的结果                                                                                           | -| [`SOUNDEX()`](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_soundex) | 返回一个 soundex 字符串 | -| [`SOUNDS LIKE`](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#operator_sounds-like)               | 按发音比较字符串   | ## 字符串比较函数 @@ -63,7 +61,6 @@ category: user guide | [`LIKE`](https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_like) | 进行简单模式匹配 | | [`NOT LIKE`](https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_not-like) | 否定简单模式匹配 | | [`STRCMP()`](https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#function_strcmp) | 比较两个字符串 | -| [`MATCH`](https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html#function_match) | 执行全文搜索 | ## 正则表达式 From ab8edf24e0c1617c184581f3b3f20c105d3d6f2e Mon Sep 17 00:00:00 2001 From: lilin90 Date: Mon, 10 Sep 2018 19:22:22 +0800 Subject: [PATCH 11/60] sql: add support for IGNORE n LINES Via: https://github.com/pingcap/docs/pull/601 --- sql/mysql-compatibility.md | 1 + 1 file changed, 1 insertion(+) diff --git a/sql/mysql-compatibility.md b/sql/mysql-compatibility.md index 81c6c98f64d4..0f443b101fbc 100644 --- a/sql/mysql-compatibility.md +++ b/sql/mysql-compatibility.md @@ -100,6 +100,7 @@ TiDB 使用乐观事务模型,在执行 Update、Insert、Delete 等语句时 LOAD DATA LOCAL INFILE 'file_name' INTO TABLE table_name {FIELDS | COLUMNS} TERMINATED BY 'string' ENCLOSED BY 'char' ESCAPED BY 'char' LINES STARTING BY 'string' TERMINATED BY 'string' + IGNORE n LINES (col_name ...); ``` From 60c854f031376dc36cda76ddbcf7a849c4da1489 Mon Sep 17 00:00:00 2001 From: lilin90 Date: Mon, 10 Sep 2018 19:33:32 +0800 Subject: [PATCH 12/60] sql: clarify default character-set is utf8 Via: https://github.com/pingcap/docs/pull/609 --- sql/character-set-configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/character-set-configuration.md b/sql/character-set-configuration.md index 9e2c88b3aa57..56f1ae25d55a 100644 --- a/sql/character-set-configuration.md +++ b/sql/character-set-configuration.md @@ -5,6 +5,6 @@ category: user guide # 字符集配置 -目前 TiDB 还没有相应的配置来设置字符集,默认为 `utf8mb4`。 +目前,TiDB 只支持 `utf8` 字符集,相当于 MySQL 中的 `utf8mb4`。MySQL 5.7 的默认字符集为 `latin1`。关于 TiDB 与 MySQL 字符集的区别,在[默认设置的区别](mysql-compatibility.md#默认设置的区别)中有相关说明。 更多[细节](https://dev.mysql.com/doc/refman/5.7/en/charset-configuration.html)。 \ No newline at end of file From a26dda377da9704d32ed7fd6da7949242a565b09 Mon Sep 17 00:00:00 2001 From: Zhexuan Yang Date: Tue, 11 Sep 2018 14:24:59 +0800 Subject: [PATCH 13/60] Update time-zone.md --- sql/time-zone.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sql/time-zone.md b/sql/time-zone.md index 1657e20758ad..667fa93f7e35 100644 --- a/sql/time-zone.md +++ b/sql/time-zone.md @@ -5,7 +5,11 @@ category: user guide # 时区支持 -TiDB 使用的时区由 `time_zone` 全局变量和 session 变量决定。`time_zone` 的初始值是机器当前的系统时区 'SYSTEM'。 +TiDB 使用的时区由 `time_zone` 全局变量和 session 变量决定。`time_zone` 的初始值是 TiDB 集群 bootstrap 初始化。具体逻辑如下: +* 优先使用 `TZ` 环境变量 +* 如果失败,这从 `/etc/localtime` 的实际软链地址提取。 +* 如果上面两种都失败则使用 `UTC` 作为系统时区。 + 在运行过程中可以修改全局时区: From 2d87cff74702bc280372658786478d273e510667 Mon Sep 17 00:00:00 2001 From: Zhexuan Yang Date: Tue, 11 Sep 2018 14:39:54 +0800 Subject: [PATCH 14/60] Update time-zone.md --- sql/time-zone.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/time-zone.md b/sql/time-zone.md index 667fa93f7e35..616ec51758a7 100644 --- a/sql/time-zone.md +++ b/sql/time-zone.md @@ -5,7 +5,7 @@ category: user guide # 时区支持 -TiDB 使用的时区由 `time_zone` 全局变量和 session 变量决定。`time_zone` 的初始值是 TiDB 集群 bootstrap 初始化。具体逻辑如下: +TiDB 使用的时区由 `time_zone` 全局变量和 session 变量决定。`time_zone` 的默认值是 `System`, `System` 对应的实际时区是 TiDB 集群 bootstrap 初始化时设置。具体逻辑如下: * 优先使用 `TZ` 环境变量 * 如果失败,这从 `/etc/localtime` 的实际软链地址提取。 * 如果上面两种都失败则使用 `UTC` 作为系统时区。 From 013425771c1e61561dd79939972238c3c0f290f6 Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 11 Sep 2018 14:44:20 +0800 Subject: [PATCH 15/60] op-guide: update ansible timezone note --- op-guide/ansible-deployment.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/op-guide/ansible-deployment.md b/op-guide/ansible-deployment.md index bb582a178e8a..a4a7102ce972 100644 --- a/op-guide/ansible-deployment.md +++ b/op-guide/ansible-deployment.md @@ -456,8 +456,7 @@ TiKV1-1 ansible_host=172.16.10.4 deploy_dir=/data1/deploy | cluster_name | 集群名称,可调整 | | tidb_version | TiDB 版本,TiDB-Ansible 各分支默认已配置 | | process_supervision | 进程监管方式,默认为 systemd,可选 supervise | -| timezone | 修改部署目标机器时区,默认为 `Asia/Shanghai`,可调整,与 `set_timezone` 变量结合使用 | -| set_timezone | 默认为 True,即修改部署目标机器时区,关闭可修改为 False | +| timezone | 新安装 TiDB 集群第一次启动 bootstrap(初始化)时,将 TiDB 全局默认时区设置为该值。TiDB 使用的时区后续可通过 `time_zone` 全局变量和 session 变量来修改,参考[时区支持](https://github.com/pingcap/docs-cn/blob/master/sql/time-zone.md)。 默认为 `Asia/Shanghai`, 可选值参考[ timzone 列表](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)。| | enable_firewalld | 开启防火墙,默认不开启,如需开启,请将[部署建议-网络要求](recommendation.md#网络要求) 中的端口加入白名单 | | enable_ntpd | 检测部署目标机器 NTP 服务,默认为 True,请勿关闭 | | set_hostname | 根据 IP 修改部署目标机器主机名,默认为 False | From a8811d13a63f8dda2a551a8fbb05f394f72e1d4e Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 11 Sep 2018 14:48:41 +0800 Subject: [PATCH 16/60] op-guide: update ansible timezone note --- op-guide/ansible-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op-guide/ansible-deployment.md b/op-guide/ansible-deployment.md index a4a7102ce972..882093ef3af5 100644 --- a/op-guide/ansible-deployment.md +++ b/op-guide/ansible-deployment.md @@ -456,7 +456,7 @@ TiKV1-1 ansible_host=172.16.10.4 deploy_dir=/data1/deploy | cluster_name | 集群名称,可调整 | | tidb_version | TiDB 版本,TiDB-Ansible 各分支默认已配置 | | process_supervision | 进程监管方式,默认为 systemd,可选 supervise | -| timezone | 新安装 TiDB 集群第一次启动 bootstrap(初始化)时,将 TiDB 全局默认时区设置为该值。TiDB 使用的时区后续可通过 `time_zone` 全局变量和 session 变量来修改,参考[时区支持](https://github.com/pingcap/docs-cn/blob/master/sql/time-zone.md)。 默认为 `Asia/Shanghai`, 可选值参考[ timzone 列表](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)。| +| timezone | 新安装 TiDB 集群第一次启动 bootstrap(初始化)时,将 TiDB 全局默认时区设置为该值。TiDB 使用的时区后续可通过 `time_zone` 全局变量和 session 变量来修改,参考[时区支持](https://github.com/pingcap/docs-cn/blob/master/sql/time-zone.md)。 默认为 `Asia/Shanghai`,可选值参考[ timzone 列表](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)。 | | enable_firewalld | 开启防火墙,默认不开启,如需开启,请将[部署建议-网络要求](recommendation.md#网络要求) 中的端口加入白名单 | | enable_ntpd | 检测部署目标机器 NTP 服务,默认为 True,请勿关闭 | | set_hostname | 根据 IP 修改部署目标机器主机名,默认为 False | From be63f13518e14224ab17c0f440936cf139846fbe Mon Sep 17 00:00:00 2001 From: Zhexuan Yang Date: Tue, 11 Sep 2018 15:04:55 +0800 Subject: [PATCH 17/60] Update time-zone.md --- sql/time-zone.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/time-zone.md b/sql/time-zone.md index 616ec51758a7..20b669266d71 100644 --- a/sql/time-zone.md +++ b/sql/time-zone.md @@ -5,9 +5,9 @@ category: user guide # 时区支持 -TiDB 使用的时区由 `time_zone` 全局变量和 session 变量决定。`time_zone` 的默认值是 `System`, `System` 对应的实际时区是 TiDB 集群 bootstrap 初始化时设置。具体逻辑如下: +TiDB 使用的时区由 `time_zone` 全局变量和 session 变量决定。`time_zone` 的默认值是 `System`,`System` 对应的实际时区是 TiDB 集群 bootstrap 初始化时设置。具体逻辑如下: * 优先使用 `TZ` 环境变量 -* 如果失败,这从 `/etc/localtime` 的实际软链地址提取。 +* 如果失败,则从 `/etc/localtime` 的实际软链地址提取。 * 如果上面两种都失败则使用 `UTC` 作为系统时区。 From 4ad64a8e38f92886a78d1f9f8b4e39297d91f803 Mon Sep 17 00:00:00 2001 From: Zhexuan Yang Date: Tue, 11 Sep 2018 15:05:44 +0800 Subject: [PATCH 18/60] Update time-zone.md --- sql/time-zone.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/time-zone.md b/sql/time-zone.md index 20b669266d71..a5182cc66777 100644 --- a/sql/time-zone.md +++ b/sql/time-zone.md @@ -5,7 +5,7 @@ category: user guide # 时区支持 -TiDB 使用的时区由 `time_zone` 全局变量和 session 变量决定。`time_zone` 的默认值是 `System`,`System` 对应的实际时区是 TiDB 集群 bootstrap 初始化时设置。具体逻辑如下: +TiDB 使用的时区由 `time_zone` 全局变量和 session 变量决定。`time_zone` 的默认值是 `System`,`System` 对应的实际时区在TiDB 集群 bootstrap 初始化时设置。具体逻辑如下: * 优先使用 `TZ` 环境变量 * 如果失败,则从 `/etc/localtime` 的实际软链地址提取。 * 如果上面两种都失败则使用 `UTC` 作为系统时区。 From 139fa89b799b47231df8087fd8ab4a01129bfec0 Mon Sep 17 00:00:00 2001 From: Zhexuan Yang Date: Tue, 11 Sep 2018 15:08:32 +0800 Subject: [PATCH 19/60] Update time-zone.md --- sql/time-zone.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/time-zone.md b/sql/time-zone.md index a5182cc66777..be915aee2cab 100644 --- a/sql/time-zone.md +++ b/sql/time-zone.md @@ -5,7 +5,7 @@ category: user guide # 时区支持 -TiDB 使用的时区由 `time_zone` 全局变量和 session 变量决定。`time_zone` 的默认值是 `System`,`System` 对应的实际时区在TiDB 集群 bootstrap 初始化时设置。具体逻辑如下: +TiDB 使用的时区由 `time_zone` 全局变量和 session 变量决定。`time_zone` 的默认值是 `System`,`System` 对应的实际时区在 `TiDB` 集群 bootstrap 初始化时设置。具体逻辑如下: * 优先使用 `TZ` 环境变量 * 如果失败,则从 `/etc/localtime` 的实际软链地址提取。 * 如果上面两种都失败则使用 `UTC` 作为系统时区。 From 54dc80eeee8d99d2a478068739e85b5d3934ba24 Mon Sep 17 00:00:00 2001 From: Lilian Lee Date: Tue, 11 Sep 2018 15:32:24 +0800 Subject: [PATCH 20/60] sql: add a blank line to avoid website error --- sql/time-zone.md | 1 + 1 file changed, 1 insertion(+) diff --git a/sql/time-zone.md b/sql/time-zone.md index be915aee2cab..d72d7c4d5dc2 100644 --- a/sql/time-zone.md +++ b/sql/time-zone.md @@ -6,6 +6,7 @@ category: user guide # 时区支持 TiDB 使用的时区由 `time_zone` 全局变量和 session 变量决定。`time_zone` 的默认值是 `System`,`System` 对应的实际时区在 `TiDB` 集群 bootstrap 初始化时设置。具体逻辑如下: + * 优先使用 `TZ` 环境变量 * 如果失败,则从 `/etc/localtime` 的实际软链地址提取。 * 如果上面两种都失败则使用 `UTC` 作为系统时区。 From d86752c6dee6e08e99751f468d7e8e878bedc51f Mon Sep 17 00:00:00 2001 From: liukun <451564319@qq.com> Date: Wed, 12 Sep 2018 13:39:09 +0800 Subject: [PATCH 21/60] fix error: change the remove to add --- tools/pd-control.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/pd-control.md b/tools/pd-control.md index 74a427ce5a9d..259ba57e032a 100644 --- a/tools/pd-control.md +++ b/tools/pd-control.md @@ -375,7 +375,7 @@ Success! >> operator show leader // 显示所有的 leader operators >> operator show region // 显示所有的 region operators >> operator add add-peer 1 2 // 在 store 2 上新增 region 1 的一个副本 ->> operator remove remove-peer 1 2 // 移除 store 2 上的 region 1 的一个副本 +>> operator add remove-peer 1 2 // 移除 store 2 上的 region 1 的一个副本 >> operator add transfer-leader 1 2 // 把 region 1 的 leader 调度到 store 2 >> operator add transfer-region 1 2 3 4 // 把 region 1 调度到 store 2,3,4 >> operator add transfer-peer 1 2 3 // 把 region 1 在 store 2 上的副本调度到 store 3 From d8a1c1bd077cd3d1d15a559171aed99492cd03d4 Mon Sep 17 00:00:00 2001 From: lilin90 Date: Wed, 12 Sep 2018 17:28:19 +0800 Subject: [PATCH 22/60] sql: update tidb_ddl_reorg_priority and format Via: https://github.com/pingcap/docs/pull/610 --- sql/tidb-specific.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sql/tidb-specific.md b/sql/tidb-specific.md index 32464112cd64..a90fc830c435 100644 --- a/sql/tidb-specific.md +++ b/sql/tidb-specific.md @@ -318,7 +318,7 @@ TiDB 在 MySQL 的基础上,定义了一些专用的系统变量和语法用 这个变量用来设置是否禁用显式事务自动重试,设置为 1 时,不会自动重试,如果遇到冲突需要在应用层重试。 是否需要禁用自动重试,请参考[自动重试的风险](./transaction-isolation.md#乐观事务注意事项) -## tidb_enable_table_partition +### tidb_enable_table_partition 作用域:SESSION @@ -326,7 +326,7 @@ TiDB 在 MySQL 的基础上,定义了一些专用的系统变量和语法用 这个变量用来设置是否开启 TABLE PARTITION 特性。 -## tidb_backoff_lock_fast +### tidb_backoff_lock_fast 作用域:SESSION | GLOBAL @@ -334,7 +334,7 @@ TiDB 在 MySQL 的基础上,定义了一些专用的系统变量和语法用 这个变量用来设置读请求遇到锁的 backoff 时间。 -## tidb_ddl_reorg_worker_cnt +### tidb_ddl_reorg_worker_cnt 作用域: SESSION | GLOBAL @@ -342,11 +342,11 @@ TiDB 在 MySQL 的基础上,定义了一些专用的系统变量和语法用 这个变量用来设置 DDL 操作 re-organize 阶段的并发度。 -## tidb_ddl_reorg_priority +### tidb_ddl_reorg_priority 作用域:SESSION | GLOBAL -默认值:PRIORITY_NORMAL +默认值:PRIORITY_LOW 这个变量用来设置 `ADD INDEX` 操作 re-organize 阶段的执行优先级,可设置为 PRIORITY_LOW/PRIORITY_NORMAL/PRIORITY_HIGH。 From 5786555794af1a3fc1b93112128dfa96d33968e9 Mon Sep 17 00:00:00 2001 From: lilin90 Date: Thu, 13 Sep 2018 11:56:37 +0800 Subject: [PATCH 23/60] overview: split overview.md into sub docs Via: https://github.com/pingcap/docs/pull/611 --- architecture.md | 28 +++++++++++++++++++++++++ features.md | 28 +++++++++++++++++++++++++ overview.md | 56 ++++--------------------------------------------- 3 files changed, 60 insertions(+), 52 deletions(-) create mode 100644 architecture.md create mode 100644 features.md diff --git a/architecture.md b/architecture.md new file mode 100644 index 000000000000..8ce1f681d075 --- /dev/null +++ b/architecture.md @@ -0,0 +1,28 @@ +--- +title: TiDB 整体架构 +category: introduction +--- + +# TiDB 整体架构 + +要深入了解 TiDB 的水平扩展和高可用特点,首先需要了解 TiDB 的整体架构。TiDB 集群主要包括三个核心组件:TiDB Server,PD Server 和 TiKV Server。此外,还有用于解决用户复杂 OLAP 需求的 [TiSpark](https://github.com/pingcap/tispark/) 组件。 + +![TiDB Architecture](media/tidb-architecture.png) + +## TiDB Server + +TiDB Server 负责接收 SQL 请求,处理 SQL 相关的逻辑,并通过 PD 找到存储计算所需数据的 TiKV 地址,与 TiKV 交互获取数据,最终返回结果。TiDB Server 是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(如LVS、HAProxy 或 F5)对外提供统一的接入地址。 + +## PD Server + +Placement Driver (简称 PD) 是整个集群的管理模块,其主要工作有三个:一是存储集群的元信息(某个 Key 存储在哪个 TiKV 节点);二是对 TiKV 集群进行调度和负载均衡(如数据的迁移、Raft group leader 的迁移等);三是分配全局唯一且递增的事务 ID。 + +PD 是一个集群,需要部署奇数个节点,一般线上推荐至少部署 3 个节点。 + +## TiKV Server + +TiKV Server 负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。存储数据的基本单位是 Region,每个 Region 负责存储一个 Key Range(从 StartKey 到 EndKey 的左闭右开区间)的数据,每个 TiKV 节点会负责多个 Region。TiKV 使用 Raft 协议做复制,保持数据的一致性和容灾。副本以 Region 为单位进行管理,不同节点上的多个 Region 构成一个 Raft Group,互为副本。数据在多个 TiKV 之间的负载均衡由 PD 调度,这里也是以 Region 为单位进行调度。 + +## TiSpark + +TiSpark 作为 TiDB 中解决用户复杂 OLAP 需求的主要组件,将 Spark SQL 直接运行在 TiDB 存储层上,同时融合 TiKV 分布式集群的优势,并融入大数据社区生态。至此,TiDB 可以通过一套系统,同时支持 OLTP 与 OLAP,免除用户数据同步的烦恼。 \ No newline at end of file diff --git a/features.md b/features.md new file mode 100644 index 000000000000..b62582fd27fb --- /dev/null +++ b/features.md @@ -0,0 +1,28 @@ +--- +title: TiDB 核心特性 +category: introduction +--- + +# TiDB 核心特性 + +本文详细介绍 TiDB 的两大核心特性:水平扩展与高可用。 + +## 水平扩展 + +无限水平扩展是 TiDB 的一大特点,这里说的水平扩展包括两方面:计算能力和存储能力。TiDB Server 负责处理 SQL 请求,随着业务的增长,可以简单的添加 TiDB Server 节点,提高整体的处理能力,提供更高的吞吐。TiKV 负责存储数据,随着数据量的增长,可以部署更多的 TiKV Server 节点解决数据 Scale 的问题。PD 会在 TiKV 节点之间以 Region 为单位做调度,将部分数据迁移到新加的节点上。所以在业务的早期,可以只部署少量的服务实例(推荐至少部署 3 个 TiKV, 3 个 PD,2 个 TiDB),随着业务量的增长,按照需求添加 TiKV 或者 TiDB 实例。 + +## 高可用 + +高可用是 TiDB 的另一大特点,TiDB/TiKV/PD 这三个组件都能容忍部分实例失效,不影响整个集群的可用性。下面分别说明这三个组件的可用性、单个实例失效后的后果以及如何恢复。 + +- TiDB + + TiDB 是无状态的,推荐至少部署两个实例,前端通过负载均衡组件对外提供服务。当单个实例失效时,会影响正在这个实例上进行的 Session,从应用的角度看,会出现单次请求失败的情况,重新连接后即可继续获得服务。单个实例失效后,可以重启这个实例或者部署一个新的实例。 + +- PD + + PD 是一个集群,通过 Raft 协议保持数据的一致性,单个实例失效时,如果这个实例不是 Raft 的 leader,那么服务完全不受影响;如果这个实例是 Raft 的 leader,会重新选出新的 Raft leader,自动恢复服务。PD 在选举的过程中无法对外提供服务,这个时间大约是3秒钟。推荐至少部署三个 PD 实例,单个实例失效后,重启这个实例或者添加新的实例。 + +- TiKV + + TiKV 是一个集群,通过 Raft 协议保持数据的一致性(副本数量可配置,默认保存三副本),并通过 PD 做负载均衡调度。单个节点失效时,会影响这个节点上存储的所有 Region。对于 Region 中的 Leader 结点,会中断服务,等待重新选举;对于 Region 中的 Follower 节点,不会影响服务。当某个 TiKV 节点失效,并且在一段时间内(默认 30 分钟)无法恢复,PD 会将其上的数据迁移到其他的 TiKV 节点上。 \ No newline at end of file diff --git a/overview.md b/overview.md index f638b1956eed..ea017acc4e18 100644 --- a/overview.md +++ b/overview.md @@ -1,15 +1,13 @@ --- -title: TiDB 简介与整体架构 +title: TiDB 简介 category: introduction --- -# TiDB 简介与整体架构 - -## TiDB 简介 +# TiDB 简介 TiDB 是 PingCAP 公司设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案。 -TiDB 具备如下核心特性: +TiDB 具备如下特性: - 高度兼容 MySQL @@ -43,50 +41,4 @@ TiDB 对业务没有任何侵入性,能优雅的替换传统的数据库中间 - [说存储](https://pingcap.com/blog-cn/tidb-internal-1/) - [说计算](https://pingcap.com/blog-cn/tidb-internal-2/) -- [谈调度](https://pingcap.com/blog-cn/tidb-internal-3/) - -## TiDB 整体架构 - -要深入了解 TiDB 的水平扩展和高可用特点,首先需要了解 TiDB 的整体架构。TiDB 集群主要包括三个核心组件:TiDB Server,PD Server 和 TiKV Server。此外,还有用于解决用户复杂 OLAP 需求的 [TiSpark](https://github.com/pingcap/tispark/) 组件。 - -![TiDB Architecture](media/tidb-architecture.png) - -### TiDB Server - -TiDB Server 负责接收 SQL 请求,处理 SQL 相关的逻辑,并通过 PD 找到存储计算所需数据的 TiKV 地址,与 TiKV 交互获取数据,最终返回结果。TiDB Server 是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(如LVS、HAProxy 或 F5)对外提供统一的接入地址。 - -### PD Server - -Placement Driver (简称 PD) 是整个集群的管理模块,其主要工作有三个:一是存储集群的元信息(某个 Key 存储在哪个 TiKV 节点);二是对 TiKV 集群进行调度和负载均衡(如数据的迁移、Raft group leader 的迁移等);三是分配全局唯一且递增的事务 ID。 - -PD 是一个集群,需要部署奇数个节点,一般线上推荐至少部署 3 个节点。 - -### TiKV Server - -TiKV Server 负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。存储数据的基本单位是 Region,每个 Region 负责存储一个 Key Range(从 StartKey 到 EndKey 的左闭右开区间)的数据,每个 TiKV 节点会负责多个 Region。TiKV 使用 Raft 协议做复制,保持数据的一致性和容灾。副本以 Region 为单位进行管理,不同节点上的多个 Region 构成一个 Raft Group,互为副本。数据在多个 TiKV 之间的负载均衡由 PD 调度,这里也是以 Region 为单位进行调度。 - -### TiSpark - -TiSpark 作为 TiDB 中解决用户复杂 OLAP 需求的主要组件,将 Spark SQL 直接运行在 TiDB 存储层上,同时融合 TiKV 分布式集群的优势,并融入大数据社区生态。至此,TiDB 可以通过一套系统,同时支持 OLTP 与 OLAP,免除用户数据同步的烦恼。 - -## 核心特性 - -### 水平扩展 - -无限水平扩展是 TiDB 的一大特点,这里说的水平扩展包括两方面:计算能力和存储能力。TiDB Server 负责处理 SQL 请求,随着业务的增长,可以简单的添加 TiDB Server 节点,提高整体的处理能力,提供更高的吞吐。TiKV 负责存储数据,随着数据量的增长,可以部署更多的 TiKV Server 节点解决数据 Scale 的问题。PD 会在 TiKV 节点之间以 Region 为单位做调度,将部分数据迁移到新加的节点上。所以在业务的早期,可以只部署少量的服务实例(推荐至少部署 3 个 TiKV, 3 个 PD,2 个 TiDB),随着业务量的增长,按照需求添加 TiKV 或者 TiDB 实例。 - -### 高可用 - -高可用是 TiDB 的另一大特点,TiDB/TiKV/PD 这三个组件都能容忍部分实例失效,不影响整个集群的可用性。下面分别说明这三个组件的可用性、单个实例失效后的后果以及如何恢复。 - -+ TiDB - - TiDB 是无状态的,推荐至少部署两个实例,前端通过负载均衡组件对外提供服务。当单个实例失效时,会影响正在这个实例上进行的 Session,从应用的角度看,会出现单次请求失败的情况,重新连接后即可继续获得服务。单个实例失效后,可以重启这个实例或者部署一个新的实例。 - -+ PD - - PD 是一个集群,通过 Raft 协议保持数据的一致性,单个实例失效时,如果这个实例不是 Raft 的 leader,那么服务完全不受影响;如果这个实例是 Raft 的 leader,会重新选出新的 Raft leader,自动恢复服务。PD 在选举的过程中无法对外提供服务,这个时间大约是3秒钟。推荐至少部署三个 PD 实例,单个实例失效后,重启这个实例或者添加新的实例。 - -+ TiKV - - TiKV 是一个集群,通过 Raft 协议保持数据的一致性(副本数量可配置,默认保存三副本),并通过 PD 做负载均衡调度。单个节点失效时,会影响这个节点上存储的所有 Region。对于 Region 中的 Leader 结点,会中断服务,等待重新选举;对于 Region 中的 Follower 节点,不会影响服务。当某个 TiKV 节点失效,并且在一段时间内(默认 30 分钟)无法恢复,PD 会将其上的数据迁移到其他的 TiKV 节点上。 +- [谈调度](https://pingcap.com/blog-cn/tidb-internal-3/) \ No newline at end of file From db9fb3a89d7a604c6ea64362d107b6f2f407a05f Mon Sep 17 00:00:00 2001 From: lilin90 Date: Thu, 13 Sep 2018 12:00:13 +0800 Subject: [PATCH 24/60] readme: udpate intro --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 000696a4447d..0226a397ce4d 100755 --- a/README.md +++ b/README.md @@ -3,8 +3,9 @@ ## 目录 + TiDB 简介与整体架构 - - [TiDB 简介](overview.md#tidb-简介) - - [TiDB 整体架构](overview.md#tidb-整体架构) + - [TiDB 简介](overview.md) + - [TiDB 整体架构](architecture.md) + - [TiDB 核心特性](features.md) - [TiDB 快速入门指南](QUICKSTART.md) + TiDB 用户文档 + TiDB 数据库管理 From 98e1078bfcb01a62f11f3db3fe3eff014431abb3 Mon Sep 17 00:00:00 2001 From: lilin90 Date: Thu, 13 Sep 2018 13:44:18 +0800 Subject: [PATCH 25/60] overview: add a link to MySQL compatibility Via: https://github.com/pingcap/docs/pull/613 --- overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overview.md b/overview.md index ea017acc4e18..a95446aaf0f7 100644 --- a/overview.md +++ b/overview.md @@ -11,7 +11,7 @@ TiDB 具备如下特性: - 高度兼容 MySQL - 大多数情况下,无需修改代码即可从 MySQL 轻松迁移至 TiDB,分库分表后的 MySQL 集群亦可通过 TiDB 工具进行实时迁移。 + [大多数情况下](sql/mysql-compatibility.md),无需修改代码即可从 MySQL 轻松迁移至 TiDB,分库分表后的 MySQL 集群亦可通过 TiDB 工具进行实时迁移。 - 水平弹性扩展 From 2c666d124e433c454154e54c48ba1ea8abbebcfe Mon Sep 17 00:00:00 2001 From: lilin90 Date: Thu, 13 Sep 2018 16:03:26 +0800 Subject: [PATCH 26/60] *: reorganize the quick start structure Via: https://github.com/pingcap/docs/pull/598, https://github.com/pingcap/docs/pull/594, https://github.com/pingcap/docs/pull/583 --- QUICKSTART.md | 296 +++----------------------------------------------- README.md | 4 +- try-tidb.md | 198 +++++++++++++++++++++++++++++++++ 3 files changed, 215 insertions(+), 283 deletions(-) create mode 100644 try-tidb.md diff --git a/QUICKSTART.md b/QUICKSTART.md index be47bb57ab40..0ee848fb9b58 100644 --- a/QUICKSTART.md +++ b/QUICKSTART.md @@ -5,291 +5,23 @@ category: deployment # TiDB 快速入门指南 -## 关于 TiDB +作为开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,TiDB 可以部署在本地和云平台上,支持公有云、私有云和混合云。 -TiDB 是 PingCAP 公司受 Google [Spanner](http://research.google.com/archive/spanner.html) / [F1](http://research.google.com/pubs/pub41344.html) 论文启发而设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案。 +## TiDB 部署方式 -## 关于本指南 +你可以根据实际场景或需求,选择相应的方式来部署 TiDB 集群: -本指南为您介绍如何使用 TiDB-Ansible 快速部署一个 TiDB 集群,并了解 TiDB 的基本操作和管理。 +- [使用 Ansible 部署](op-guide/ansible-deployment.md):如果用于生产环境,须使用 Ansible 部署 TiDB 集群。 +- [使用 Ansible 离线部署](op-guide/offline-ansible-deployment.md):如果部署环境无法访问网络,可使用 Ansible 进行离线部署。 +- [使用 Docker Compose 部署](op-guide/docker-compose.md):如果你只是想测试 TiDB、体验 TiDB 的特性,或者用于开发环境,可以使用 Docker Compose 在本地快速部署 TiDB 集群。该部署方式不适用于生产环境。 +- [使用 Docker 部署](op-guide/docker-deployment.md):你可以使用 Docker 部署 TiDB 集群,但该部署方式不适用于生产环境。 -## TiDB 集群部署 +## 项目源码 -本节具体介绍如何部署一个 TiDB 集群。一个 TiDB 集群由不同的模块组成,包括:TiDB 服务器、TiKV 服务器、Placement Driver (PD) 服务器。 +TiDB 集群所有组件的源码均可从 GitHub 上直接访问: -架构图如下所示: - -![TiDB Architecture](media/tidb-architecture.png) - -参考 [TiDB Ansible 部署方案](./op-guide/ansible-deployment.md)。 - -## TiDB 基本操作 - -本节具体介绍 TiDB 中基本的增删改查操作。 - -### 创建、查看和删除数据库 - -使用 `CREATE DATABASE` 语句创建数据库。语法如下: - -```sql -CREATE DATABASE db_name [options]; -``` - -例如,要创建一个名为 `samp_db` 的数据库,可使用以下语句: - -```sql -CREATE DATABASE IF NOT EXISTS samp_db; -``` - -使用 `SHOW DATABASES` 语句查看数据库: - -```sql -SHOW DATABASES; -``` - -使用 `DROP DATABASE` 语句删除数据库,例如: - -```sql -DROP DATABASE samp_db; -``` - -### 创建、查看和删除表 - -使用 `CREATE TABLE` 语句创建表。语法如下: - -```sql -CREATE TABLE table_name column_name data_type constraint; -``` - -例如: - -```sql -CREATE TABLE person ( - number INT(11), - name VARCHAR(255), - birthday DATE - ); -``` - -如果表已存在,添加 `IF NOT EXISTS` 可防止发生错误: - -```sql -CREATE TABLE IF NOT EXISTS person ( - number INT(11), - name VARCHAR(255), - birthday DATE -); -``` - -使用 `SHOW CREATE` 语句查看建表语句。例如: - -```sql -SHOW CREATE table person; -``` - -使用 `SHOW FULL COLUMNS` 语句查看表的列。 例如: - -```sql -SHOW FULL COLUMNS FROM person; -``` - -使用 `DROP TABLE` 语句删除表。例如: - -```sql -DROP TABLE person; -``` - -或者 - -```sql -DROP TABLE IF EXISTS person; -``` - -使用 `SHOW TABLES` 语句查看数据库中的所有表。例如: - -```sql -SHOW TABLES FROM samp_db; -``` - -### 创建、查看和删除索引 - -对于值不唯一的列,可使用 `CREATE INDEX` 或 `ALTER TABLE` 语句。例如: - -```sql -CREATE INDEX person_num ON person (number); -``` - -或者 - -```sql -ALTER TABLE person ADD INDEX person_num (number); -``` - -对于值唯一的列,可以创建唯一索引。例如: - -```sql -CREATE UNIQUE INDEX person_num ON person (number); -``` - -或者 - -```sql -ALTER TABLE person ADD UNIQUE person_num on (number); -``` - -使用 `SHOW INDEX` 语句查看表内所有索引: - -```sql -SHOW INDEX from person; -``` - -使用 `ALTER TABLE` 或 `DROP INDEX` 语句来删除索引。与 `CREATE INDEX` 语句类似,`DROP INDEX` 也可以嵌入 `ALTER TABLE` 语句。例如: - -```sql -DROP INDEX person_num ON person; -ALTER TABLE person DROP INDEX person_num; -``` - -### 增删改查数据 - -使用 `INSERT` 语句向表内插入数据。例如: - -```sql -INSERT INTO person VALUES("1","tom","20170912"); -``` - -使用 `SELECT` 语句检索表内数据。例如: - -```sql -SELECT * FROM person; -+--------+------+------------+ -| number | name | birthday | -+--------+------+------------+ -| 1 | tom | 2017-09-12 | -+--------+------+------------+ -``` -使用 `UPDATE` 语句修改表内数据。例如: - -```sql -UPDATE person SET birthday='20171010' WHERE name='tom'; - -SELECT * FROM person; -+--------+------+------------+ -| number | name | birthday | -+--------+------+------------+ -| 1 | tom | 2017-10-10 | -+--------+------+------------+ -``` - -使用 `DELETE` 语句删除表内数据: - -```sql -DELETE FROM person WHERE number=1; -SELECT * FROM person; -Empty set (0.00 sec) -``` - -### 创建、授权和删除用户 - -使用 `CREATE USER` 语句创建一个用户 `tiuser`,密码为 `123456`: - -```sql -CREATE USER 'tiuser'@'localhost' IDENTIFIED BY '123456'; -``` - -授权用户 `tiuser` 可检索数据库 `samp_db` 内的表: - -```sql -GRANT SELECT ON samp_db.* TO 'tiuser'@'localhost'; -``` - -查询用户 `tiuser` 的权限: - -```sql -SHOW GRANTS for tiuser@localhost; -``` - -删除用户 `tiuser`: - -```sql -DROP USER 'tiuser'@'localhost'; -``` - -## TiDB 集群监控 - -打开浏览器,访问以下监控平台: - -地址:`http://172.16.10.3:3000`, -默认帐户和密码为:`admin`@`admin`。 - -### 重要监控指标详解 - -+ PD - - Storage Capacity : TiDB 集群总可用数据库空间大小 - - Current Storage Size : TiDB 集群目前已用数据库空间大小 - - Store Status -- up store : TiKV 正常节点数量 - - Store Status -- down store : TiKV 异常节点数量 - - 如果大于 0,证明有节点不正常 - - Store Status -- offline store : 手动执行下线操作 TiKV 节点数量 - - Store Status -- Tombstone store : 下线成功的 TiKV 节点数量 - - Current storage usage : TiKV 集群存储空间占用率 - - 超过 80% 应考虑添加 TiKV 节点 - - 99% completed_cmds_duration_seconds : 99% pd-server 请求完成时间 - - 小于 5ms - - average completed_cmds_duration_seconds : pd-server 请求平均完成时间 - - 小于 50ms - - leader balance ratio : leader ratio 最大的节点与最小的节点的差 - - 均衡状况下一般小于 5%,节点重启时会比较大 - - region balance ratio : region ratio 最大的节点与最小的节点的差 - - 均衡状况下一般小于 5%,新增/下线节点时会比较大 - -+ TiDB - - handle_requests_duration_seconds : 请求 PD 获取 TSO 响应时间 - - 小于 100ms - - tidb server QPS : 集群的请求量 - - - connection count : 从业务服务器连接到数据库的连接数 - - 和业务相关。但是如果连接数发生跳变,需要查明原因。比如突然掉为 0,可以检查网络是否中断; - 如果突然上涨,需要检查业务。 - - statement count : 单位时间内不同类型语句执行的数目 - - Query Duration 99th percentile : 99% 的 query 时间 - -+ TiKV - - 99% & 99.99% scheduler command duration : 99% & 99.99% 命令执行的时间 - - 99% 小于 50ms;99.99% 小于 100ms - - 95% & 99% storage async_request duration : 95% & 99% Raft 命令执行时间 - - 95% 小于 50ms;99% 小于 100ms - - server report failure message : 发送失败或者收到了错误的 message - - 如果出现了大量的 unreachadble 的消息,表明系统网络出现了问题。如果有 store not match 这样的错误, - 表明收到了不属于这个集群发过来的消息 - - Vote : Raft vote 的频率 - - 通常这个值只会在发生 split 的时候有变动,如果长时间出现了 vote 偏高的情况,证明系统出现了严重的问题, - 有一些节点无法工作了 - - 95% & 99% coprocessor request duration : 95% & 99% coprocessor 执行时间 - - 和业务相关,但通常不会出现持续高位的值 - - Pending task : 累积的任务数量 - - 除了 pd worker,其他任何偏高都属于异常 - - stall : RocksDB Stall 时间 - - 大于 0,表明 RocksDB 忙不过来,需要注意 IO 和 CPU 了 - - channel full : channel 满了,表明线程太忙无法处理 - - 如果大于 0,表明线程已经没法处理了 - - 95% send_message_duration_seconds : 95% 发送消息的时间 - - 小于 50ms - - leader/region : 每个 TiKV 的 leader/region 数量 +- [TiDB](https://github.com/pingcap/tidb) +- [TiKV](https://github.com/tikv/tikv) +- [PD](https://github.com/pingcap/pd) +- [TiSpark](https://github.com/pingcap/tispark) +- [TiDB Operator](https://github.com/pingcap/tidb-operator) \ No newline at end of file diff --git a/README.md b/README.md index 000696a4447d..94ef3a4413eb 100755 --- a/README.md +++ b/README.md @@ -5,7 +5,9 @@ + TiDB 简介与整体架构 - [TiDB 简介](overview.md#tidb-简介) - [TiDB 整体架构](overview.md#tidb-整体架构) -- [TiDB 快速入门指南](QUICKSTART.md) ++ TiDB 快速入门 + - [快速入门指南](QUICKSTART.md) + - [SQL 基本操作](try-tidb.md) + TiDB 用户文档 + TiDB 数据库管理 - [TiDB 服务](sql/tidb-server.md) diff --git a/try-tidb.md b/try-tidb.md new file mode 100644 index 000000000000..a8ad2bc3afed --- /dev/null +++ b/try-tidb.md @@ -0,0 +1,198 @@ +--- +title: TiDB 基本操作 +category: user guide +--- + +# TiDB 基本操作 + +成功部署 TiDB 集群之后,便可以在 TiDB 中执行 SQL 语句了。因为 TiDB 兼容 MySQL,你可以使用 MySQL 客户端连接 TiDB,并且[大多数情况下](sql/mysql-compatibility.md)可以直接执行 MySQL 语句。 + +本文介绍 CRUD 操作等基本的 SQL 语句。完整的 SQL 语句列表,参见 [TiDB SQL 语法详解](https://pingcap.github.io/sqlgram/)。 + +## 创建、查看和删除数据库 + +使用 `CREATE DATABASE` 语句创建数据库。语法如下: + +```sql +CREATE DATABASE db_name [options]; +``` + +例如,要创建一个名为 `samp_db` 的数据库,可使用以下语句: + +```sql +CREATE DATABASE IF NOT EXISTS samp_db; +``` + +使用 `SHOW DATABASES` 语句查看数据库: + +```sql +SHOW DATABASES; +``` + +使用 `DROP DATABASE` 语句删除数据库,例如: + +```sql +DROP DATABASE samp_db; +``` + +## 创建、查看和删除表 + +使用 `CREATE TABLE` 语句创建表。语法如下: + +```sql +CREATE TABLE table_name column_name data_type constraint; +``` + +例如: + +```sql +CREATE TABLE person ( + number INT(11), + name VARCHAR(255), + birthday DATE + ); +``` + +如果表已存在,添加 `IF NOT EXISTS` 可防止发生错误: + +```sql +CREATE TABLE IF NOT EXISTS person ( + number INT(11), + name VARCHAR(255), + birthday DATE +); +``` + +使用 `SHOW CREATE` 语句查看建表语句。例如: + +```sql +SHOW CREATE table person; +``` + +使用 `SHOW FULL COLUMNS` 语句查看表的列。 例如: + +```sql +SHOW FULL COLUMNS FROM person; +``` + +使用 `DROP TABLE` 语句删除表。例如: + +```sql +DROP TABLE person; +``` + +或者 + +```sql +DROP TABLE IF EXISTS person; +``` + +使用 `SHOW TABLES` 语句查看数据库中的所有表。例如: + +```sql +SHOW TABLES FROM samp_db; +``` + +## 创建、查看和删除索引 + +对于值不唯一的列,可使用 `CREATE INDEX` 或 `ALTER TABLE` 语句。例如: + +```sql +CREATE INDEX person_num ON person (number); +``` + +或者 + +```sql +ALTER TABLE person ADD INDEX person_num (number); +``` + +对于值唯一的列,可以创建唯一索引。例如: + +```sql +CREATE UNIQUE INDEX person_num ON person (number); +``` + +或者 + +```sql +ALTER TABLE person ADD UNIQUE person_num on (number); +``` + +使用 `SHOW INDEX` 语句查看表内所有索引: + +```sql +SHOW INDEX from person; +``` + +使用 `ALTER TABLE` 或 `DROP INDEX` 语句来删除索引。与 `CREATE INDEX` 语句类似,`DROP INDEX` 也可以嵌入 `ALTER TABLE` 语句。例如: + +```sql +DROP INDEX person_num ON person; +ALTER TABLE person DROP INDEX person_num; +``` + +## 增删改查数据 + +使用 `INSERT` 语句向表内插入数据。例如: + +```sql +INSERT INTO person VALUES("1","tom","20170912"); +``` + +使用 `SELECT` 语句检索表内数据。例如: + +```sql +SELECT * FROM person; ++--------+------+------------+ +| number | name | birthday | ++--------+------+------------+ +| 1 | tom | 2017-09-12 | ++--------+------+------------+ +``` +使用 `UPDATE` 语句修改表内数据。例如: + +```sql +UPDATE person SET birthday='20171010' WHERE name='tom'; + +SELECT * FROM person; ++--------+------+------------+ +| number | name | birthday | ++--------+------+------------+ +| 1 | tom | 2017-10-10 | ++--------+------+------------+ +``` + +使用 `DELETE` 语句删除表内数据: + +```sql +DELETE FROM person WHERE number=1; +SELECT * FROM person; +Empty set (0.00 sec) +``` + +## 创建、授权和删除用户 + +使用 `CREATE USER` 语句创建一个用户 `tiuser`,密码为 `123456`: + +```sql +CREATE USER 'tiuser'@'localhost' IDENTIFIED BY '123456'; +``` + +授权用户 `tiuser` 可检索数据库 `samp_db` 内的表: + +```sql +GRANT SELECT ON samp_db.* TO 'tiuser'@'localhost'; +``` + +查询用户 `tiuser` 的权限: + +```sql +SHOW GRANTS for tiuser@localhost; +``` + +删除用户 `tiuser`: + +```sql +DROP USER 'tiuser'@'localhost'; +``` \ No newline at end of file From 551baa28edc3a28d88584e0e303e6ab09ce6baf9 Mon Sep 17 00:00:00 2001 From: lilin90 Date: Thu, 13 Sep 2018 16:05:34 +0800 Subject: [PATCH 27/60] readme: update wording --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0226a397ce4d..eb425a9bf505 100755 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## 目录 -+ TiDB 简介与整体架构 ++ 关于 TiDB - [TiDB 简介](overview.md) - [TiDB 整体架构](architecture.md) - [TiDB 核心特性](features.md) From 20325dd266137af618cd10cea7c2a61c48488fde Mon Sep 17 00:00:00 2001 From: lilin90 Date: Mon, 17 Sep 2018 11:01:29 +0800 Subject: [PATCH 28/60] releases, readme: add 2.1 RC2 release notes --- README.md | 1 + releases/21rc2.md | 119 ++++++++++++++++++++++++++++++++++++++++++++++ releases/rn.md | 1 + 3 files changed, 121 insertions(+) create mode 100644 releases/21rc2.md diff --git a/README.md b/README.md index 94ef3a4413eb..8b4d285539b3 100755 --- a/README.md +++ b/README.md @@ -122,6 +122,7 @@ - [常见问题与解答(FAQ)](FAQ.md) - [最佳实践](https://pingcap.com/blog-cn/tidb-best-practice/) + [版本发布历史](releases/rn.md) + - [2.1 RC2](releases/21rc2.md) - [2.0.7](releases/207.md) - [2.1 RC1](releases/21rc1.md) - [2.0.6](releases/206.md) diff --git a/releases/21rc2.md b/releases/21rc2.md new file mode 100644 index 000000000000..231b3f653bfc --- /dev/null +++ b/releases/21rc2.md @@ -0,0 +1,119 @@ +--- +title: TiDB 2.1 RC2 Release Notes +category: Releases +--- + +# TiDB 2.1 RC2 Release Notes + +2018 年 9 月 14 日,TiDB 发布 2.1 RC2 版。相比 2.1 RC1 版本,该版本对系统稳定性、优化器、统计信息以及执行引擎做了很多改进。 + +## TiDB + +- SQL 优化器 + - 新版 Planner 设计方案 [#7543](https://github.com/pingcap/tidb/pull/7543) + - 提升常量传播优化规则 [#7276](https://github.com/pingcap/tidb/pull/7276) + - 增强 Range 的计算逻辑使其能够同时处理多个 `IN` 或者等值条件 [#7577](https://github.com/pingcap/tidb/pull/7577) + - 修复当 Range 为空时,`TableScan` 的估算结果不正确的问题 [#7583](https://github.com/pingcap/tidb/pull/7583) + - 为 `UPDATE` 语句支持 `PointGet` 算子 [#7586](https://github.com/pingcap/tidb/pull/7586) + - 修复 `FirstRow` 聚合函数某些情况下在执行过程中 panic 的问题 [#7624](https://github.com/pingcap/tidb/pull/7624) +- SQL 执行引擎 + - 解决 HashJoin 算子在遇到错误的情况下潜在的 DataRace 问题 [#7554](https://github.com/pingcap/tidb/pull/7554) + - HashJoin 算子同时读取内表数据和构建 Hash 表 [#7544](https://github.com/pingcap/tidb/pull/7544) + - 优化 Hash 聚合算子性能 [#7541](https://github.com/pingcap/tidb/pull/7541) + - 优化 Join 算子性能 [#7493](https://github.com/pingcap/tidb/pull/7493)、[#7433](https://github.com/pingcap/tidb/pull/7433) + - 修复 `UPDATE JOIN` 在 Join 顺序改变后结果不正确的问题 [#7571](https://github.com/pingcap/tidb/pull/7571) + - 提升 Chunk 迭代器的性能 [#7585](https://github.com/pingcap/tidb/pull/7585) +- 统计信息 + - 解决重复自动 Analyze 统计信息的问题 [#7550](https://github.com/pingcap/tidb/pull/7550) + - 解决统计信息无变化时更新统计信息遇到错误的问题 [#7530](https://github.com/pingcap/tidb/pull/7530) + - `Analyze` 执行时使用低优先级以及 RC 隔离级别 [#7496](https://github.com/pingcap/tidb/pull/7496) + - 支持只在一天中的某个时间段开启统计信息自动更新的功能 [#7570](https://github.com/pingcap/tidb/pull/7570) + - 修复统计信息写日志时发生的 panic [#7588](https://github.com/pingcap/tidb/pull/7588) + - 支持通过 `ANALYZE TABLE WITH BUCKETS` 语句配置直方图中桶的个数 [#7619](https://github.com/pingcap/tidb/pull/7619) + - 修复更新空的直方图时 panic 的问题 [#7640](https://github.com/pingcap/tidb/pull/7640) + - 使用统计信息更新 `information_schema.tables.data_length` [#7657](https://github.com/pingcap/tidb/pull/7657) +- Server + - 增加 Trace 相关的依赖库 [#7532](https://github.com/pingcap/tidb/pull/7532) + - 开启 Golang 的 mutex profile 功能 [#7512](https://github.com/pingcap/tidb/pull/7512) + - `Admin` 语句需要 `Super_priv` 权限 [#7486](https://github.com/pingcap/tidb/pull/7486) + - 禁止用户 Drop 关键的系统表 [#7471](https://github.com/pingcap/tidb/pull/7471) + - 从 `juju/errors` 切换到 `pkg/errors` [#7151](https://github.com/pingcap/tidb/pull/7151) + - 完成 SQL Tracing 功能原型 [#7016](https://github.com/pingcap/tidb/pull/7016) + - 删除 goroutine pool [#7564](https://github.com/pingcap/tidb/pull/7564) + - 支持使用 `USER1` 信号来查看 goroutine 信息 [#7587](https://github.com/pingcap/tidb/pull/7587) + - 将 TiDB 启动时的内部 SQL 设置为高优先级 [#7616](https://github.com/pingcap/tidb/pull/7616) + - 在监控中用不同的标签区分内部 SQL 和用户 SQL [#7631](https://github.com/pingcap/tidb/pull/7631) + - 缓存最近一周内最慢的 30 条慢查询日志在 TiDB Server 上 [#7646](https://github.com/pingcap/tidb/pull/7646) + - TiDB 集群设置时区的方案 [#7656](https://github.com/pingcap/tidb/pull/7656) + - 丰富 `GC life time is shorter than transaction duration` 错误信息 [#7658](https://github.com/pingcap/tidb/pull/7658) + - 在 TiDB 集群启动时设置集群时区信息 [#7638](https://github.com/pingcap/tidb/pull/7638) +- 兼容性 + - `Year` 类型字段增加 unsigned flag [#7542](https://github.com/pingcap/tidb/pull/7542) + - 修复在 Prepare/Execute 模式下,`Year` 类型结果长度设置问题 [#7525](https://github.com/pingcap/tidb/pull/7525) + - 修复 Prepare/Execute 模式下时间 0 值的处理问题 [#7506](https://github.com/pingcap/tidb/pull/7506) + - 解决整数类型除法实现中的错误处理问题 [#7492](https://github.com/pingcap/tidb/pull/7492) + - 解决 `ComStmtSendLongData` 处理过程中的兼容性问题 [#7485](https://github.com/pingcap/tidb/pull/7485) + - 解决字符串转为整数类型过程中的错误处理问题 [#7483](https://github.com/pingcap/tidb/pull/7483) + - 优化 `information_schema.columns_in_table` 表中的值精度 [#7463](https://github.com/pingcap/tidb/pull/7463) + - 修复使用 MariaDB 客户端对字符串类型数据的写入和更新的兼容性问题 [#7573](https://github.com/pingcap/tidb/pull/7573) + - 修复返回值别名的兼容性问题 [#7600](https://github.com/pingcap/tidb/pull/7600) + - 修复 `information_schema.COLUMNS` 表中浮点数的 `NUMERIC_SCALE` 值不正确的问题 [#7602](https://github.com/pingcap/tidb/pull/7602) + - 解决单行注释内容为空 Parser 报错的问题 [#7612](https://github.com/pingcap/tidb/pull/7612) +- 表达式 + - 在 `insert` 函数中检查 `max_allowed_packet` 的值 [#7528](https://github.com/pingcap/tidb/pull/7528) + - 支持内建函数 `json_contains` [#7443](https://github.com/pingcap/tidb/pull/7443) + - 支持内建函数 `json_contains_path` [#7596](https://github.com/pingcap/tidb/pull/7596) + - 支持内建函数 `encode/decode` [#7622](https://github.com/pingcap/tidb/pull/7622) + - 修复一些时间相关的函数在某些情况下和 MySQL 行为不兼容的问题 [#7636](https://github.com/pingcap/tidb/pull/7636) + - 解决从字符串中解析时间类型数据的兼容性问题 [#7654](https://github.com/pingcap/tidb/pull/7654) + - 解决计算 `DateTime` 类型数据的默认值时没有考虑时区的问题 [#7655](https://github.com/pingcap/tidb/pull/7655) +- DML + - `InsertOnDuplicateUpdate` 语句设置正确的 `last_insert_id` [#7534](https://github.com/pingcap/tidb/pull/7534) + - 减少需要更新 `auto_increment_id` 计数器的情况 [#7515](https://github.com/pingcap/tidb/pull/7515) + - 优化 `Duplicate Key` 错误的报错信息 [#7495](https://github.com/pingcap/tidb/pull/7495) + - 修复 `insert...select...on duplicate key update` 问题 [#7406](https://github.com/pingcap/tidb/pull/7406) + - 支持 `LOAD DATA IGNORE LINES` 语句 [#7576](https://github.com/pingcap/tidb/pull/7576) +- DDL + - 在监控中增加 DDL Job 的类型和当前 Schema 版本的信息 [#7472](https://github.com/pingcap/tidb/pull/7472) + - 完成 `Admin Restore Table` 功能方案设计 [#7383](https://github.com/pingcap/tidb/pull/7383) + - 解决 Bit 类型的默认值超过 128 的问题 [#7249](https://github.com/pingcap/tidb/pull/7249) + - 解决 Bit 类型默认值不能为 `NULL` 的问题 [#7604](https://github.com/pingcap/tidb/pull/7604) + - 减少 DDL 队列中检查 `CREATE TABLE/DATABASE` 任务的时间间隔 [#7608](https://github.com/pingcap/tidb/pull/7608) + - 使用 `ddl/owner/resign` HTTP 接口释放 DDL Owner 并开启新一轮 Owner 选举 [#7649](https://github.com/pingcap/tidb/pull/7649) +- TiKV Go Client + - 支持 `Seek` 操作只获取 `Key` [#7419](https://github.com/pingcap/tidb/pull/7419) +- [Table Partition](https://github.com/pingcap/tidb/projects/6)(实验性) + - 解决无法使用 Bigint 类型列作为 Partition Key 的问题 [#7520](https://github.com/pingcap/tidb/pull/7520) + - 支持 Partitioned Table 添加索引过程中遇到问题回滚操作 [#7437](https://github.com/pingcap/tidb/pull/7437) + +## PD + +- 新特性 + - 支持 `GetAllStores`的接口 [#1228](https://github.com/pingcap/pd/pull/1228) + - Simulator 添加评估调度的统计信息 [#1218](https://github.com/pingcap/pd/pull/1218) +- 功能改进 + - 优化 Down Store 的处理流程,尽快地补副本 [#1222](https://github.com/pingcap/pd/pull/1222) + - 优化 Coordinator 的启动,减少重启 PD 带来的不必要调度 [#1225](https://github.com/pingcap/pd/pull/1225) + - 优化内存使用,减少 heartbeat 带来的内存开销 [#1195](https://github.com/pingcap/pd/pull/1195) + - 优化错误处理,完善日志信息 [#1227](https://github.com/pingcap/pd/pull/1227) + - pd-ctl 支持查询指定 store 的 Region 信息 [#1231](https://github.com/pingcap/pd/pull/1231) + - pd-ctl 支持查询按 version 比对的 topN 的 Region 信息 [#1233](https://github.com/pingcap/pd/pull/1233) + - pd-ctl 支持更精确的 TSO 解码 [#1242](https://github.com/pingcap/pd/pull/1242) +- Bug 修复 + - 修复 pd-ctl 使用 hot store 命令错误退出的问题 [#1244](https://github.com/pingcap/pd/pull/1244) + +## TiKV + +- 性能优化 + - 支持基于统计估算进行 Region split,减少 I/O 开销 [#3511](https://github.com/tikv/tikv/pull/3511) + - 减少部分组件的内存拷贝 [#3530](https://github.com/tikv/tikv/pull/3530) +- 功能改进 + - 增加大量内建函数下推支持 + - 增加 `leader-transfer-max-log-lag` 配置解决特定场景 leader 调度失败的问题 [#3507](https://github.com/tikv/tikv/pull/3507) + - 增加 `max-open-engines` 配置限制 `tikv-importer` 同时打开的 engine 个数 [#3496](https://github.com/tikv/tikv/pull/3496) + - 限制垃圾数据的清理速度,减少对 `snapshot apply` 的影响 [#3547](https://github.com/tikv/tikv/pull/3547) + - 对关键 Raft 消息广播 commit 信息,避免不必要的延迟 [#3592](https://github.com/tikv/tikv/pull/3592) +- Bug 修复 + - 修复新分裂 Region 的 PreVote 消息被丢弃导致的 leader 选举问题 [#3557](https://github.com/tikv/tikv/pull/3557) + - 修复 Region merge 以后 follower 的相关统计信息 [#3573](https://github.com/tikv/tikv/pull/3573) + - 修复 local reader 使用过期 Region 信息的问题 [#3565](https://github.com/tikv/tikv/pull/3565) \ No newline at end of file diff --git a/releases/rn.md b/releases/rn.md index c92e4901204c..bd0bed83f282 100644 --- a/releases/rn.md +++ b/releases/rn.md @@ -7,6 +7,7 @@ category: release TiDB 历史版本发布声明如下: + - [2.1 RC2](releases/21rc2.md) - [2.0.7](207.md) - [2.1 RC1](releases/21rc1.md) - [2.0.6](206.md) From 902e06f85449c99831b24caf95a3a2d2db5c6048 Mon Sep 17 00:00:00 2001 From: rleungx Date: Wed, 12 Sep 2018 16:41:48 +0800 Subject: [PATCH 29/60] add more pd-ctl commands --- tools/pd-control.md | 86 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 8 deletions(-) diff --git a/tools/pd-control.md b/tools/pd-control.md index 259ba57e032a..48cf716cbc43 100644 --- a/tools/pd-control.md +++ b/tools/pd-control.md @@ -84,7 +84,7 @@ export PD_ADDR=http://127.0.0.1:2379 } ``` -### config [show | set \ \] +### config [show | set