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,这个备份仍是“半成品”。
