https://www.jianshu.com/p/2ecdb4642579

在TiDB 中,“修改配置参数”似乎是个不精准的说法,它实际包含了以下内容:

  • 修改 TiDB 的系统变量
  • 修改集群配置
    - tiup 修改集群配置
    - set config 在线修改集群配置

总结

TiDB的配置修改比较混乱,先做个总结,再介绍具体内容:

  1. TiDB 的参数作用域分 global、instance、session 3个级别。show global variables 查看的是全局所有 TiDB Server 节点的变量设置;show variables 查看的是 instance 或者 session 级别的变量设置。注意不包括 PD、TiKV的配置;

  2. set global variables 是通过 kv 存储持久化的,不会持久化到 TiDB 的配置文件中,所以不用担心 tiup upgrade 和 tiup reload 等运维操作会把配置文件覆盖,不会导致修改失效,因为这个修改的持久化不依赖配置文件;

  3. set session variables 修改变量的作用域为 session 级别或者 instance 级别,只能临时修改变量,不会被持久化,所以如果要持久化,需要先手工修改目标 TiDB 的配置文件,并且用 tiup edit-config 来编辑参数,但不需要执行 tiup reload(这个操作会无差别的重启);

  4. TiDB 某些参数只读,无法通过 set variables 修改,使用 tiup edit-config && tiup reload 进行修改。不过目前官方文档只记录有3个只读变量:hostname、tidb_config、tidb_current_ts,作用域比较奇怪,介绍也不清楚,看起来没有修改的必要;

  5. set config 当前属于属于实验性功能,不建议在生产使用。目前只支持修改 TiKV 和 PD 的配置,TIDB的配置修改使用 set global/session variables 方法;

  6. set config 修改配置会持久化到配置文件,为了防止 tiup upgrade 和 tiup reload 等运维操作把配置文件覆盖导致修改失效,还需要执行 tiup edit-config 来编辑参数,不需要执行 tiup reload;

  7. set config 对于不可动态修改的配置不会报错,但是会有 warnings 信息,可通过 show warnings; 查看。对于不能动态修改的参数使用 tiup 进行修改:

  8. tiup edit-config && tiup reload 可以修改集群所有组件的参数并且持久化,但是 tiup reload 会无差别的滚动重启目标组件(不管修改的配置参数是否可以动态修改),注意加参数 [-N <nodes>] [-R <roles>] 减小重启组件范围。

修改 TiDB Server系统变量

查看TiDB系统变量:

mysql> show global variables;
.... mysql> show global variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | 1 |
+---------------+-------+
全局修改:

集群中所有 TiDB Server 都生效;

  • 只对新 TiDB 连接会话生效,当前活动连接会话不受影响;
  • 修改会被持久化,重启仍生效。
mysql> set global autocommit=0;
Query OK, 0 rows affected (0.02 sec)

持久化在哪里?
持久化在 kv 存储中,跟数据一样持久化了,不会持久化在 conf/tidb.toml 配置文件中。所以不用担心 tiup upgrade 和 tiup reload 等运维操作会把配置文件覆盖,不会导致修改失效,因为这个修改的持久化不依赖配置文件。

会话级修改:

有些参数的作用域只有会话级别。也就是只能会话级修改,这不代表着不能被动态修改。

  • 当前TiDB实例的当前会话生效;
  • 修改不会被持久化,重启失效(显然的)。
mysql> set session autocommit=1;
Query OK, 0 rows affected (0.00 sec)
Instance级修改:
  • 当前TiDB实例的所有会话生效;
  • 修改不会被持久化,重启失效。

修改方式和会话级修改一样:

mysql> set session tidb_slow_log_threshold=1000;
Query OK, 0 rows affected (0.00 sec)

修改 Instance 级别的参数修改不会持久化,那么如何持久化呢?
a. 手工修改 TiDB 的配置文件:

[root@localhost data]# vim tidb-deploy/tidb-4000/conf/tidb.toml
[log]
slow-threshold = 1000

b. 并使用 tiup edit-config 来修改对应的配置项,不需要做 tiup reload:

tiup cluster edit-config tidb-test

内容如下:

tidb_servers:
- host: 10.186.64.59
...
config:
log.slow-threshold: 1000
...
只读变量修改:

目前查看官方文档,发现只有3个只读变量:hostname、tidb_config、tidb_current_ts,没法通过 set variables 修改。作用域比较奇怪,用法介绍也不清楚,看起来没有修改的必要。如果一定要修改可以通过 tiup 方法修改。

修改集群配置

使用 tiup 修改集群配置

修改集群配置包括TiDB、TiKV 以及 PD 在内的各组件的配置进行修改。

1. tiup edit-config

使用 edit-config 命令来编辑参数,以编辑模式打开该集群的配置文件:

tiup cluster edit-config tidb-test

如果配置的生效范围为该组件全局,则配置到 server_configs,比如修改所有 tikv 的 log-level 为 waring(默认是 info):

server_configs:
tidb:
...
tikv:
log-level: warning
readpool.coprocessor.use-unified-pool: true
readpool.storage.use-unified-pool: false
...

如果配置的生效范围为某个节点,则配置到具体节点的 config 中。例如:

tidb_servers:
- host: 10.186.64.59
...
config:
log.slow-threshold: 1000
...
  1. tiup reload

tiup reload 分发配置并滚动重启组件,无论是否可以动态修改的参数都会重启,并且默认会重启所有组件,可以选择指定节点或者组件:
tiup cluster reload ${cluster-name} [-N <nodes>] [-R <roles>]

示例中我们只修改 tikv 的 log-level 为 waring,所以用 -R tikv 指定只重启 tikv 节点:

tiup cluster reload tidb-test -R tikv

会滚动重启 TiKV 服务,防止服务不可用:

 
set config 在线修改集群配置

set config 当前4.0版本属于实验性功能,不建议在生产使用:https://docs.pingcap.com/zh/tidb/stable/dynamic-config
目前只支持修改 TiKV 和 PD 的配置,TIDB的配置修改用上面的 set variables 方法。

查看当前参数设置:

mysql> show config;
...
##可以加条件进行筛选
mysql> show config where name like '%log-level%';
+------+--------------------+-----------+-------+
| Type | Instance | Name | Value |
+------+--------------------+-----------+-------+
| tikv | 10.186.64.59:20160 | log-level | info |
| tikv | 10.186.64.30:20160 | log-level | info |
| tikv | 10.186.64.60:20160 | log-level | info |
+------+--------------------+-----------+-------+
3 rows in set (0.02 sec)

用 set config 修改参数,会持久化到配置文件。log-level 无法动态修改,不会报错但是会有 warnings,对于不能动态修改的参数使用 tiup 进行修改:

mysql> set config tikv log-level="debug";
Query OK, 0 rows affected, 3 warnings (0.09 sec) mysql> show warnings;
+---------+------+-----------------------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------------------------------------------------------------------------------+
| Warning | 1105 | bad request to http://10.186.64.59:20180/config: failed to update, error: "config log-level can not be changed" |
| Warning | 1105 | bad request to http://10.186.64.30:20180/config: failed to update, error: "config log-level can not be changed" |
| Warning | 1105 | bad request to http://10.186.64.60:20180/config: failed to update, error: "config log-level can not be changed" |
+---------+------+-----------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

动态修改示例:

mysql> show config where name like 'split.qps-threshold';
+------+--------------------+---------------------+-------+
| Type | Instance | Name | Value |
+------+--------------------+---------------------+-------+
| tikv | 10.186.64.59:20160 | split.qps-threshold | 200 |
| tikv | 10.186.64.30:20160 | split.qps-threshold | 200 |
| tikv | 10.186.64.60:20160 | split.qps-threshold | 200 |
+------+--------------------+---------------------+-------+
3 rows in set (0.02 sec) mysql> set config tikv split.qps-threshold=1000;
Query OK, 0 rows affected (0.02 sec) mysql> show config where name like 'split.qps-threshold';
+------+--------------------+---------------------+-------+
| Type | Instance | Name | Value |
+------+--------------------+---------------------+-------+
| tikv | 10.186.64.59:20160 | split.qps-threshold | 1000 |
| tikv | 10.186.64.30:20160 | split.qps-threshold | 1000 |
| tikv | 10.186.64.60:20160 | split.qps-threshold | 1000 |
+------+--------------------+---------------------+-------+
3 rows in set (0.02 sec)

虽然TiKV的配置文件 conf/tikv.toml 会持久化这个修改,但是为了防止tiup upgrade 和 tiup reload 等运维操作把配置文件覆盖导致修改失效,还需要执行 tiup edit-config 来编辑参数。

[转帖]TiDB修改配置参数的更多相关文章

  1. tp5 修改配置参数 view_replace_str 无效

    原因: 缓存问题 找到  thinkphp\library\think\Template.php 找到  public function fetch($template, $vars = [], $c ...

  2. ThinkPHP5修改验证码的配置参数

    当前使用的ThinkPHP的版本是5.0.24. 在模版试图中调用验证码生成函数:{:captcha_img()},或者<img src="{:captcha_src()}" ...

  3. Crystal框架配置参数加载机制详解?

    前言 定义 配置参数定义的形式 配置参数文件定义在哪里? 配置参数加载的优先级 如何使用配置参数? 最佳实践 Jar项目中如何定义配置参数? War项目中如何定义或重载Jar包中的配置参数? 开发人员 ...

  4. 通过程序修改注册表键值来达到修改IE配置参数的目的

    通过程序修改注册表键值来达到修改IE配置参数的目的 使用IE访问应用程序或网页时经常需要设置一些选项(工具-Internet 选项),比如为了避免缓存网页,把工具-Internet选项-常规选项卡-I ...

  5. 使用maven时,如何修改JVM的配置参数;maven命令执行时到底消耗多少内存?

    maven是使用java启动的,因此依赖JVM,那么如何修改JVM参数? MAVEN_OPTS 在系统的环境变量中,设置MAVEN_OPTS,用以存放JVM的参数,具体设置的步骤,参数示例如下: MA ...

  6. mysql 5.6 rpm安装启动、配置参数、字符集修改等

    linux 7 安装mysql server 注意:此mysql版本是el6 MySQL-server-5.6.35-1.el6.x86_64 一.安装部署: 1.yum:首先要配置yum源,yum安 ...

  7. [转帖]持久化journalctl日志清空命令查看配置参数详解

    持久化journalctl日志清空命令查看配置参数详解 最近 linux上面部署服务 习惯使用systemd 进行处理 这样最大的好处能够 使用journalctl 进行查看日志信息. 今天清理了下 ...

  8. [转帖]NM_CONTROLLED的含义以及网卡配置参数

    NM_CONTROLLED的含义以及网卡配置参数 https://blog.csdn.net/z1014347942/article/details/78069966 学习一下 其实可以手工修改的. ...

  9. 修改Nginx与Apache配置参数解决http状态码:413上传文件大小限制问题

    一.修改Nginx上传文件大小限制 我们使用ngnix做web server的时候,nginx对上传文件的大小有限制,默认是1M. 当超过大小的时候会报413(too large)错误.这个时候我们要 ...

  10. (转)REDIS各项配置参数介绍

    # 默认情况下,redis不是在后台模式运行的,如果需要在后台进程运行,把该项的值更改为yes,默认为no daemonize:是否以后台daemon方式运行 # 如redis服务以后台进程运行的时候 ...

随机推荐

  1. centos7 安装 mysqlclient 报错

    报错如下: 解决方法: 先安装依赖: yum install mysql-devel 再安装: pip3 install mysqlclient

  2. maven系列:依赖管理和依赖范围

    目录 一.依赖管理 使用坐标导入jar包 使用坐标导入 jar 包 – 快捷方式 使用坐标导入 jar 包 – 自动导入 二.依赖范围 三.可选依赖 四.排除依赖 一.依赖管理 使用坐标导入jar包 ...

  3. 产品经理,项目经理,FTO

    职责与自驱 产品经理是要保证做正确的事:项目经理则是保证正确地做事:FTO 既要保证做正确的事,也要保证正确地做事,还要保证能拿到结果,且对结果负责. 能做事的专业人才不缺,但是既有专业知识和技能还能 ...

  4. 【API进阶之路】太秃然了,老板要我一周内检测并导入一万个小时的视频

    摘要:假期结束后回来上班,走进电梯都有一种特别的感觉,电梯那个植发广告里的大哥看我的眼神好像和之前不太一样- 上回说到,老板奖励7天带薪假,我就回家玩耍了几天,顺便还帮兄弟发不脱当了一回"A ...

  5. 小熊派开发实践丨漫谈LiteOS之传感器移植

    摘要:本文基于小熊派开发板简单介绍了如何在LiteOS中移植传感器,从而实现对于传感器的相关控制. 1 hello world 相信大家无论在学习编程语言开始的第一个函数应该是HelloWorld,本 ...

  6. GaussDB CN服务异常实例分析

    摘要:先通过OPS确认节点状态是否已经恢复,或登录后台执行cm_ctl query -Cv确认集群是否已经Normal. 本文分享自华为云社区<[实例状态]GaussDB CN服务异常>, ...

  7. 最高提升10倍性能!揭秘火山引擎ByteHouse查询优化器实现方案

     更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   作为企业级数据库的核心组件之一,查询优化器的地位不可忽视.对于众多依赖数据分析的现代企业来说,一个强大且完善 ...

  8. 人人都会Kubernetes(一):告别手写K8s yaml,运维效率提升500%

    1. Kubernetes的普及和重要性 随着云计算的迅速发展,容器化技术已成为构建和运行分布式应用程序的关键.而Kubernetes作为容器编排领域的佼佼者,已经成为了云原生应用的标准.它不仅简化了 ...

  9. 数组递增的判断【python实现】

    有时候需要对某一组数组的数据进行判断是否 递增 的场景,比如我在开发一些体育动作场景下,某些肢体动作是需要持续朝着垂直方向向上变化,那么z轴的值是会累增的.同理,逆向考虑,递减就是它的对立面. 下面是 ...

  10. AI 黑科技,老照片修复,模糊变高清

    大家好 最近闲逛,发现腾讯开源的老照片修复算法新出了V1.3的预训练模型,手痒试了一下. 我拿"自己"的旧照片试了一下,先看效果 GFPGAN FPGAN算法由腾讯PCG ARC实 ...