写点什么

探索 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 核心应用场景

  1. 金融行业场景

  2. 满足金融行业对数据一致性、系统可靠性和高可用性的严格要求。

  3. 海量数据及高并发的 OLTP 场景

  4. 针对数据快速增长的需求,采用计算存储分离架构,支持大规模并行处理。

  5. 实时 HTAP 场景

  6. 结合 TiKV 和 TiFlash 引擎,实现交易处理和数据分析在同一系统内高效执行。

  7. 数据汇聚、二次加工处理的场景

  8. 适用于企业级数据整合与报表生成,简化 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 本次实践介绍

🔍 说明: 以下内容为个人学习与测试环境的部署实践,非生产环境使用。如需在正式环境中部署,请根据实际需求谨慎调整配置。


✅ 实践目标


  1. 模拟生产环境部署在单机环境下模拟部署 TiDB 生产集群,体验真实集群架构与部署流程。

  2. 基于 Docker 环境搭建使用 Docker 容器化技术快速构建 TiDB 集群及相关服务,提升部署效率与环境隔离性。

  3. 部署 WordPress 对接 TiDB 搭建 WordPress 网站服务,并将其数据库后端连接至 TiDB,验证其兼容性与可用性。


⚠️ 注意事项


  • 本实践仅供学习与测试使用,不适用于生产环境直接套用

  • 所有操作应在具备相关知识基础上进行,确保理解每一步的作用与影响。

  • 建议在测试环境中完整验证后再考虑向生产迁移。



三、部署 Docker 环境

3.1 配置 Docker 软件源

安装Docker之前,我们先安装 HTTPS 传输工具及必要组件。


 apt  install -y apt-transport-https ca-certificates curl gnupg lsb-release software-properties-common
复制代码



执行以下命令,添加阿里云 GPG 密钥。


mkdir -p /etc/apt/keyringscurl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg
复制代码


执行以下命令,开始配置阿里云 Docker 软件源。


echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
复制代码


使用apt update命令,更新软件源。


root@jeven01:~# apt updateHit:1 https://mirrors.aliyun.com/ubuntu jammy InReleaseHit:2 https://mirrors.aliyun.com/ubuntu jammy-security InReleaseHit:3 https://mirrors.aliyun.com/ubuntu jammy-updates InReleaseHit:4 https://mirrors.aliyun.com/ubuntu jammy-backports InReleaseHit:5 https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy InReleaseReading package lists... DoneBuilding dependency tree... DoneReading state information... Done194 packages can be upgraded. Run 'apt list --upgradable' to see them.
复制代码

3.2 安装 Docker

执行以下命令,安装 Docker 核心组件。


apt  install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
复制代码


3.3 配置镜像加速

执行以下命令,快速配置 Docker 镜像加速。可以自行添加多个 Docker 镜像加速源,确保后续可以成功拉取 Docker 镜像。


mkdir -p /etc/docker
复制代码


sudo  tee /etc/docker/daemon.json > /dev/null <<EOF{    "registry-mirrors": ["https://80c84f5330e14908928ca78944e61dc4.mirror.swr.myhuaweicloud.com"]}EOF
复制代码


执行以下命令,配置 Docker 开机自启。


systemctl daemon-reloadsystemctl restart dockersystemctl enable  docker
复制代码

3.4 检查 Docker 版本

检查 Docker 版本,可以看到当前安装的版本为28.1.1


root@jeven01:~# docker -vDocker version 28.1.1, build 4eba377
复制代码


检查 Docker compose 版本,当前安装版本为2.35.1


root@jeven01:~# docker compose versionDocker Compose version v2.35.1
复制代码

3.5 检查 Docker 状态

检查 Docker 服务状态,确保 Docker 服务正常运行。


systemctl status docker
复制代码


四、部署 TiDB 单机集群

4.1 下载并安装 TiUP

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


curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
复制代码


4.2 声明环境变量

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



将该路径复制后,使用 source 命令加载配置文件,使环境变量立即生效。


source /root/.bashrc
复制代码

4.3 安装 cluster 组件

执行 tiup cluster 命令用于安装并管理 TiDB 集群的生命周期操作组件。


tiup cluster
复制代码


4.4 修改 sshd 服务连接数限制

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


vim  /etc/ssh/sshd_config
复制代码


MaxSessions 20
复制代码



修改 sshd 服务的配置文件后,重启 sshd 服务。


systemctl restart sshd
复制代码

4.5 创建并编辑 topo.yaml 文件

创建 TiDBd 部署目录,如下所示:


mkdir -p /data/tidb/{data,deploy} && cd /data/tidb
复制代码


在部署目录下创建并编辑拓扑配置文件,我们命名为 topo.yaml


 vim topo.yaml
复制代码


topo.yaml 配置文件可参考以下模版,注意将 host 的 IP 地址替换为自己服务器的 IP 地址。


# # Global variables are applied to all deployments and used as the default value of# # the deployments if a specific deployment value is missing.global: user: "tidb" ssh_port: 22 deploy_dir: "/data/tidb/deploy" data_dir: "/data/tidb/data"
# # Monitored variables are applied to all the machines.monitored: node_exporter_port: 9100 blackbox_exporter_port: 9115
server_configs: tidb: instance.tidb_slow_log_threshold: 300 tikv: readpool.storage.use-unified-pool: false readpool.coprocessor.use-unified-pool: true pd: replication.enable-placement-rules: true replication.location-labels: ["host"] tiflash: logger.level: "info"
pd_servers: - host: 192.168.3.88
tidb_servers: - host: 192.168.3.88
tikv_servers: - host: 192.168.3.88 port: 20160 status_port: 20180 config: server.labels: { host: "logic-host-1" }
- host: 192.168.3.88 port: 20161 status_port: 20181 config: server.labels: { host: "logic-host-2" }
- host: 192.168.3.88 port: 20162 status_port: 20182 config: server.labels: { host: "logic-host-3" }
tiflash_servers: - host: 192.168.3.88
monitoring_servers: - host: 192.168.3.88
grafana_servers: - host: 192.168.3.88
复制代码

4.6 开始部署 TiDB 集群

执行以下命令,通过 tiup list tidb 命令来查看当前支持部署的 TiDB 版本,这里我们安装的版本为 v8.5.1。


tiup list tidb 
复制代码



TiDB 集群部署的参考命令示例如下所示,注意替换集群名称和 TiDB 版本。


tiup cluster deploy <cluster-name> <version> ./topo.yaml --user root -p
复制代码


这里我们执行以下命令,开始部署 TiDB 集群。其中提示输出部署服务器的 root 账号密码,输入”y”及 root 密码即可完成部署。


tiup cluster deploy cluster_tidb v8.5.1  ./topo.yaml --user root -p
复制代码


4.7 启动 TiDB 集群

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


tiup cluster start cluster_tidb --init
复制代码



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


五、TiDB 数据库的基本配置与管理

5.1 安装 MySQL 数据库

在 ubuntu 系统中,我们执行以下命令,快速安装 MySQL 数据库


apt install mysql-server -y 
复制代码



启动 MySQL 数据库,并设置开机自启。


systemctl start mysqlsystemctl enable  mysql
复制代码

5.2 访问 TiDB 数据库

执行以下命令,访问 TiDB 数据库,注意 -p 后面的是刚才复制的初始密码。


mysql -h 192.168.3.88  -P 4000 -u root   -pTy7^e5q*4c68j9_-Cx
复制代码


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。


CREATE USER 'tidb'@'%' IDENTIFIED BY 'tidb';
复制代码


由于是测试环境,我们将该账号授予所有数据库的所有权限.


GRANT ALL PRIVILEGES ON *.* TO 'tidb'@'%';
复制代码


刷新权限,如下所示:


FLUSH PRIVILEGES;
复制代码


6.2 查询字符集和排序规则

  • 查询所有支持的字符集

  • 查询特定字符集支持的所有排序规则

6.3 创建数据库

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


CREATE DATABASE wordpress  DEFAULT CHARACTER SET utf8mb4  COLLATE utf8mb4_0900_ai_ci;
复制代码


七、部署 WordPress 服务

7.1 下载 wordpress 镜像

执行以下命令,拉取 wordpress 镜像。


docker pull  wordpress
复制代码


7.2 创建部署目录

执行以下命令,创建部署目录。


mkdir -p /data/wordpress/data && cd /data/wordpress
复制代码

7.3 创建容器

执行以下命令,创建 wordpress 容器。


docker run -d --name my_wordpress --restart always   -v /data/wordpress/data:/var/www/html -e WORDPRESS_DB_HOST=192.168.3.88:4000   -e WORDPRESS_DB_USER=tidb   -e WORDPRESS_DB_PASSWORD="tidb"   -e WORDPRESS_DB_NAME=wordpress   -e WORDPRESS_DB_CHARSET=utf8mb4   -e WORDPRESS_DB_COLLATE=utf8mb4_0900_ai_ci   -p 8167:80   wordpress
复制代码


建议使用 docker compose 方式创建 wordpress 容器,我们新建及编辑 docker-compose.yaml 文件,内容如下:


vim docker-compose.yaml
复制代码


version: '3.9'services:    wordpress:        image: wordpress        ports:            - '8167:80'        environment:            - WORDPRESS_DB_COLLATE=utf8mb4_0900_ai_ci            - WORDPRESS_DB_CHARSET=utf8mb4            - WORDPRESS_DB_NAME=wordpress            - WORDPRESS_DB_PASSWORD=tidb            - WORDPRESS_DB_USER=tidb            - WORDPRESS_DB_HOST=192.168.3.88:4000        volumes:            - '/data/wordpress/data:/var/www/html'        restart: always        container_name: my_wordpress

复制代码


🐳 WordPress 容器环境变量说明



📌 其他关键配置说明





  • 创建 wordpres 容器


执行以下命令,创建 wordpres 容器


docker compose up -d
复制代码


7.4 修改 wp-config.php 文件

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


vim  data/wp-config.php
复制代码


/** Database charset to use in creating database tables. */define('DB_CHARSET', 'utf8mb4');
/** The database collate type. Don't change this if in doubt. */define('DB_COLLATE', 'utf8mb4_0900_ai_ci');
复制代码


7.5 重启容器

执行以下命令,重启 wordpress 容器。


docker compose restart
复制代码

7.6 检查容器状态

检查 wordpress 容器状态,确保容器正常启动。


root@jeven01:/data/wordpress# docker psCONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                     NAMESe09d2cad6b58   wordpress   "docker-entrypoint.s…"   16 minutes ago   Up 30 seconds   0.0.0.0:8167->80/tcp, [::]:8167->80/tcp   my_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 文件,添加以下代码启用调试:


// 启用调试模式define('WP_DEBUG', true);// 将调试信息记录到日志文件define('WP_DEBUG_LOG', true);// 不在前端显示调试信息define('WP_DEBUG_DISPLAY', false);
复制代码


发现报错日志,如下所示:


root@jeven01:/data/wordpress# tail  data/wp-content/debug.logOR wp_posts.post_status = 'private')))
ORDER BY wp_posts.post_date DESC LIMIT 0, 20 made by WP_Posts_List_Table->prepare_items, wp_edit_posts_query, wp, WP->main, WP->query_posts, WP_Query->query, WP_Query->get_posts[28-May-2025 13:47:29 UTC] WordPress database error function SQL_CALC_FOUND_ROWS has only noop implementation in tidb now, use tidb_enable_noop_functions to enable these functions for query SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND ((wp_posts.post_status = 'publish'))
ORDER BY wp_posts.post_date DESC LIMIT 0, 20 made by WP_Posts_List_Table->prepare_items, wp_edit_posts_query, wp, WP->main, WP->query_posts, WP_Query->query, WP_Query->get_posts
复制代码


报错分析:TiDB 对 SQL_CALC_FOUND_ROWS 的实现是 “noop”(无操作),默认不生效。错误日志明确提示:


function SQL_CALC_FOUND_ROWS has only noop implementation in tidb now, use tidb_enable_noop_functions to enable these functions
复制代码


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 有望成为动态网站背后更通用的分布式存储解决方案。




发布于: 刚刚阅读数: 4
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
探索TiDB数据库:WordPress在分布式数据库上的部署实践_TiDB第四届征文-运维开发之旅_TiDB 社区干货传送门_InfoQ写作社区