运维与迁移
备份、恢复、监控、调优、从 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\G 的 Seconds_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 = 1innodb_flush_log_at_trx_commit = 0 极其危险,崩溃可能丢最近 1 秒事务。除非你的业务能容忍,否则保持 1。
查询调优三件套
EXPLAIN/EXPLAIN FORMAT=JSONANALYZE FORMAT=JSON SELECT ...(MariaDB 独有,实际跑一次给真实数据)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 -pMySQL 8.0 → MariaDB 11.x(跨分支,要小心)
风险点:
utf8mb4的默认 collation 不同:utf8mb4_0900_ai_civsutf8mb4_uca1400_ai_ci- JSON 函数行为差异
- 角色、密码插件(
caching_sha2_password在 MariaDB 不存在) SELECT ... INTO OUTFILE路径限制- 某些 hint / optimizer_switch 名字不同
推荐流程:
- 在 staging 把 dump 灌入 MariaDB
- 跑应用层完整测试套件
- 用
mysqlsh util.checkForServerUpgrade-like 工具或pt-upgrade对比 query 结果 - 通过后再切生产
从 PostgreSQL 迁过来
更难一些,因为 SQL 方言差异大。推荐工具:
pgloader—— PG → MariaDB/MySQL 的成熟工具- 应用层 ORM 抽象(如 SQLAlchemy / Prisma)可以降低改写成本
注意 PG 特有特性的对应:
| PostgreSQL | MariaDB 对应 |
|---|---|
SERIAL / BIGSERIAL | AUTO_INCREMENT |
UUID 类型 | BINARY(16) 或 10.7+ 的原生 UUID 类型 |
| 数组类型 | JSON 数组 |
JSONB | JSON(11.x 性能已大幅改善) |
全文检索 tsvector | InnoDB Full-Text 或外接 ES |
LISTEN/NOTIFY | 无对应,用消息队列 |
RETURNING | MariaDB 10.5+ INSERT ... RETURNING 支持 |