tidb基础操作集

author author     2023-04-04     430

关键词:

参考技术A 1、测试环境推荐配置

2、生产环境推荐配置

3、 如果 tikv 服务器的 CPU及磁盘配置较高,可以考虑多实例部署,按照每个 tikv 实例16~20core + 64G 内存 + 800G 磁盘的比例分配硬件资源。

同时需要注意 inventory.ini 及 ansible/conf/tikv.yml 的相关配置。

4、tidb 服务器视业务类型,如果业务逻辑有偏 AP 类的 SQL,需要考虑配置大内存,防止出现 OOM。

如果是纯 TP 类业务,tidb 服务器 CPU 配置较高的话,也可以考虑多实例部署,每个 tidb-server 分配20~32core,可以避免无谓的CPU上下文切换, 减少 system cpu 消耗。

5、pd 服务器的磁盘可以配置200~500G 的SSD 盘,主要用来保存源数据信息。在集群规模较大,源数据信息较多的时候,SSD 磁盘能够避免源数据信息存取成为集群的瓶颈点。

1、操作系统版本要求

建议 centos 7.3及以上,支持 redhat 7.3版本及以上,不推荐其他版本的系统。

2、ansible、jinja 等软件依赖包版本,只需要验证中控机(运行ansible 机器)上软件版本满足条件即可

中控机:

监控机(grafana):

3、测试环境磁盘 IO 不满足需求

ansible-playbook bootstrap.yml --extra-vars "dev_mode=True"

加上 dev_mode=True 可以在部署时,绕过系统磁盘相关的 benchmark

4、关闭防火墙、开启时钟同步

systemctl status firewalld

systemctl status chronyd/ntpd

5、集群下所有服务器要配置不同的 hostname

如果否,可以编辑 inventory.ini 的配置项 set_hostname=True 来自动修改 hostname

6、调整参数

参数在 ansible/conf/目录下,tidb.yml,tikv.yml,常见的可能需要调整的参数

tidb.yml:

grpc-connection-count: 如果服务器 CPU 配置较高,tikv 实例个数较多,该参数可以调整至20~32之间

slow-threshold:slow-query 记录的阈值,默认300ms

level:日志级别,默认 info,可以视情况调整为 debug 或 error

tikv.yml:

sync-log:raft-log sync配置,默认值true,对于磁盘 io 消耗较高,测试/非金融生产环境建议设置为 false

region-split-check-diff:检测 region 分裂的阈值,非 SSD 磁盘建议调大至32MB

rocksdb defaultcf block-cache-size(GB) = MEM * 80% / TiKV 实例数量 * 30%(多实例部署下配置,单实例部署不需要修改)

rocksdb writecf block-cache-size(GB) = MEM * 80% / TiKV 实例数量 * 45%(多实例部署下配置,单实例部署不需要修改)

rocksdb lockcf block-cache-size(GB) = MEM * 80% / TiKV 实例数量 * 2.5% (最小 128 MB)(多实例部署下配置,单实例部署不需要修改)

raftdb defaultcf block-cache-size(GB) = MEM * 80% / TiKV 实例数量 * 2.5% (最小 128 MB)(多实例部署下配置,单实例部署不需要修改)

多实例情况下,需要修改 

readpool:

  coprocessor:

  high-concurrency

  normal-concurrency

  low-concurrency

三个参数,推荐为实例数*参数值 = CPU 核数 * 0.8。

 raftstore:

   capacity

 磁盘总容量 / TiKV 实例数量,例如 “100GB”

修改完后,可以使用下面命令验证

cat tidb-ansible/conf/tikv.yml |grep -Ev "^$|#"

无误后执行 

ansible-playbook rolling_update.yml --tags=tidb/tikv

滚动升级,tags 可选

7、官网有比较完善的在线+离线部署方案、在线升级指导、在线扩容缩容文档,具体参考:

https://pingcap.com/docs-cn/op-guide/ansible-deployment/

https://pingcap.com/docs-cn/op-guide/offline-ansible-deployment/

https://pingcap.com/docs-cn/op-guide/ansible-deployment-scale/

1、从 MySQL 迁移

TiDB 兼容 MySQL 语法,小数据量建议直接使用 mysqldump、mydumper 来全量导出数据,再通过 source、myloader 的方式导入 TiDB。

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

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

详情请参考: https://pingcap.com/docs-cn/op-guide/migration/#使用-mydumper-loader-全量导入数据

如果数据量较大,超过几百 G,可以联系原厂申请试用 lightning 工具,loader 导入数据平均速度是20G/小时,lightning 约为100~150G/小时

2、从 Oracle 迁移

目前有几种方式可以参考

使用 OGG 做全量+增量同步

使用 Navicat Premium 版的 data transfer 功能,支持从 Oracle/SqlServer 迁移全量数据至 TiDB

通过 kafka 等消息队列工具,解析 OGG 的日志,开发写入 TiDB/MySQL 的工具

目前我们也在积极跟专业的数据异构平台合作,争取能够尽快在更多的数据迁移工具中兼容 TiDB 数据源。

1、启动集群

ansible-playbook start.yml --tags=tidb/tikv/pd

在正确的 ansible 目录下,确保 inventory.ini 里的配置正确,tags 可选

2、停止集群

ansible-playbook stop.yml --tags=tidb/tikv/pd

在正确的 ansible 目录下,确保 inventory.ini 里的配置正确,tags 可选

3、停止单个 tidb-server / tikv-server

ansible-playbook stop.yml --tags=tidb/tikv/pd -l IP

-l 后面接 inventory.ini 配置的IP 或别名

4、访问 tidb

TiDB 兼容 MySQL 协议,所有连接 MySQL 的方式都适用于TiDB

mysql -uroot -h127.0.0.1 -P4000 -p

常见的图形化界面工具,navicat 等都可以直接访问 tidb

同时也支持jdbc、odbc 等,需要注意的是 mysql 8.0版本的客户端,及 mariadb 客户端可能存在兼容性问题,不建议使用

SQL 语法基本兼容 MySQL,某些不兼容的场景见: https://pingcap.com/docs-cn/sql/mysql-compatibility/#与-mysql-兼容性对比

5、修改参数

可以通过修改 tidb-ansible/conf/tidb.yml 配置文件,然后执行

ansible-playbook rolling_update.yml --tags=tidb/tikv

也可以直接登录服务器,找到deploy_dir/conf/tidb.toml,直接编辑文件,然后 pkill tidb-server 来重启服务

6、查看 tidb 版本信息

select tidb_version();

Release Version: v2.1.0-rc.3-24-g23f90a6

Git Commit Hash: 23f90a68be321e724280da6033a2b63ebf6cc7dd

Git Branch: HEAD

UTC Build Time: 2018-10-10 09:18:39

GoVersion: go version go1.11 linux/amd64

Race Enabled: false

TiKV Min Version: 2.1.0-alpha.1-ff3dd160846b7d1aed9079c389fc188f7f5ea13e

Check Table Before Drop: false

7、备份 tidb 数据

全量备份可以采用 mydumper,增量备份需要开启 binlog,实时恢复采用商业版工具 reparo。

8、查看监控数据

在 ansible 的配置文件 inventory.ini 里,有一个监控服务器的配置

[monitoring_servers]

10.1.163.87

deploy 的时候会默认在这个配置服务器上部署 grafana 组件,通过

http://10.1.163.87:3000 admin/admin  访问

具体一些常见的监控指标,请参考: https://pingcap.com/docs-cn/op-guide/dashboard-overview-info/

9、收集统计信息

set @@tidb_build_stats_concurrency=20;

set @@tidb_distsql_scan_concurrency=100;

set @@tidb_index_serial_scan_concurrency=20;

analyze table xxx index xxx;

修改上面三个参数可以提升 scan 效率。

具体统计信息相关,请参考: https://pingcap.com/docs-cn/sql/statistics/#统计信息简介

1、Transaction too large

TiDB 对于事务有限制,简单来说以下几点:

单个事务的SQL 语句数量不能超过5000,( 在 tidb.yml 可配 stmt-count-limit )

单条 KV entry 不超过 6MB

KV entry 的总条数不超过 30w

KV entry 的总大小不超过 100MB

备注:假设某张表有4个索引,那么一条数据对应的 kv entry 为数据+索引,一共5个kv 记录。

如果是批量 insert 或delete,建议先修改

set tidb_batch_insert = 1; 

set tidb_batch_delete = 1;

update mysql.tidb set variable_value='24h' where variable_name='tikv_gc_life_time';

再执行 SQL。

如果是批量 update,建议采用 limit 循环的方式执行。

2、GC life time is shorter than transaction duration

GC Life Time 间隔时间过短,长事务本应读到的数据可能被清理了,可使用如下命令增加 GC Life Time :

update mysql.tidb set variable_value='30m' where variable_name='tikv_gc_life_time';

3、Lost connection to MySQL server during query

log 中是否有 panic

dmesg 中是否有 oom,命令: dmesg -T | grep -i oom

长时间没有访问,也会收到这个报错,一般是 tcp 超时导致的,tcp 长时间不用, 会被操作系统 kill。

tiup部署tidb数据库集群

...群,体验TiDB集群的基本架构,以及TiDB、TiKV、PD、监控等基础组件的运行。1、创建tidb用户组及用户[root@tidbhome]#groupaddtidb[root@tidbhome]#useraddtidb-r-m-gtidb2、关闭防火墙[root@tidb~]#system 查看详情

sas编程基础-数据获取与数据集操作

1.数据来源SAS数据来源主要有两种:一是通过input语句创建,另外一种方式是通过外部数据文件获取。1.1libname1.2odbc1.3passthrough1.4import1.5input该方式是在SAS系统下通过input语句输入SAS数据块,实践中是最不常的用的一块。 2.set语... 查看详情

通过tidboperator升级tidb集群

...客户端添加重试功能,或者在低峰期进行TiDB的滚动更新操作。​​​​升级前,请参考​​​​文档​​​​确认没有正在进行的DDL操作。​​升级步骤在TidbCluster中通过修改升级集群组件的镜像配置,一般修改​​spec.version​... 查看详情

tidb首批通过信通院htap数据库基础能力评测

随着数字经济的快速发展,数据已成为重要生产要素,挖掘数据价值成为了用户的普遍需求。HTAP(混合事务和分析处理)是近年来提出的一种新型的数据库架构,旨在打破事务处理和分析之间界限,在一... 查看详情

猿创征文|分布式国产数据库tidb从入门到实战(代码片段)

...产数据库TiDB,详细讲解了TiDB的由来、架构、SQL基本操作、SpringBoot整合TiDB等内容。目录写在前面一、概述二、与MySQL兼容性对比三、安装使用四、SQL基本操作4.1、库操作4.2、表操作4.3、索引操作4.4、用户操作五、SpringBoot整合... 查看详情

网易云音乐dba谈tidb选型:效率的选择(代码片段)

...数据库TiDB网易内部选型介绍》一文,对比了以TiDB为基础的创新架构和MySQL+DDB传统架构的差异,从业务适配、降本增效、技术创新等多个维度阐释了网易考虑引入TiDB的原因。tags:[‘TiDB’]编者按本文摘自由网易DBA团队... 查看详情

学习笔记spark——sparksql应用——sparkdataframe基础操作(代码片段)

二、SparkDataFrame基础操作2.1、DataFrameDataFrame是一种不可变的分布式数据集,这种数据集被组织成指定的列,类似于关系数据库中的表。数据集的每一列都带有名称和类型,对于数据的内部结构又很强的描述性。RDD是分... 查看详情

tidb-tidb用户角色权限管理(代码片段)

...TIDB数据库来演示下用户角色权限的配置。注意以下所有操作均在TIDB数据库中进行。二、用户管理1.创建新用户,并指定用户的登录密码createuser'bxc'identifiedby'bxc123';这种方式创建的用户不限制主机,默认为‘bxc... 查看详情

当大数据架构遇上tidb(代码片段)

...a;胡梦宇,知乎核心架构平台开发工程师,大数据基础架构方向,主要工作内容是负责知乎内部大数据组件的二次开发和数据平台建设。前言一年前,知乎的大数据架构与TiDB首次相遇,那时我们将HiveMetaStore的... 查看详情

tidb的数据迁移工具现已开源

...迁移、全量备份和MariaDB/MySQLbinlog增量同步,有助于减少操作成本和简化错误处理流程。架构图如下所示:从架构图可以看到,DM包括三大组件:DM-master、DM-worker和dmctl。其中,DM-master管理和调度数据同步任务的操作、DM-worker执行... 查看详情

tidb修改配置参数

...b.toml配置文件中。所以不用担心tiupupgrade和tiupreload等运维操作会把配置文件覆盖,不会导致修改失效,因为这个修改的持久化不依赖配置文件。有些参数的作用域只有会话级别。也就是只能会话级修改,这不代表着不能被动态修... 查看详情

数据结构实现基础(代码片段)

什么是数据结构?笔者认为数据结构包括三个部分【1】数据的逻辑结构,即数据对象集【2】数据的物理存储结构,即数据对象集在计算机中的组织方式【3】数据对象集相关联的操作集,以及实现这些操作集的最... 查看详情

11-django-基础篇-数据库操作(代码片段)

...模型类.objects.filter().delete()修改数据1.save2.update查询数据1.基础条件查询2.F和Q对象3.聚合函数和排序函数4.级联查询5.查询集QuerySet概念两大特性限制查询集分页前言本篇来学习Django中对数据库进行增、删、改、查操作,增加数... 查看详情

带着问题读tidb源码:hive元数据使用tidb启动报错

...大家从非常细节的原理入手了解TiDB以及TiKV的实现方式和基础原理。然而在TiDB社区中活跃的许多伙伴还需要更简单,并且同自己每天工作中使用TiDB时遇到的问题更相关的源码阅读文章。本文是《带着问题读源码系列》的第一... 查看详情

端到端的实时计算:tidb+flink最佳实践

...晓光,PingCAPCommunityDevelopment团队负责人,原知乎基础研发团队架构师,长期从事分布式系统相关研发工作,关注云原生技术。本文来自孙晓光在ApacheFlinkxTiDBMeetup·北京站的演讲,主要分享了知乎在TiDBxFl 查看详情

tidb区别于mysql的管理命令(代码片段)

一、集群操作#查看已有集群列表tiupclusterlist#查看某集群状态tiupclusterdisplayclustername#启动某集群某节点tiupclusterstart/stop/restartclustername-N1.2.3.4:2379,1.2.3.5:2379#扩容集群tiupclusterscale-outclusternameconfig_addr-y#升级集群tiu 查看详情

tidb区别于mysql的管理命令(代码片段)

一、集群操作#查看已有集群列表tiupclusterlist#查看某集群状态tiupclusterdisplayclustername#启动某集群某节点tiupclusterstart/stop/restartclustername-N1.2.3.4:2379,1.2.3.5:2379#扩容集群tiupclusterscale-outclusternameconfig_addr-y#升级集群tiu 查看详情

在开发环境使用tiup安装tidb集群(代码片段)

...TiDB等组件的高可用。二前提准备2.1 软硬件要求2.1.1 Linux操作系统版本要求 2.1.2软件配置要求 2.1.3服务器建议配置2.1.3.1开发及测试环境 2.1.3.2生产环境 2.1.4 网络要求TiDB作为开源分布式NewSQL数据库,其正常运行需要网络环... 查看详情