TiDB 基础操作集
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TiDB 基础操作集相关的知识,希望对你有一定的参考价值。
参考技术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。
征文丨TiDB 社区专栏第一届征文大赛,快来一次性集齐所有周边吧
TiDB 社区专栏第一届征文大赛来袭!只要你对 TiDB 产品感兴趣、有研究的 TiDBer 都可以来参加,在这里给你准备了非常多的主题供你选择,也可以说出你和 TiDB 的故事。
TiDB 社区专栏是什么
TiDB 社区专栏http://tidb.io/blog是社区技术文章的集合地,是 TiDB 用户/爱好者【交流思想】和【分析问题】的博客平台。
Part 1. 参赛福利
- 丰厚的比赛奖品
- 每篇文章可获得 100-600 积分 & 经验值
- 打造个人影响力:登上 PingCAP 公众号头条,深化个人影响力
- TiDB 社区对技术文章写作的指导
- 拥有更多和布道师交流的平台与机会
- 优秀内容贡献者更有机会来 TiDB 社区参与 Meetup 现场分享
- 优质内容可获得“TiDB 社区”媒体矩阵全渠道推广
Part 2. 大赛要求
活动时间:2022.3.14 - 2022.05.31
1、文章要求
·内容:首发、原创、800字以上文字,内容有深度,内容质量(遇到什么问题,怎么解决?对读者有什么帮助?) ·结构:内容结构完整、逻辑清晰、行文流畅· 排版:图文并茂 · 加分项:有借鉴性、实用性、创新性
个人备忘、记录、笔记类不符合参赛要求。
2、征文主题
· 故障案例
故障诊断&故障修复
· 数据库迁移实战
TiDB 上下游同步及海量数据的全量增量迁移案例
其他数据库迁移到 TiDB 最佳实践
· 性能调优
安装前(硬件 or 系统层面)调优T
iDB 参数调优SQL 优化
TiKV 冷热数据存储方案调研和验证
TiDB 执行计划解析和sql优化案例
其他性能调优
· 灾备和异常恢复
TiCDC 备份恢复最佳实践
Region多数副本故障恢复
BR 备份恢复
其他灾备和异常恢复
· 新版本实践
TiDB 5.4 应用实践
其他当前最新版本实践
· 源码解读
TiDB 源码解读
TiKV 源码解读
DM 源码解读
PD 源码解读
其他源码解读
使用实践
TiCDC 使用实践TiFlash 使用实践其他工具使用实践
数据库选型
数据库选型经验分享
我与TiDB的故事
可以是与 TiDB 产品的故事或者 TiDB 社区的故事
其他与TiDB相关文章
Part 3. 活动流程
活动参与方式
1、注册 TiDB 社区账号
2、在专栏(点击文末阅读原文立即访问) 中发布技术文章
活动评审结果公示
活动结束后 7-10 个工作日内公布结果。
Part 4. 评选规则
一等奖至三等奖
第一轮评选
在征文大赛活动期限内,专栏技术文章的受欢迎程度最高的前 50 篇文章可入围第二轮评选!受欢迎程度=收藏数*20 + 点赞数*10
第二轮评选
评委打分(打分项将分为 4 个评分维度,每个维度 1-10 分,最高 10 分,最低 1 分)由版主、布道师组委会、TiDB 技术专家等共同打分,按照评委打分计算总分数,按照总分数得出 一等奖至三等奖。
多篇文章获得多个奖项,仅按照最高奖项授奖(一人只可获得一个奖项,多篇文章可以获得更多)
评分维度
1、结构完整性:内容结构完整、图文并茂;2、主题典型性:内容有深度、内容质量及对其他 TiDBer 的借鉴作用及价值;3、内容:无技术错误,语言顺畅、逻辑清晰、行文流畅;4、加分项:有借鉴性、实用性、创新性。
最佳人气奖
最佳人气奖 = 文章的点赞数,点赞数最高的 3 篇文章获得最佳人气奖,该奖可与第一至三等奖同时获得。
加分小攻略:发布完文章之后可以把文章分享到其他平台,标明转载链接,可以增加 TiDB 社区专栏文章的曝光度,增加被点赞和收藏的可能。
Part5 参赛奖励
奖项设置
一等奖(1 名)
TiDB 社区尊贵 10 件套 + “TiDB 社区专栏第一届征文大赛一等奖“奖杯 + 荣誉证书 + "妙手著文章"社区徽章
TiDB 社区定制款尊贵 10 件套 包含:限量款行李箱+ 定制款键盘 + 2022 年新款极客双肩包 + 显示器挂灯 + 键帽 + 无线充电器 + 宇航员款帆布袋 + 解压 U 型枕 + 三合一数据线 + 全自动晴雨两用伞
二等奖(3 名)
TiDB 社区定制款荣誉 6 件套 +“ TiDB 社区专栏第一届征文大赛二等奖“奖杯 + "妙手著文章"社区徽章
TiDB 社区荣誉 6 件套包含:2022 年新款极客双肩包 + 键帽 + 全自动晴雨两用伞 + 宇航员款帆布袋 + 解压 U 型枕 + 三合一数据线
三等奖(6 名)
TiDB 社区定制款 4 件套 +“ TiDB 社区专栏第一届征文大赛三等奖“奖杯 +"妙手著文章"社区徽章
TiDB 社区 4 件套:2022 年新款极客双肩包 + 键帽 + 宇航员款帆布袋 + 全自动晴雨两用伞
人气奖(3 名)
TiDB 社区基础 4 件套 + 最佳人气奖奖杯
TiDB 社区基础 4 件套:2022 年新款极客双肩包 + 键帽 + 宇航员款帆布袋 + 三合一数据线最佳人气奖
文章的点赞数,点赞数最高的 3 篇文章获得最佳人气奖,该奖可与第一至三等奖同时获得。
参与奖
在 征文比赛期间写一篇文章满足:征文大赛文章要求,即可获得:· TiDB 社区“第一届征文大赛”——“社区荣誉写手”徽章· 每篇文章可获得 100-600 积分 & 经验值。
奖品展示
以上是关于TiDB 基础操作集的主要内容,如果未能解决你的问题,请参考以下文章
2020年MongoDB 企业应用实战 基础 复制集 分片集群