PingCAP
  • 文档
  • 案例
  • 博客
  • 关于
  • 下载
PingCAP
  • 文档
  • 案例
  • 博客
  • 关于
  • 下载

Contact

  • 微信扫一扫
    微信ID:pingcap2015

English
文档
  • 关于 TiDB
    • TiDB 简介
    • TiDB 整体架构
    • TiDB 核心特性
  • TiDB 快速入门
    • 快速入门指南
    • SQL 基本操作
  • TiDB 用户文档
    • TiDB 数据库管理
      • TiDB 服务
      • TiDB 进程启动参数
      • TiDB 数据目录
      • TiDB 系统数据库
      • TiDB 系统变量
      • TiDB 专用系统变量和语法
      • TiDB 服务器日志文件
      • TiDB 访问权限管理
      • TiDB 用户账户管理
      • 使用加密连接
    • SQL 优化
      • 理解 TiDB 执行计划
      • 统计信息
    • 语言结构
      • 字面值
      • 数据库、表、索引、列和别名
      • 关键字和保留字
      • 用户变量
      • 表达式语法
      • 注释语法
    • 字符集和时区
      • 字符集支持
      • 字符集配置
      • 时区
    • 数据类型
      • 数值类型
      • 日期和时间类型
      • 字符串类型
      • JSON 数据类型
      • 枚举类型
      • 集合类型
      • 数据类型默认值
    • 函数和操作符
      • 函数和操作符概述
      • 表达式求值的类型转换
      • 操作符
      • 控制流程函数
      • 字符串函数
      • 数值函数与操作符
      • 日期和时间函数
      • 位函数和操作符
      • Cast 函数和操作符
      • 加密和压缩函数
      • 信息函数
      • JSON 函数
      • GROUP BY 聚合函数
      • 其他函数
      • 精度数学
    • SQL 语句语法
      • 数据定义语句 (DDL)
      • 数据操作语句 (DML)
      • 事务语句
      • 数据库管理语句
      • Prepared SQL 语句语法
      • 实用工具语句
      • TiDB SQL 语法图
    • JSON 支持
    • Connectors 和 API
    • TiDB 事务隔离级别
    • 错误码与故障诊断
    • 与 MySQL 兼容性对比
    • TiDB 内存控制
    • 慢查询日志
    • 高级功能
      • 历史数据回溯
      • 垃圾回收 (GC)
  • TiDB 运维文档
    • 软硬件环境需求
    • 部署集群
      • Ansible 部署方案(强烈推荐)
      • 离线 Ansible 部署方案
      • Docker 部署方案
      • Docker Compose 部署方案
      • 跨机房部署方案
    • 配置集群
      • 参数解释
      • TiDB 配置项解释
      • 使用 Ansible 变更组件配置
      • 开启 TLS 验证
      • 生成自签名证书
    • 监控集群
      • 整体监控框架概述
      • 重要监控指标详解
      • 组件状态 API & 监控
    • 扩容缩容
      • 集群扩容缩容方案
      • 使用 Ansible 扩容缩容
    • 升级
      • 升级组件版本
      • TiDB 2.0 升级操作指南
    • 性能调优
    • 备份与迁移
      • 备份与恢复
      • 数据迁移
        • 数据迁移概述
        • 全量导入
        • 增量导入
    • 故障诊断
  • TiDB 周边工具
    • Syncer
    • Loader
    • TiDB-Binlog
    • PD Control
    • PD Recover
    • TiKV Control
    • TiDB Controller
  • TiSpark 文档
    • TiSpark 快速入门指南
    • TiSpark 用户指南
  • 常见问题与解答(FAQ)
  • 最佳实践
  • 版本发布历史
    • 2.1 RC3
    • 2.1 RC2
    • 2.0.7
    • 2.1 RC1
    • 2.0.6
    • 2.0.5
    • 2.1 Beta
    • 2.0.4
    • 2.0.3
    • 2.0.2
    • 2.0.1
    • 2.0
    • 2.0 RC5
    • 2.0 RC4
    • 2.0 RC3
    • 2.0 RC1
    • 1.1 Beta
    • 1.1 Alpha
    • 1.0
    • Pre-GA
    • RC4
    • RC3
    • RC2
    • RC1
  • TiDB 路线图
  • 用户案例
    • 北京银行
    • 海航
    • 今日头条
    • 转转
    • Mobike
    • 饿了么(一)
    • 饿了么(二)
    • 爱奇艺
    • 易果生鲜
    • 同程旅游
    • 去哪儿
    • G7
    • 一面数据
    • 凤凰网
    • 猿辅导
    • Mobikok
    • 二维火
    • 客如云
    • Ping++
    • 乐视云
    • 零氪科技
    • 威锐达测控
    • 盖娅互娱
    • 游族网络
    • 西山居
    • FUNYOURS JAPAN
    • 特来电
    • 万达网络
    • 360金融
    • 中国电信翼支付
    • 某电信运营商
  • 更多资源
    • 常用工具
    • PingCAP 团队技术博客
    • 知乎专栏
    • Weekly
    • 英文文档

TiDB 集群故障诊断

当试用 TiDB 遇到问题时,请先参考本篇文档。如果问题未解决,请按文档要求收集必要的信息通过 Github 提供给 TiDB 开发者。

如何给 TiDB 开发者报告错误

当使用 TiDB 遇到问题并且通过后面所列信息无法解决时,请收集以下信息并创建新 Issue:

  • 具体的出错信息以及正在执行的操作
  • 当前所有组件的状态
  • 出问题组件 log 中的 error/fatal/panic 信息
  • 机器配置以及部署拓扑
  • dmesg 中 TiDB 组件相关的问题

数据库连接不上

首先请确认集群的各项服务是否已经启动,包括 tidb-server、pd-server、tikv-server。请用 ps 命令查看所有进程是否在。如果某个组件的进程已经不在了,请参考对应的章节排查错误。

如果所有的进程都在,请查看 tidb-server 的日志,看是否有报错?常见的错误包括:

  • InfomationSchema is out of date

    无法连接 tikv-server,请检查 pd-server 以及 tikv-server 的状态和日志。

  • panic

    程序有错误,请将具体的 panic log 提供给 TiDB 开发者。

如果是清空数据并重新部署服务,请确认以下信息:

  • pd-server、tikv-server 数据都已清空

    tikv-server 存储具体的数据,pd-server 存储 tikv-server 中数据的的元信息。如果只清空 pd-server 或只清空 tikv-server 的数据,会导致两边数据不匹配。

  • 清空 pd-server 和 tikv-server 的数据并重启后,也需要重启 tidb-server

    集群 ID 是由 pd-server 在集群初始化时随机分配,所以重新部署集群后,集群 ID 会发生变化。tidb-server 业务需要重启以获取新的集群 ID。

tidb-server 启动报错

tidb-server 无法启动的常见情况包括:

  • 启动参数错误

    请参考TiDB 命令行参数文档。

  • 端口被占用:lsof -i:port

    请确保 tidb-server 启动所需要的端口未被占用。

  • 无法连接 pd-server

    首先检查 pd-server 的进程状态和日志,确保 pd-server 成功启动,对应端口已打开:lsof -i:port。

    若 pd-server 正常,则需要检查 tidb-server 机器和 pd-server 对应端口之间的连通性, 确保网段连通且对应服务端口已添加到防火墙白名单中,可通过 nc 或 curl 工具检查。

    例如,假设 tidb 服务位于 192.168.1.100,无法连接的 pd 位于 192.168.1.101,且 2379 为其 client port, 则可以在 tidb 机器上执行 nc -v -z 192.168.1.101 2379,测试是否可以访问端口。 或使用 curl -v 192.168.1.101:2379/pd/api/v1/leader 直接检查 pd 是否正常服务。

tikv-server 启动报错

  • 启动参数错误

    请参考TiKV 启动参数文档。

  • 端口被占用:lsof -i:port

    请确保 tikv-server 启动所需要的端口未被占用: lsof -i:port。

  • 无法连接 pd-server

    首先检查 pd-server 的进程状态和日志。确保 pd-server 成功启动,对应端口已打开:lsof -i:port。

    若 pd-server 正常,则需要检查 tikv-server 机器和 pd-server 对应端口之间的连通性, 确保网段连通且对应服务端口已添加到防火墙白名单中,可通过 nc 或 curl 工具检查。具体命令参考上一节。

  • 文件被占用

    不要在一个数据库文件目录上打开两个 tikv。

pd-server 启动报错

  • 启动参数错误

    请参考PD 命令行参数文档。

  • 端口被占用:lsof -i:port

    请确保 pd-server 启动所需要的端口未被占用: lsof -i:port。

TiDB/TiKV/PD 进程异常退出

  • 进程是否是启动在前台

    当前终端退出给其所有子进程发送 HUP 信号,从而导致进程退出。

  • 是否是在命令行用过 nohup+& 方式直接运行

    这样依然可能导致进程因终端连接突然中断,作为终端 SHELL 的子进程被杀掉。 推荐将启动命令写在脚本中,通过脚本运行(相当于二次 fork 启动)。

TiKV 进程异常重启

  • 检查 dmesg 或者 syslog 里面是否有 OOM 信息

    如果有 OOM 信息并且杀掉的进程为 TiKV,请减少 TiKV 的 RocksDB 的各个 CF 的 block-cache-size 值。

  • 检查 TiKV 日志是否有 panic 的 log

    提交 Issue 并附上 panic 的 log。

TiDB panic

请提供 panic 的 log

连接被拒绝

  • 请确保操作系统的网络参数正确,包括但不限于
    • 连接字符串中的端口和 tidb-server 启动的端口需要一致
    • 请保证防火墙的配置正确

Too many open files

在启动进程之前,请确保 ulimit -n 的结果足够大,推荐设为 unlimited 或者是大于 1000000。

数据库访问超时,系统负载高

首先检查 SLOW-QUERY 日志, 判断是否是因为某条 SQL 语句导致。 如果未能解决,请提供如下信息:

  • 部署的拓扑结构
    • tidb-server/pd-server/tikv-server 部署了几个实例
    • 这些实例在机器上是如何分布的
  • 机器的硬件配置
    • CPU 核数
    • 内存大小
    • 硬盘类型(SSD 还是机械硬盘)
    • 是实体机还是虚拟机
  • 机器上除了 TiDB 集群之外是否还有其他服务
  • pd-server 和 tikv-server 是否分开部署
  • 目前正在进行什么操作
  • 用 top -H 命令查看当前占用 CPU 的线程名
  • 最近一段时间的网络/IO 监控数据是否有异常
"TiDB 集群故障诊断" 更新于 Aug 23 2018: *: add slow-query doc (#849) (c890fce)
修改本文

本页导航

产品

  • TiDB
  • TiSpark
  • TiDB 路线图

文档

  • 快速入门
  • 最佳实践
  • 常见问题解答
  • TiDB 周边工具
  • 版本发布说明

资源

  • 博客
  • GitHub
  • 知乎专栏

公司

  • 关于我们
  • 招贤纳士
  • 新闻报道

联系我们

  • Twitter
  • LinkedIn
  • Reddit
  • Google Group
  • Stack Overflow
  • 微信公众号

    微信扫一扫
    微信ID:pingcap2015

© 2018 北京平凯星辰科技发展有限公司

English