mysql使用MySQL Enterprise Backup工具进行备份

来源:这里教程网 时间:2026-02-28 20:44:16 作者:

MySQL Enterprise Backup 备份前必须确认的 4 个前提

不满足以下任意一条,

mysqlbackup
命令会直接失败或产生不可恢复的备份:

mysqlbackup
必须以 MySQL 实例运行用户(如
mysql
)身份执行,否则无法访问
ibdata1
和 redo log 文件
目标备份目录需有写权限,且剩余空间 ≥ 当前数据目录大小 × 1.3(因包含临时日志、元数据和压缩开销) MySQL 实例必须处于运行状态,且
innodb_file_per_table=ON
(5.6+ 默认开启,但旧实例可能关闭;关闭时全库备份仍可进行,但单表恢复失效)
不能在
mysqld
启用了
--skip-grant-tables
或禁用 InnoDB 的情况下使用 ——
mysqlbackup
依赖 InnoDB 内部结构校验

最常用的一致性热备命令及关键参数含义

生产环境推荐使用带压缩、限速、并行的全量备份命令,避免 IO 打满影响业务:

mysqlbackup \
  --defaults-file=/etc/my.cnf \
  --user=root \
  --password=your_pass \
  --socket=/var/lib/mysql/mysql.sock \
  --backup-dir=/backup/full_$(date +%Y%m%d_%H%M%S) \
  --compress \
  --compress-method=zlib \
  --throttle=50 \
  --parallel=4 \
  --incremental-base=none \
  backup

说明:

--defaults-file
必须显式指定,
mysqlbackup
不读取
~/.my.cnf
;若配置中含
[client]
段,需确保该段包含
user
password
--compress-method=zlib
比默认
lz4
兼容性更好(尤其跨版本恢复时),但压缩率略低;若明确环境支持
lz4
,可用它提速
--throttle=50
表示每秒最多读取 50MB 数据,单位是 MB/s;值设为 0 表示不限速(慎用)
--incremental-base=none
显式声明为全量备份,避免误继承上一次备份路径导致意外增量行为

备份后必须验证的两个动作

备份完成不等于可用。跳过验证,恢复时大概率发现备份损坏或元数据缺失:

立即执行
mysqlbackup --backup-dir=/path/to/backup apply-log
:这一步重放 redo log,使备份达到「一致性点」;未执行此步的备份无法直接恢复
检查输出末尾是否含
100% completed
Backup created successfully
;若出现
Warning: Cannot open table mysql/innodb_index_stats
等提示,说明部分系统表未被正确识别(通常不影响主库恢复,但会影响后续
mysql_upgrade
可选但强烈建议:用
mysqlbackup --backup-dir=/path/to/backup validate
校验备份完整性(耗时较长,适合夜间执行)

常见报错与对应解决方式

遇到错误别急着重跑,先看日志里最末尾的

ERROR
行:

ERROR: Cannot connect to MySQL server
→ 检查
--socket
路径是否正确(
ls -l /proc/$(pidof mysqld)/fd/ | grep socket
可定位真实路径),或 MySQL 是否监听了 TCP 而非 Unix socket
ERROR: Unable to lock backup directory
→ 备份目录被其他
mysqlbackup
进程占用,或残留
backup-my.cnf.tmp
文件,手动清理再试
ERROR: Failed to read from log file ./ib_logfile0
→ MySQL 实例正在做 crash recovery 或刚启动不久,等待
SHOW ENGINE INNODB STATUS
LOG
部分显示
Log sequence number
稳定后再备份
ERROR: InnoDB: Operating system error number 24 in a file operation
(即
Too many open files
)→ 在
/etc/security/limits.conf
中为
mysql
用户设置
nofile
至少 65535,并重启
mysqld

备份路径里一旦出现

backup_variables.txt
backup_gtid_executed.sql
,说明核心元数据已落盘;但没跑完
apply-log
,这个备份仍是“半成品”。

相关推荐