是否从 MySQL 8.0 升级到 MariaDB 10.11 取决于业务场景对兼容性、特定功能及生态依赖的需求。对于追求 Oracle 官方长期支持、需要原生角色管理或特定 JSON 功能的场景,建议保留 MySQL 8.0;对于需要 Galera 集群、特定存储引擎优化或避免 Oracle 授权风险的场景,MariaDB 10.11 是可行选择,但需注意认证插件和权限体系的差异。
先说结论:两者语法兼容度约 95%,但核心差异集中在权限认证、JSON 处理及高级特性实现上,盲目迁移可能导致应用报错。
- 适合:需要 Galera 集群、Flashback 查询或希望规避 Oracle 授权风险的企业。
- 重点看:认证插件(caching_sha2_password vs mysql_native_password)及角色管理(Roles)的兼容性。
- 别忽略:窗口函数 NULL 值处理差异及部分 DDL 算法(如 INSTANT)的支持范围不同。
命令速用版
在迁移前,通过以下命令快速检查当前 MySQL 实例的关键配置和特性使用情况,评估迁移风险。
# 检查当前认证插件配置
SELECT user, host, plugin FROM mysql.user;
# 检查是否使用了 MySQL 8.0 特有角色功能
SELECT * FROM mysql.role_edges;
# 检查是否使用了 MySQL 8.0 特有持久化配置
SELECT * FROM mysql.persistent_variables;为什么会这样
MariaDB 与 MySQL 虽同源,但在 Oracle 收购 MySQL 后分叉发展,导致底层引擎和优化器策略出现分歧。MariaDB 10.11 默认使用 InnoDB 但曾长期维护 XtraDB 分支,且引入了 Hash Join、ColumnStore 等 MySQL 社区版不具备的特性;MySQL 8.0 则强化了角色管理、原子 DDL 及 JSON 功能。这种架构分歧使得两者在权限验证顺序、SQL 语法细节及性能表现上存在不可忽略的差异。
分步处理
按以下步骤评估和执行迁移,确保业务连续性。
- 备份数据:使用 mysqldump 或物理备份工具全量备份现有 MySQL 8.0 数据。
- 兼容性检查:对比应用 SQL 语句,重点排查 JSON 函数、窗口函数及存储过程语法。
- 用户权限迁移:导出用户定义时,显式指定认证插件为 mysql_native_password 以避免连接失败。
- 灰度验证:在测试环境部署 MariaDB 10.11,导入数据并运行核心业务查询。
- 回滚预案:保留原 MySQL 实例至少一周,确认无误后再下线。
怎么验证是否生效
迁移后通过以下指标确认数据库运行状态及业务兼容性。
- 连接测试:使用原有应用账号连接,确认无 Access denied 报错。
- 查询结果比对:运行核心报表查询,比对结果集顺序及数值,特别注意含 NULL 值的排序。
- 性能基准:运行 sysbench 或业务压测,对比 QPS 及延迟是否在可接受范围内。
常见坑
- 认证协议不匹配:MySQL 8.0 默认 caching_sha2_password,MariaDB 默认 mysql_native_password,直接导入用户会导致登录失败。
- 角色功能缺失:MariaDB 10.11 无原生支持 mysql.role_edges 表,依赖 MySQL 角色权限的应用需重构。
- 窗口函数差异:含 NULL 值的 ORDER BY 在窗口函数中排序规则不同,可能导致累计计算结果错位。
- Host 表失效:MariaDB 10.4+ 不再读取 mysql.host 表,依赖该表做权限控制的行为将无效。
常见问题
MySQL 与 MariaDB 语法兼容度是多少?
公开资料显示两者语法兼容度约 95%,但 MySQL 5.5–5.7 应用迁移更顺畅,MySQL 8.0 特有特性需调整。
MariaDB 10.11 性能比 MySQL 8.0 好吗?
性能表现依赖负载类型,TPC-C 基准测试下 MySQL 8.0 在高并发吞吐量上可能领先,而部分插入场景 MariaDB 表现更优,公开资料中没有看到可靠的量化数据证明某一方绝对胜出。
MariaDB 支持 MySQL 8.0 的角色管理吗?
不支持,MariaDB 10.11 目前无原生支持 mysql.role_edges 表,需靠应用层模拟角色继承。
迁移后连接报错 Access denied 怎么办?
通常是认证插件不匹配,需显式指定用户认证插件为 mysql_native_password 并重置密码。
参考来源
- MySQL 8.0 与 MariaDB 10.11 性能对比:TPC-C 基准测试下 3 大关键指标解析
- 如何对比 MySQL 与 MariaDB 的分支选择_通过兼容性与新特性差异
- 如何对比 MariaDB 与 MySQL 在用户权限体系上的核心区别?
- LAMP.sh 数据库管理秘籍:MySQL 8.0 与 MariaDB 10.11 性能对比测试终极指南
- MySQL 8 与 MariaDB 在窗口函数语法上有何关键差异?_编程语言-CSDN 问答