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

article/2025/6/23 16:34:00

作者: 江湖有缘 原文来源: 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: 22deploy_dir: "/data/tidb/deploy"data_dir: "/data/tidb/data"# # Monitored variables are applied to all the machines.
monitored:node_exporter_port: 9100blackbox_exporter_port: 9115server_configs:tidb:instance.tidb_slow_log_threshold: 300tikv:readpool.storage.use-unified-pool: falsereadpool.coprocessor.use-unified-pool: truepd:replication.enable-placement-rules: truereplication.location-labels: ["host"]tiflash:logger.level: "info"pd_servers:- host: 192.168.3.88tidb_servers:- host: 192.168.3.88tikv_servers:- host: 192.168.3.88port: 20160status_port: 20180config:server.labels: { host: "logic-host-1" }- host: 192.168.3.88port: 20161status_port: 20181config:server.labels: { host: "logic-host-2" }- host: 192.168.3.88port: 20162status_port: 20182config:server.labels: { host: "logic-host-3" }tiflash_servers:- host: 192.168.3.88monitoring_servers:- host: 192.168.3.88grafana_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 wordpressDEFAULT CHARACTER SET utf8mb4COLLATE 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: wordpressports:- '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:4000volumes:- '/data/wordpress/data:/var/www/html'restart: alwayscontainer_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 DESCLIMIT 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.IDFROM wp_postsWHERE 1=1  AND wp_posts.post_type = 'post' AND ((wp_posts.post_status = 'publish'))ORDER BY wp_posts.post_date DESCLIMIT 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(*)函数替换。非常感谢此插件开发者帮助我们解决此问题。

  • 下载地址: https://github.com/pingcap/wordpress-tidb-plugin

下载插件完成后,我们在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 有望成为动态网站背后更通用的分布式存储解决方案。



http://www.hkcw.cn/article/jEqqBDlMjW.shtml

相关文章

2.3JS变量和数据类型m

1.认识JS变量 变化数据的记录--变量 2.变量的命名格式 在JS中如何命名一个变量呢 变量的声明&#xff1a;在JS中声明一个变量使用var关键字&#xff08;variable单词的缩写&#xff09;&#xff08;后续学习ES6还有let、const声明方式&#xff09; 变量赋值&#xff1a;使用给变…

深度学习总结(41)

微调预训练模型 另一种常用的模型复用方法是微调&#xff0c;如图所示&#xff0c;它与特征提取互为补充。微调是指&#xff0c;对于用于特征提取的已冻结模型基&#xff0c;将其顶部几层“解冻”​&#xff0c;并对这解冻的几层与新增加的部分&#xff08;本例中为全连接分类…

QT入门学习

一: 新建QT项目 二:QT文件构成 2.1 first.pro 项目管理文件&#xff0c;下面来看代码解析 QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11TARGET main# The following define makes your compiler emit warnings if you use # any Qt feature …

kaggle 预测房价

利用简单的线性模型&#xff0c;训练kaggle 房屋数据集&#xff1a; import os import random import tarfile import time import zipfile import pandas as pd import requests import torch from torch import nn from torch.utils import data from matplotlib import pyp…

ASP.NET Core SignalR的基本使用

文章目录 前言一、SignalR是什么&#xff1f;在 ASP.NET Core 中的关键特性&#xff1a;SignalR 工作原理简图&#xff1a; 二、使用步骤1.创建ASP.NET Core web Api 项目2.添加 SignalR 包3.创建 SignalR Hub4.配置服务与中间件5.创建控制器(模拟服务器向客户端发送消息)6.创建…

AI书签管理工具开发全记录(七):页面编写与接口对接

文章目录 AI书签管理工具开发全记录&#xff08;七&#xff09;&#xff1a;页面编写与接口对接前言 &#x1f4dd;1. 页面功能规划 &#x1f4cc;2. 接口api编写 &#x1f4e1;2.1 创建.env,设置环境变量2.2 增加axios拦截器2.3 创建接口 2. 页面编写 &#x1f4c4;2.1 示例代…

“AI 编程三国杀” Google Jules, OpenAl Codex, Claude Code,人类开始沦为AI编程发展的瓶颈?

AI 编程三国杀:Google Jules, OpenAI Codex, Claude code “AI 编程三国杀”是一个形象的比喻,借指当前 AI 编程领域中几个主要参与者之间的激烈竞争与并存的局面。这其中,Google、OpenAI 以及 Anthropic (Claude 的开发者) 是重要的“国家”,而它们各自的 AI 编程工具则是…

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 文件事件处理部分)

分析客户端和服务端网络诵信交互实现 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 命令请求的执行过程案例分析介绍发送命令请求读取命令请求客户端状态的argv属性和argc属性命令执行器第…

第29次CCF计算机软件能力认证-3-LDAP

LDAP 刷新 时间限制&#xff1a; 10.0 秒 空间限制&#xff1a; 512 MiB 下载题目目录&#xff08;样例文件&#xff09; 题目背景 西西艾弗岛运营公司是一家负责维护和运营岛上基础设施的大型企业&#xff0c;拥有数千名员工。公司内有很多 IT 系统。 为了能够实现这些…

2025年- H63-Lc171--33.搜索旋转排序数组(2次二分查找,需二刷)--Java版

1.题目描述 2.思路 输入&#xff1a;旋转后的数组 nums&#xff0c;和一个整数 target 输出&#xff1a;target 在 nums 中的下标&#xff0c;如果不存在&#xff0c;返回 -1 限制&#xff1a;时间复杂度为 O(log n)&#xff0c;所以不能用遍历&#xff0c;必须使用 二分查找…

HomeKit 基本理解

概括 HomeKit 将用户的家庭自动化信息存储在数据库中&#xff0c;该数据库由苹果的内置iOS家庭应用程序、支持HomeKit的应用程序和其他开发人员的应用程序共享。所有这些应用程序都使用HomeKit框架作为对等程序访问数据库. Home 只是相当于 HomeKit 的表现层,其他应用在实现 …

秒杀系统—5.第二版升级优化的技术文档三

大纲 8.秒杀系统的秒杀库存服务实现 9.秒杀系统的秒杀抢购服务实现 10.秒杀系统的秒杀下单服务实现 11.秒杀系统的页面渲染服务实现 12.秒杀系统的页面发布服务实现 8.秒杀系统的秒杀库存服务实现 (1)秒杀商品的库存在Redis中的结构 (2)库存分片并同步到Redis的实现 (3…

尚硅谷-尚庭公寓知识点

文章目录 尚庭公寓知识点1、转换器(Converter)2、全局异常3、定时任务1. 核心步骤(1) 启用定时任务(2) 创建定时任务 2. Scheduled 参数详解3. Cron 表达式语法4. 配置线程池&#xff08;避免阻塞&#xff09;5. 动态控制任务&#xff08;高级用法&#xff09;6. 注意事项 4、M…

字符串~~~

字符串~~ KMP例题1.无线传输2.删除字符串3.二叉树中的链表 AC自动机Manacher例题 扩展KMP字符串哈希 KMP &#xff08;1&#xff09; &#xff08;2&#xff09; &#xff08;3&#xff09; 经典例题 https://leetcode.cn/problems/find-the-index-of-the-first-occurre…

WEB3——简易NFT铸造平台之nft.storage

&#x1f9e0; 1. nft.storage 是什么&#xff1f; https://nft.storage 是 一个免费的去中心化存储平台&#xff0c;由 Filecoin 背后的 Protocol Labs 推出。 它的作用是&#xff1a; ✅ 接收用户上传的文件&#xff08;图片、JSON 等&#xff09; ✅ 把它们永久存储到 IPFS…

MCP架构全解析:从核心原理到企业级实践

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…

注销微软账户

若你需要注销微软账号&#xff0c;请点击下方超链接。 点击此处

华为OD机试真题——生成哈夫曼树(2025A卷:100分)Java/python/JavaScript/C/C++/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《生成…

Python实现P-PSO优化算法优化BP神经网络分类模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 随着人工智能技术的快速发展&#xff0c;神经网络在分类任务中展现了强大的性能。BP&#xff08;Back Propagation&…

学习海康VisionMaster之表面缺陷滤波

一&#xff1a;进一步学习了 今天学习下VisionMaster中的表面缺陷滤波&#xff1a;简单、无纹理背景的表面缺陷检测&#xff0c;可以检测表面的异物&#xff0c;缺陷&#xff0c;划伤等 二&#xff1a;开始学习 1&#xff1a;什么表面缺陷滤波&#xff1f; 表面缺陷滤波的核心…