探索 TiDB 数据库:WordPress 在分布式数据库上的部署实践
作者: 江湖有缘原文来源:https://tidb.net/blog/359d4e00
引言
在当今数据驱动的互联网应用中,数据库的性能与可扩展性已成为系统架构中的关键一环。WordPress 作为全球最流行的网站内容管理系统之一,传统上依赖于 MySQL 等单机数据库,面临高并发和大数据量场景时存在明显瓶颈。TiDB
作为一款兼容 MySQL 协议的分布式数据库,具备水平扩展、强一致性和高可用等特性,为 WordPress 的高性能部署提供了全新可能。通过将 WordPress 与 TiDB 结合,不仅能够提升系统的稳定性和响应速度,还能轻松应对业务增长带来的数据挑战,展现出卓越的技术适应力与前瞻性优势。
一、TiDB 介绍
1.1 TiDB 简介
TiDB 是由 PingCAP 公司自主设计、研发的开源分布式关系型数据库,它是一款同时支持在线事务处理(OLTP)与在线分析处理(OLAP)的融合型分布式数据库产品。TiDB 的目标是为用户提供一站式 OLTP、OLAP、HTAP 解决方案,特别适合高可用、强一致要求较高、数据规模较大的各种应用场景。
1.2 主要特点
一键水平扩缩容
:存储计算分离架构,可按需对计算和存储分别进行在线扩容或缩容。金融级高可用
: 数据多副本存储,通过 Multi-Raft 协议同步事务日志,确保数据强一致性及高可用性。实时 HTAP
:提供行存储引擎 TiKV 和列存储引擎 TiFlash,通过 Multi-Raft Learner 协议保证数据强一致性,解决资源隔离问题。云原生的分布式数据库
: 专为云环境设计,使用 TiDB Operator 实现公有云、私有云、混合云中的自动化部署。兼容 MySQL 协议和生态
:完全兼容 MySQL 协议和常用功能,应用迁移成本低,并提供数据迁移工具辅助迁移过程。
1.3 核心应用场景
金融行业场景
满足金融行业对数据一致性、系统可靠性和高可用性的严格要求。
海量数据及高并发的 OLTP 场景
针对数据快速增长的需求,采用计算存储分离架构,支持大规模并行处理。
实时 HTAP 场景
结合 TiKV 和 TiFlash 引擎,实现交易处理和数据分析在同一系统内高效执行。
数据汇聚、二次加工处理的场景
适用于企业级数据整合与报表生成,简化 ETL 流程,提高数据处理效率。
1.4 TiDB 架构介绍
以下这些组件共同构成了 TiDB 强大、灵活、可扩展的分布式数据库架构。
📌 TiDB Server :SQL 层组件,负责接收客户端连接,解析和优化 SQL,并生成分布式执行计划。它本身不存储数据,将实际的数据读写请求转发给底层的 TiKV 或 TiFlash 存储节点。
📌 PD (Placement Driver) Server :集群的元信息管理模块,负责存储拓扑结构、调度数据分布、分配事务 ID,是整个集群的“大脑”。PD 支持高可用部署,建议部署奇数个节点以保证容错能力。
📌 TiKV Server :分布式事务型键值存储引擎,负责实际数据的存储与事务处理。数据按 Region 分布存储,支持多副本自动复制和故障转移,为 TiDB 提供强一致性和高可用性的底层存储支持。
📌 TiFlash :列式存储引擎,作为 TiKV 的扩展节点,专为分析型查询加速设计。通过实时同步 TiKV 数据,提供高效的 OLAP 查询能力,实现 HTAP 场景下的资源隔离与混合负载处理。

二、实践环境介绍
2.1 部署环境要求
✅ 部署主机要求
:在开始部署 TiDB 集群之前,请确保部署主机满足以下条件:
2.2 本地环境规划
本次实践基于个人测试环境搭建,具体信息如下:
2.3 本次实践介绍
🔍 说明: 以下内容为个人学习与测试环境的部署实践,非生产环境使用。如需在正式环境中部署,请根据实际需求谨慎调整配置。
✅ 实践目标
模拟生产环境部署在单机环境下模拟部署 TiDB 生产集群,体验真实集群架构与部署流程。
基于 Docker 环境搭建使用 Docker 容器化技术快速构建 TiDB 集群及相关服务,提升部署效率与环境隔离性。
部署 WordPress 对接 TiDB 搭建 WordPress 网站服务,并将其数据库后端连接至 TiDB,验证其兼容性与可用性。
⚠️ 注意事项
本实践仅供学习与测试使用,不适用于生产环境直接套用。
所有操作应在具备相关知识基础上进行,确保理解每一步的作用与影响。
建议在测试环境中完整验证后再考虑向生产迁移。
三、部署 Docker 环境
3.1 配置 Docker 软件源
安装
Docker
之前,我们先安装 HTTPS 传输工具及必要组件。

执行以下命令,添加阿里云 GPG 密钥。
执行以下命令,开始配置阿里云 Docker 软件源。
使用
apt update
命令,更新软件源。
3.2 安装 Docker
执行以下命令,安装 Docker 核心组件。

3.3 配置镜像加速
执行以下命令,快速配置 Docker 镜像加速。可以自行添加多个 Docker 镜像加速源,确保后续可以成功拉取 Docker 镜像。
执行以下命令,配置 Docker 开机自启。
3.4 检查 Docker 版本
检查 Docker 版本,可以看到当前安装的版本为
28.1.1
。
检查 Docker compose 版本,当前安装版本为
2.35.1
。
3.5 检查 Docker 状态
检查 Docker 服务状态,确保 Docker 服务正常运行。

四、部署 TiDB 单机集群
4.1 下载并安装 TiUP
TiUP 是 TiDB 官方提供的组件管理工具,支持一键部署、升级和管理 TiDB 集群及各类组件。 它简化了从本地测试到生产环境的全流程运维操作,是 TiDB 生态中不可或缺的高效管理工具。我们执行以下安装脚本,安装 TiUP 工具。

4.2 声明环境变量
TiUP
安装完成后,系统会提示显示用于配置环境变量的 Shell Profile 文件的绝对路径,如下所示:

将该路径复制后,使用
source
命令加载配置文件,使环境变量立即生效。
4.3 安装 cluster 组件
执行
tiup cluster
命令用于安装并管理 TiDB 集群的生命周期操作组件。

4.4 修改 sshd 服务连接数限制
为支持多机模拟部署,需以 root 用户身份将
/etc/ssh/sshd_config
中的MaxSessions
参数调整为 20 以提升 SSH 连接数限制。

修改 sshd 服务的配置文件后,重启 sshd 服务。
4.5 创建并编辑 topo.yaml 文件
创建 TiDBd 部署目录,如下所示:
在部署目录下创建并编辑拓扑配置文件,我们命名为
topo.yaml
。
topo.yaml 配置文件可参考以下模版,注意将 host 的 IP 地址替换为自己服务器的 IP 地址。
4.6 开始部署 TiDB 集群
执行以下命令,通过 tiup list tidb 命令来查看当前支持部署的 TiDB 版本,这里我们安装的版本为 v8.5.1。

TiDB 集群部署的参考命令示例如下所示,注意替换集群名称和 TiDB 版本。
这里我们执行以下命令,开始部署 TiDB 集群。其中提示输出部署服务器的 root 账号密码,输入”y”及 root 密码即可完成部署。

4.7 启动 TiDB 集群
执行以下命令,启动 TiDB 集群。

TiDB 集群部署完毕后,会输出 root 账号的初始密码,我们记录与保存该初始密码。

五、TiDB 数据库的基本配置与管理
5.1 安装 MySQL 数据库
在 ubuntu 系统中,我们执行以下命令,快速安装 MySQL 数据库

启动 MySQL 数据库,并设置开机自启。
5.2 访问 TiDB 数据库
执行以下命令,访问 TiDB 数据库,注意 -p 后面的是刚才复制的初始密码。

5.3 访问 Grafana 监控页面
访问
Grafana
监控页面:http://{服务器 IP 地址}:3000,将 IP 替换为自己服务器 IP 地址,默认用户名和密码均为 admin。如果无法访问到该页面,注意本地防火墙是否关闭或者放行相关端口。

5.4 访问 TiDB Dashboard 监控页面
访问集群 TiDB Dashboard 监控页面:http://{pd-ip}:2379/dashboard,默认用户名为 root,密码为刚才复制的初始密码。


六、TiDB 数据库操作部分
6.1 创建用户
执行以下命令,创建数据库用户 tidb,密码也为 tidb。
由于是测试环境,我们将该账号授予所有数据库的所有权限.
刷新权限,如下所示:

6.2 查询字符集和排序规则
查询所有支持的字符集
查询特定字符集支持的所有排序规则
6.3 创建数据库
在创建数据库时,DEFAULT CHARACTER SET utf8mb4 和 COLLATE utf8mb4_0900_ai_ci 用于指定数据库的默认字符集和排序规则,确保其能够正确存储和检索包括中文、表情符号等在内的多种语言字符。这两个参数至关重要,必须根据当前数据库版本支持的字符集和排序规则进行配置,否则在安装 WordPress 或迁移数据库时,可能会因兼容性问题导致失败。

七、部署 WordPress 服务
7.1 下载 wordpress 镜像
执行以下命令,拉取 wordpress 镜像。

7.2 创建部署目录
执行以下命令,创建部署目录。
7.3 创建容器
执行以下命令,创建 wordpress 容器。
建议使用 docker compose 方式创建 wordpress 容器,我们新建及编辑 docker-compose.yaml 文件,内容如下:
🐳 WordPress 容器环境变量说明
📌 其他关键配置说明
创建 wordpres 容器
执行以下命令,创建 wordpres 容器

7.4 修改 wp-config.php 文件
编辑 WordPress 的 wp-config.php 文件,确保以下配置:

7.5 重启容器
执行以下命令,重启 wordpress 容器。
7.6 检查容器状态
检查 wordpress 容器状态,确保容器正常启动。
八、访问 WordPress 网站
8.1 访问 WordPress 初始页
本地电脑浏览器输入:http://< 服务器 IP 地址 >:8167,将 IP 替换为自己服务器 IP 地址。进入到 WordPress 的初始配置页面

8.2 设置系统语言
在 wordpress 初始配置页中,我们选择系统语言为“简体中文”,点击“继续”。

8.3 设置站点信息
WordPress 站点信息,可参考如下填写:
站点标题
:myweb
用户名
:admin
密码
:自定义填写
邮箱
:自定义填写(这里测试使用admin@qq.com)可根据需要自定义修改站点配置,填写完毕后,点击“
安装WordPress
”。

8.4 登录 WordPress 后台管理
安装完成后,会提示初始化 WordPress 安装成功,如下所示:

点击“登录”,输入刚才设置的账号密码,进入到 WordPress 后台管理页面。


九、WordPress 文章显示问题解决
9.1 显示报错
当我们在 wordpres 添加文章后,发现文章列表无法显示,我们通过在 wp-config.php 文件,添加以下代码启用调试:
发现报错日志,如下所示:
报错分析:TiDB 对 SQL_CALC_FOUND_ROWS 的实现是 “noop”(无操作),默认不生效。错误日志明确提示:
WordPress 核心和插件(如评论系统、文章查询)广泛使用 SQL_CALC_FOUND_ROWS 实现分页计数(如 SELECT SQL_CALC_FOUND_ROWS … + SELECT FOUND_ROWS())。
9.2 解决办法
wordpress-tidb-plugin 插件:此插件解决了 TiDB 不提供 SQL_CALC_FOUND_ROWS function 的问题。一旦这个插件被激活,WP_Query 中使用 SQL_CALC_FOUND_ROWS 的部分将被 COUNT(*) 函数替换。非常感谢此插件开发者帮助我们解决此问题。
下载插件完成后,我们在 wordpress 后台插件管理后,手动添加上传该插件。

插件安装完成后,我们启动该插件。

9.2 解决问题
回到文章列表模块,可以看到已经成功显示文章列表。

9.3 添加文章
在 WordPress 后台管理页面中,点击左侧菜单栏文章——添加文章,进入文章编辑页面。

在文章编辑器中,我们编辑文章标题和文章内容后,点击“发布”,即可完成文章发布。

9.4 浏览文章
在文章列表中,我们点击刚才发布的文章,即可浏览文章。

9.5 访问 WordPress 网站
浏览器重新访问:http://< 服务器 IP 地址 >:8167(将 IP 替换为自己服务器 IP 地址),我们可以看到以下博客效果。

9.6 查看系统资源占用
在单机环境下完成 TiDB 测试集群与 WordPress 应用的部署后,系统运行过程中,TiDB 的 CPU 和内存使用率始终维持在较低水平,充分展现了其出色的资源利用效率与卓越的性能表现。

十、实践体验与总结
本次 TiDB 与 WordPress 的集成实践验证了分布式数据库在传统应用场景中的强大兼容性。通过针对性解决 SQL_CALC_FOUND_ROWS 等语法差异问题,成功实现文章列表的高效查询与展示,体现了 TiDB 对复杂 SQL 的灵活适配能力。其水平扩展特性显著提升了数据吞吐量,尤其在流量激增时仍保持稳定响应。未来 TiDB 有望成为动态网站背后更通用的分布式存储解决方案。
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/0b2f35a02b6c2a82dc78126e3】。文章转载请联系作者。
评论