MariaDB 中文社区

运维与迁移

备份、恢复、监控、调优、从 MySQL/PG 迁移到 MariaDB

备份

物理备份:MariaDB Backup(推荐)

mariabackup(fork 自 Percona XtraBackup)是 MariaDB 自带的热备份工具,不锁主库。

# 全量
mariabackup --backup \
  --target-dir=/data/backup/$(date +%F) \
  --user=root --password=xxx

# 准备(apply log)
mariabackup --prepare --target-dir=/data/backup/2026-05-18

# 恢复(停库后)
systemctl stop mariadb
mariabackup --copy-back --target-dir=/data/backup/2026-05-18
chown -R mysql:mysql /var/lib/mysql
systemctl start mariadb

逻辑备份:mariadb-dump

适合小库 / 跨大版本迁移:

mariadb-dump --single-transaction --routines --triggers --events \
  --all-databases -uroot -p > full.sql

备份的"三个一"原则

  • 1 份在本地
  • 1 份在异地(不同区域)
  • 1真正恢复过的备份才是有效的

监控

最少要看的指标:

指标命令 / 来源警戒线
连接数SHOW STATUS LIKE 'Threads_connected'> 80% max_connections
缓冲池命中率Innodb_buffer_pool_read_requests / Innodb_buffer_pool_reads< 99% 说明 buffer pool 太小
慢查询slow_query_log每分钟 > 几条要查
复制延迟SHOW SLAVE STATUS\GSeconds_Behind_Master> 10s 报警
磁盘使用OS 层 df> 80% 报警
锁等待INFORMATION_SCHEMA.INNODB_LOCK_WAITS有就报警

工具推荐:Percona PMM(开源、支持 MariaDB)、Prometheus + mysqld_exporter、云厂商自带。

调优速查

最常调的几个参数

# my.cnf
[mariadb]
innodb_buffer_pool_size       = 60% of RAM
innodb_log_file_size          = 1G          # MariaDB 10.5+ 用 innodb_redo_log_capacity
innodb_flush_log_at_trx_commit = 1          # 安全;2 / 0 性能换持久性
sync_binlog                   = 1           # 同上
max_connections               = 500
slow_query_log                = 1
long_query_time               = 1

innodb_flush_log_at_trx_commit = 0 极其危险,崩溃可能丢最近 1 秒事务。除非你的业务能容忍,否则保持 1

查询调优三件套

  1. EXPLAIN / EXPLAIN FORMAT=JSON
  2. ANALYZE FORMAT=JSON SELECT ...(MariaDB 独有,实际跑一次给真实数据)
  3. pt-query-digest 分析 slow log

从 MySQL 迁过来

同版本号附近(MySQL 5.7 → MariaDB 10.5+)

mysqldump -uroot -p --all-databases --routines --triggers --events \
  --single-transaction > dump.sql

# 在 MariaDB 端
mariadb -uroot -p < dump.sql
mariadb-upgrade -uroot -p

MySQL 8.0 → MariaDB 11.x(跨分支,要小心)

风险点:

  • utf8mb4 的默认 collation 不同:utf8mb4_0900_ai_ci vs utf8mb4_uca1400_ai_ci
  • JSON 函数行为差异
  • 角色、密码插件(caching_sha2_password 在 MariaDB 不存在)
  • SELECT ... INTO OUTFILE 路径限制
  • 某些 hint / optimizer_switch 名字不同

推荐流程

  1. 在 staging 把 dump 灌入 MariaDB
  2. 跑应用层完整测试套件
  3. mysqlsh util.checkForServerUpgrade-like 工具或 pt-upgrade 对比 query 结果
  4. 通过后再切生产

从 PostgreSQL 迁过来

更难一些,因为 SQL 方言差异大。推荐工具:

  • pgloader —— PG → MariaDB/MySQL 的成熟工具
  • 应用层 ORM 抽象(如 SQLAlchemy / Prisma)可以降低改写成本

注意 PG 特有特性的对应:

PostgreSQLMariaDB 对应
SERIAL / BIGSERIALAUTO_INCREMENT
UUID 类型BINARY(16) 或 10.7+ 的原生 UUID 类型
数组类型JSON 数组
JSONBJSON(11.x 性能已大幅改善)
全文检索 tsvectorInnoDB Full-Text 或外接 ES
LISTEN/NOTIFY无对应,用消息队列
RETURNINGMariaDB 10.5+ INSERT ... RETURNING 支持

进一步阅读

本页目录