MariaDB

MariaDB 设计 · Galera 集群 · 调优

MariaDB 源自 MySQL,如今已独立发展。我们按引擎特性运维基于 Galera Cluster 的同步复制、MaxScale 路由、mariadb-backup 备份与 LTS 版本管理。

Architecture

Galera Cluster 架构

Galera 在提交时对写集(write-set)进行认证(certification),实现虚拟同步复制,构成所有节点数据一致的多主集群。

节点故障时,只要剩余节点保持法定人数(quorum),服务即可继续。在前端放置 MaxScale(或 ProxySQL),将写入集中到一个节点并分散读取,可减少写冲突导致的回滚。

异地灾备通常通过 Galera 集群之间的异步复制实现。

  • 至少 3 节点(或 2 节点 + Galera Arbitrator)保证法定人数
  • 所有表必须为 InnoDB 且有主键
  • 拆分大事务(流控与认证失败风险)
  • 提前确认节点重新加入时的 IST/SST 方式与耗时
图:MariaDB Galera Cluster 参考架构(示例)

Scope

MariaDB 服务范围

安装与设计

LTS 版本选择、存储引擎与字符集标准、参数标准、软件包仓库管理。

高可用与复制

Galera Cluster、GTID 异步/半同步复制、MaxScale 故障检测与自动切换。

备份与 PITR

mariadb-backup 全量/增量备份、mariadb-dump 逻辑备份、binlog 时间点恢复。

调优

InnoDB 缓冲池与日志、线程池、优化器设置、慢查询与索引改进。

监控

wsrep_* 状态(流控、队列)、复制延迟、PMM 与 Grafana 仪表盘。

升级

LTS 之间升级(如 10.6 → 10.11/11.4/11.8)、mariadb-upgrade、滚动升级。

安全

账户与角色整理、TLS、server_audit 插件审计日志、静态数据加密。

MySQL ↔ MariaDB

评估版本间兼容性差异(GTID 格式、系统表、认证插件)后再切换。

Replication

高可用方式比较

MariaDB 复制与高可用选项
方式特点适用场景注意事项
Galera Cluster基于认证的虚拟同步复制,多主RPO 最小化、节点故障容忍不是写扩展手段,对广域网延迟敏感
异步/半同步复制MariaDB 特有 GTID(domain-server-seq)读扩展、灾备与 MySQL GTID 格式不同,混合部署需注意
MaxScalereadwritesplit 路由、监控与自动故障切换Galera/复制前端代理使用前确认 BSL 许可条件
ProxySQL基于规则的查询路由偏好开源代理时需配置 Galera 节点状态健康检查

Backup & PITR

备份与时间点恢复

mariadb-backup 全量备份与恢复
# 备份
mariadb-backup --backup --target-dir=/backup/full_20261020 \
               --user=bkuser --password='***'
# 准备(prepare)后恢复
mariadb-backup --prepare  --target-dir=/backup/full_20261020
systemctl stop mariadb      # 数据目录必须为空
mariadb-backup --copy-back --target-dir=/backup/full_20261020
chown -R mysql:mysql /var/lib/mysql && systemctl start mariadb
Galera 状态检查查询
SHOW GLOBAL STATUS WHERE Variable_name IN (
  'wsrep_cluster_size',         -- 集群节点数
  'wsrep_cluster_status',       -- 应为 Primary
  'wsrep_local_state_comment',  -- 应为 Synced
  'wsrep_flow_control_paused',  -- 因流控暂停的时间比例
  'wsrep_local_recv_queue_avg'  -- 接收队列平均值
);
较早版本中同一工具名为 mariabackup。我们会以所用版本的文档为准确定命令。

Tuning

性能调优要点

服务器与 Galera

  • innodb_buffer_pool_size、日志文件大小、刷盘设置
  • 评估 thread_handling=pool-of-threads(线程池)
  • wsrep_slave_threads(应用并行度)与 gcache 大小
  • 定位引发流控的节点
  • SST 方式(mariadb-backup)与 donor 负载管理

查询与结构

  • 慢查询日志与 ANALYZE FORMAT=JSON 分析
  • 整改无主键表(Galera 必要条件)
  • 索引、连接顺序与 optimizer_switch 检查
  • 拆分批量 DML
  • 分区与保留策略

Lifecycle

LTS 生命周期检查(截至 2026 年 10 月)

  • 社区 LTS 系列:10.11 · 11.4 · 11.8 · 12.3(各系列维护截止时间不同)
  • MariaDB 10.6 已于 2026 年 7 月结束社区维护 —— 需规划升级到更新的 LTS
  • 短期(滚动)版本支持期短,生产环境建议使用 LTS
来源:mariadb.org 发布公告(2026 年第三季度)。实施前请再次确认官方日程。

FAQ

常见问题

Galera 能提升写入性能吗?

不能。每个节点都要应用所有写入,因此它是可用性与数据保护手段,而非写扩展手段。需要写扩展时应采用分片等其他设计。

MySQL 与 MariaDB 之间切换容易吗?

早期兼容性很高,但随着版本分化,GTID 格式、系统表、JSON 处理、认证方式等差异变大。需要制定导出/复制切换计划并做兼容性测试。

2 节点 Galera 可行吗?

仅两个节点时,一个节点故障就会失去法定人数。建议增加 Galera Arbitrator(garbd)作为第三个投票者。

可以用什么替代 MaxScale?

ProxySQL,或 HAProxy(配合健康检查脚本)。MaxScale 为 BSL 许可,请先确认使用条件。

从现状开始,一起检查您的云与数据库?

告诉我们您使用的云、数据库版本、架构与困扰,我们将提出评估范围与实施方式。