搜索全站
数据库 7 分钟阅读

MariaDB 与 MySQL 跑 WordPress 的差异对比与选择建议

MariaDB 与 MySQL 在 WordPress 场景下都能用,但版本对应关系、默认排序规则、JSON 处理、认证方式存在差异。本文对比两者在兼容性、性能、迁移成本上的实际区别,给出版本对应表与选型建议,以及从 MySQL 迁移到 MariaDB 的可行步骤。

U
UFO_PF 2019-03-29 · 阅读 7 分钟
Ma 数据库
阅读提示
本文约 2,772 字,预计阅读 7 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:到底该装哪个

装环境时你会遇到选择:apt install mysql-server 还是 mariadb-server?很多教程各执一词。

事实是:对 WordPress 而言,两者都能跑,差异只在细节。真正的差别体现在版本对应关系、默认排序规则、认证方式,以及少数插件用到的 JSON/GIS 特性。

原理分析:两者的渊源与分歧

MariaDB 是 MySQL 创始人 Monty 在 Oracle 收购 MySQL 后做的分支,目标是保持开源与兼容。早期几乎完全兼容(5.5 时代可以直接替换),但从 MySQL 8.0 / MariaDB 10.3 之后,两者开始明显分道扬镳。

主要分歧点:

方面 MySQL 8.0 MariaDB 10.6~11.x
默认认证 caching_sha2_password mysql_native_password
默认排序规则 utf8mb4_0900_ai_ci utf8mb4_unicode_ci / utf8mb4_general_ci
JSON 类型 原生 JSON 是 LONGTEXT 的别名(行为略有差异)
窗口函数 支持 支持
查询缓存 移除 10.6 前支持,之后移除
线程池 企业版才有 社区版自带(高并发有优势)
序列、虚拟列 支持 支持(语法有差异)

保姆级实操:版本对应与选择

WordPress 的官方最低要求

  • MySQL 5.7.0+ 或 MariaDB 10.4+(新版推荐 MySQL 8.0+ / MariaDB 10.6+)。

版本对应速查

MySQL 大致对应的 MariaDB
5.7 10.2 ~ 10.3
8.0 10.4 ~ 10.6(非严格对应)
8.4 LTS 11.4 LTS

注意这是”特性大致相当”,不是二进制兼容。从 MySQL 8 导出的数据导入 MariaDB 可能遇到排序规则不存在的问题(utf8mb4_0900_ai_ci MariaDB 不认)。

选择建议

场景 推荐 理由
新装环境、用面板(宝塔等) MariaDB 10.11 面板默认支持好、资源占用低、线程池社区版可用
老 PHP(7.4 以下) MariaDB 默认 native 认证,不用折腾
用商业插件要求 MySQL 8 MySQL 8.0 避免兼容性扯皮
高并发读写 MariaDB + 线程池 社区版就有线程池
已有 MySQL 5.7 老站 先原地升级或保持 贸然切换风险大

从 MySQL 迁移到 MariaDB 的步骤

# 1. 导出(注意排序规则)
mysqldump -u root -p --default-character-set=utf8mb4 --single-transaction \
  --routines --triggers wordpress > dump.sql

# 2. 检查并替换 MariaDB 不支持的排序规则
grep -c 'utf8mb4_0900_ai_ci' dump.sql
sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' dump.sql

# 3. 安装 MariaDB(先停 MySQL)
sudo systemctl stop mysql
sudo apt install -y mariadb-server

# 4. 导入
mysql -u root -p -e "CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -u root -p wordpress < dump.sql

# 5. 验证
wp db check
wp option get home

反方向(MariaDB → MySQL) 流程类似,但要额外处理 mysql_native_password 用户:

ALTER USER 'wpuser'@'localhost' IDENTIFIED WITH caching_sha2_password BY '密码';

配置要点(MariaDB)

/etc/mysql/mariadb.conf.d/50-server.cnf:

innodb_buffer_pool_size = 2G
innodb_log_file_size = 512M
max_connections = 200
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
thread_handling = pool-of-threads   # MariaDB 线程池,高并发可选

常见踩坑与失败案例

  1. 导入时报 Unknown collation: 'utf8mb4_0900_ai_ci' —— 从 MySQL 8 往 MariaDB 迁移的必然问题,用 sed 替换为 utf8mb4_unicode_ci。
  2. 案例:某站从 MySQL 5.7 迁到 MariaDB 10.6 后,一个用 JSON 字段的插件行为异常(排序结果不同)。原因是 MariaDB 的 JSON 是 LONGTEXT 别名,排序按字符串而非 JSON 值。最后改为在 PHP 层排序。
  3. 面板默认装了 MariaDB 而教程讲 MySQL —— 配置文件路径不同(/etc/mysql/mariadb.conf.d/ vs /etc/mysql/mysql.conf.d/),照抄教程会找不到文件。
  4. mysql 命令实际是 MariaDB 客户端 —— 用 mysql --version 确认,别想当然。
  5. WordPress 站点健康检查提示”数据库版本过旧” —— MariaDB 10.3 被判定为过旧,升级到 10.6+ 即可。

总结

选择原则很实际:新装环境优先 MariaDB 10.11(省事、资源友好、面板支持好);已有 MySQL 就别折腾切换;商业插件明确要求 MySQL 8 就照它说的做。真正需要你记住的技术点是那条排序规则差异——跨引擎迁移时 90% 的问题都出在 utf8mb4_0900_ai_ci 上。无论用哪个,把 innodb_buffer_pool_size 配好、字符集统一成 utf8mb4_unicode_ci,WordPress 跑起来都不会有本质差别。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。