探索TiDB数据库:WordPress在分布式数据库上的部署实践

数据库 创建于:05-31 00:01

作者: 江湖有缘 原文来源: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. 海量数据及高并发的 OLTP 场景
    • 针对数据快速增长的需求,采用计算存储分离架构,支持大规模并行处理。
  3. 实时 HTAP 场景
    • 结合 TiKV 和 TiFlash 引擎,实现交易处理和数据分析在同一系统内高效执行。
  4. 数据汇聚、二次加工处理的场景
    • 适用于企业级数据整合与报表生成,简化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 场景下的资源隔离与混合负载处理。

b33e24e0e367d9ec7634ae245b9a59e8_9c6bb14b74b24eb28955ae28a9a32c0b.png

二、实践环境介绍

2.1 部署环境要求

部署主机要求:在开始部署 TiDB 集群之前,请确保部署主机满足以下条件:

要求项 说明
操作系统 推荐安装 CentOS 7.3 及以上版本
网络连接 需支持互联网访问,用于下载 TiDB 及相关软件包
用户权限 使用部署主机的 root 用户及密码
防火墙配置 关闭防火墙 或开放 TiDB 集群节点间所需端口
支持架构 支持 x86_64(AMD64)ARM 架构

2.2 本地环境规划

本次实践基于个人测试环境搭建,具体信息如下:

主机名 IP 地址 操作系统版本 Docker 版本 部署项目
jeven01 192.168.3.88 Ubuntu 22.04.1 LTS 28.1.1 TiDB 数据库/WordPress

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

e60f82fef81da48535fdf480fe411e36_e1bd7ed473064f29af9d6de239326de8.png

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

mkdir -p /etc/apt/keyrings
curl -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 update
Hit:1 https://mirrors.aliyun.com/ubuntu jammy InRelease
Hit:2 https://mirrors.aliyun.com/ubuntu jammy-security InRelease
Hit:3 https://mirrors.aliyun.com/ubuntu jammy-updates InRelease
Hit:4 https://mirrors.aliyun.com/ubuntu jammy-backports InRelease
Hit:5 https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy InRelease
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
194 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

38f5142e03c66c6989db555a7177e7ad_a903243e8e94428f833de7d8ba99fa23.png

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-reload
systemctl restart docker
systemctl enable  docker

3.4 检查Docker版本

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

root@jeven01:~# docker -v
Docker version 28.1.1, build 4eba377

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

root@jeven01:~# docker compose version
Docker Compose version v2.35.1

3.5 检查Docker状态

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

systemctl status docker

726076e6815221a0a2722caba69d05f5_e1668b81f60d4917a95850f1f256f2ca.png

四、部署TiDB单机集群

4.1 下载并安装TiUP

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

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

1ea80c5d64b0df7c85eb8b027426337d_0de41b71ebd5462c9ea010d053fd5cca.png

4.2 声明环境变量

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

3cd5e73d75850ad6d30e9cd878563b86_cfa08d4c547a4fd986329b620006a8aa.png

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

source /root/.bashrc

4.3 安装cluster组件

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

tiup cluster

13f05303ec0ffcbfed11aefa08032ef7_909b39d0e6084e9da328a7a8a85bb2db.png

4.4 修改sshd服务连接数限制

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

vim  /etc/ssh/sshd_config
MaxSessions 20

b1c279666f05ec8207544728f37d3789_54d4e0ac1bf644f2b14a0b910dc99986.png

修改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 

081ea47ceb48f93265e181c8505ddecc_e28deaf747ee41b084c4d7dfa41d92d6.png

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

0c170dea9c2ab620552c38df196b981e_9845ab5872824ab488bd35779ddb6d30.png

4.7 启动TiDB集群

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

tiup cluster start cluster_tidb --init

2ac72477834ac01abf8171416a643cea_42950d7607694575815fa8961e902fbb.png

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

7b953cc04bbc602950775ff299d210c2_eea4d08417544e9ba6c3db7707e2beb6.png

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

5.1 安装MySQL数据库

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

apt install mysql-server -y 

4350e9774178bdd1f3fbf1523f1abd7e_35091afc44534df7a380261e68398ec6.png

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

systemctl start mysql
systemctl enable  mysql

5.2 访问 TiDB 数据库

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

mysql -h 192.168.3.88  -P 4000 -u root   -pTy7^e5q*4c68j9_-Cx

74e0d720b55722f3b8c42ff958a6ba0b_9802159ff8a1414380a1026c4dd5dce2.png

5.3 访问Grafana监控页面

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

beb4b8bc4ee449ce9803d55cf63f8c80_62a3808eb1df45419d314c0afbe45709.png

5.4 访问TiDB Dashboard监控页面

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

3e41addf64f446247848a6e4167cb988_712bbc148519402bb150349f16a11204.png

f4176464d4834e5944e7e7a88c83fd45_7315651bd1544278909e0fad5b76a5cb.png

六、TiDB数据库操作部分

6.1 创建用户

执行以下命令,创建数据库用户tidb,密码也为tidb。

CREATE USER 'tidb'@'%' IDENTIFIED BY 'tidb';

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

GRANT ALL PRIVILEGES ON *.* TO 'tidb'@'%';

刷新权限,如下所示:

FLUSH PRIVILEGES;

e24ad2d0030e4371cc6a44b733858400_e3e89a6cdccc44eab8c8bbf18a3964e5.png

6.2 查询字符集和排序规则

  • 查询所有支持的字符集
mysql> SHOW CHARACTER SET;
+---------+-------------------------------------+-------------------+--------+
| Charset | Description                         | Default collation | Maxlen |
+---------+-------------------------------------+-------------------+--------+
| ascii   | US ASCII                            | ascii_bin         |      1 |
| binary  | binary                              | binary            |      1 |
| gbk     | Chinese Internal Code Specification | gbk_chinese_ci    |      2 |
| latin1  | Latin1                              | latin1_bin        |      1 |
| utf8    | UTF-8 Unicode                       | utf8_bin          |      3 |
| utf8mb4 | UTF-8 Unicode                       | utf8mb4_bin       |      4 |
+---------+-------------------------------------+-------------------+--------+
6 rows in set (0.00 sec)
  • 查询特定字符集支持的所有排序规则
mysql> SHOW COLLATION WHERE Charset = 'utf8mb4';
+--------------------+---------+-----+---------+----------+---------+---------------+
| Collation          | Charset | Id  | Default | Compiled | Sortlen | Pad_attribute |
+--------------------+---------+-----+---------+----------+---------+---------------+
| utf8mb4_0900_ai_ci | utf8mb4 | 255 |         | Yes      |       0 | NO PAD        |
| utf8mb4_0900_bin   | utf8mb4 | 309 |         | Yes      |       1 | NO PAD        |
| utf8mb4_bin        | utf8mb4 |  46 | Yes     | Yes      |       1 | PAD SPACE     |
| utf8mb4_general_ci | utf8mb4 |  45 |         | Yes      |       1 | PAD SPACE     |
| utf8mb4_unicode_ci | utf8mb4 | 224 |         | Yes      |       8 | PAD SPACE     |
+--------------------+---------+-----+---------+----------+---------+---------------+
5 rows in set (0.01 sec)

mysql>

6.3 创建数据库

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

CREATE DATABASE wordpress
  DEFAULT CHARACTER SET utf8mb4
  COLLATE utf8mb4_0900_ai_ci;

1405b04a21adb68d8f60fa24f1711974_e312465ecf074141b4fa3b2970bfca6c.png

七、部署WordPress服务

7.1 下载wordpress镜像

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

docker pull  wordpress

92218275b69fe8507a5bc3748294f278_1a41cff05f2c46dda415e460b03c82a2.png

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 容器环境变量说明

环境变量名 说明
WORDPRESS_DB_COLLATE utf8mb4_0900_ai_ci 设置数据库默认排序规则(Collation),确保与 TiDB 数据库配置一致。
WORDPRESS_DB_CHARSET utf8mb4 设置数据库字符集,用于支持中文、Emoji 等多语言内容。
WORDPRESS_DB_NAME wordpress 指定 WordPress 使用的数据库名称,需提前在 TiDB 中创建好。
WORDPRESS_DB_PASSWORD tidb 连接数据库的用户密码,对应数据库用户的密码。
WORDPRESS_DB_USER tidb 用于连接数据库的用户名,需具备对目标数据库的访问权限。
WORDPRESS_DB_HOST 192.168.3.88:4000 指定数据库主机地址和端口,指向 TiDB Server 的 IP 和 MySQL 协议端口。

📌 其他关键配置说明

配置项 说明
image wordpress 使用的 Docker 镜像名称,默认为官方最新版。
ports '8167:80' 将容器的 80 端口映射到宿主机的 8167 端口,可通过 http://localhost:8167 访问。
volumes /data/wordpress/data:/var/www/html 挂载本地目录作为 WordPress 网站文件的持久化存储。
restart always 容器退出时自动重启,保障服务持续运行。
container_name my_wordpress 自定义容器名称,方便管理和查看日志。

  • 创建wordpres容器

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

docker compose up -d

936fcbebc309d3b6291d271534b38c5a_429fca9eadc2400c8186841ec73421e5.png

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');

2ee2fba96a765fc849d3b470c3ff1ab1_219436c7827a4eefbe4c57c82deb4d6c.png

7.5 重启容器

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

docker compose restart

7.6 检查容器状态

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

root@jeven01:/data/wordpress# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                     NAMES
e09d2cad6b58   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的初始配置页面

f365241d6a42a4764b4ff9b78128e611_fb27df4100444bef95869fc2e35aee89.png

8.2 设置系统语言

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

45e2132291fe79cd3fc772436bdaefe4_4f20f392ea584219aa1640ac304e963f.png

8.3 设置站点信息

WordPress站点信息,可参考如下填写:

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

2f2b060e442b3e9e94cc48d904e73ead_499ca45eb5c84a4fa0939a96d2288a90.png

8.4 登录WordPress后台管理

安装完成后,会提示初始化WordPress安装成功,如下所示:

6812b64f2afc0826c303fd2e5e1508d6_3379f37fb34a4ef8a9b5b4d230a7ecbc.png

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

9871d817e5cd90711ab5aa4f5b7ef43e_a39e7e46306b4efca3219ae6fcc55ad5.png

e141d1f47f78c99011699e0c5fe8d9c9_c33660d4f2dd4735b4c831074baab00c.png

九、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.log
OR 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后台插件管理后,手动添加上传该插件。

9f8f2e058f2843a3d23dfead85f9301f_d32ef6ae0edc453883585caada087a81.png

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

4a904b0703087c7b8ea7a6fad77b3aff_6adb7935147d4b05ab79db403d3d840d.png

9.2 解决问题

回到文章列表模块,可以看到已经成功显示文章列表。

9bc1eedb940a7291d0b25f3128bb00b5_dfc485c3b759499c8bb0c75a0d005fab.png

9.3 添加文章

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

dd8e36bf1c43539e67ffe3e67bf44dc9_62d2f5c53a5b4e78a0ecf7a7eb9c296d.png

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

b4024d9ae187b7d62fe385d84e27cb09_3c5db2280c9d4db4b11b97dc5acb4400.png

9.4 浏览文章

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

eefae3a59782b834c37d99d61f87c869_213c814e71004f3298918686a06e0c1e.png

9.5 访问WordPress网站

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

675a2a4e105b9e8a59f43d985201bb43_3f725391fa44420fa136a58dc64d546b.png

9.6 查看系统资源占用

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

43967b013421ff66137666aeda2ea8f7_9f29f6acf4544eca881d32dc5df560e9.png

十、实践体验与总结

本次 TiDB 与WordPress的集成实践验证了分布式数据库在传统应用场景中的强大兼容性。通过针对性解决SQL_CALC_FOUND_ROWS等语法差异问题,成功实现文章列表的高效查询与展示,体现了TiDB对复杂SQL的灵活适配能力。其水平扩展特性显著提升了数据吞吐量,尤其在流量激增时仍保持稳定响应。未来 TiDB 有望成为动态网站背后更通用的分布式存储解决方案。


原文地址:https://my.oschina.net/u/5674736/blog/18518332

免责声明:本文来源于互联网,版权归合法拥有者所有,如有侵权请公众号联系管理员

* 本站提供的一些文章、资料是供学习研究之用,如用于商业用途,请购买正版。

TiDB社区干货传送门