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

11次阅读

mysql Enterprise Backup 备份前必须满足4个前提:以MySQL运行用户执行、备份目录有足够写权限和空间、实例运行且innodb_file_per_table=ON、未启用–skip-grant-tables或禁用InnoDB。

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

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

不满足以下任意一条,mysqlbackup 命令会直接失败或产生不可恢复的备份:

  • mysqlbackup 必须以 MySQL 实例运行用户(如 mysql)身份执行,否则无法访问 ibdata1redo 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] 段,需确保该段包含 userpassword
  • --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% completedBackup 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 STATUSLOG 部分显示 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.txtbackup_gtid_executed.sql,说明核心元数据已落盘;但没跑完 apply-log,这个备份仍是“半成品”。

text=ZqhQzanResources