温馨提示×

Debian MySQL备份恢复方法是什么

小樊
41
2025-12-12 20:43:15
栏目: 云计算

Debian 上 MySQL 的备份与恢复实践

一 常用备份方式

  • 使用 mysqldump 做逻辑备份(适合中小规模、跨版本迁移、单库/多库/全库)
    • 备份单库:mysqldump -u root -p your_db > /backup/your_db.sql
    • 备份多库:mysqldump -u root -p --databases db1 db2 > /backup/dbs.sql
    • 备份所有库:mysqldump -u root -p --all-databases > /backup/all.sql
    • 备份单表:mysqldump -u root -p your_db your_table > /backup/your_table.sql
    • 一致性建议:InnoDB 加 --single-transaction;MyISAM 加 --lock-tables;远程备份加 -h 主机 -P 端口
    • 压缩节省空间:mysqldump -u root -p your_db | gzip > /backup/your_db.sql.gz
  • 使用 mysqlpump(MySQL 5.7+,支持并行导出,效率更高)
    • 示例:mysqlpump -u root -p --databases db1 db2 > /backup/dbs_parallel.sql
  • 使用 Percona XtraBackup(物理热备,适合大表/大数据量、需在线备份)
    • 安装:sudo apt-get update && sudo apt-get install percona-xtrabackup-24
    • 全量备份:xtrabackup --backup --target-dir=/path/to/backup
    • 准备备份:xtrabackup --prepare --target-dir=/path/to/backup
    • 恢复步骤:停库、清空数据目录、拷贝回数据、修正权限并启动(详见下文)

二 自动化与增量策略

  • 定时全量备份(cron)
    • 示例(每天 02:00):0 2 * * * /usr/bin/mysqldump -u root -pYourPass --single-transaction --routines --triggers --default-character-set=utf8mb4 your_db | gzip > /backup/your_db_$(date +\%F).sql.gz
    • 建议将脚本化并加入日志与错误告警,避免明文密码(可用 ~/.my.cnf 或凭据文件)
  • 增量备份与时间点恢复(Point-in-Time Recovery,PITR)
    • 启用二进制日志:在 [mysqld] 加入 log-bin=mysql-bin,重启后确认 SHOW VARIABLES LIKE 'log_bin';ON
    • 定期归档 binlog(如拷贝到备份目录),保留与全量备份一致的保留周期
    • 时间点恢复示例:
      • 查看当前位点:SHOW MASTER STATUS;
      • 回放某时段:mysqlbinlog --start-datetime="2025-04-01 00:00:00" --stop-datetime="2025-04-01 02:00:00" /var/log/mysql/mysql-bin.000001 | mysql -u root -p
    • 建议策略:每日全量 + 每小时增量;每周全量 + 每日增量;每月全量 + 每周差异 + 每日增量

三 恢复步骤

  • 从 mysqldump 备份恢复
    • 准备空库:mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
    • 导入:mysql -u root -p your_db < /backup/your_db.sql
    • 压缩包:gunzip < /backup/your_db.sql.gz | mysql -u root -p your_db
  • 从 mysqlpump 备份恢复
    • 与 mysqldump 相同:mysql -u root -p < /backup/dbs_parallel.sql
  • 从 XtraBackup 备份恢复(物理恢复)
    • 停库:sudo systemctl stop mysql
    • 备份并清空数据目录:sudo mv /var/lib/mysql /var/lib/mysql.bak && sudo mkdir -p /var/lib/mysql
    • 拷贝回数据:sudo xtrabackup --copy-back --target-dir=/path/to/backup
    • 修正权限:sudo chown -R mysql:mysql /var/lib/mysql
    • 启动:sudo systemctl start mysql
  • 时间点恢复(PITR)
    • 先按最近一次全量恢复到故障前,再用 mysqlbinlog 回放增量段至目标时间点或位置

四 关键注意事项与验证

  • 备份一致性
    • InnoDB 强烈建议加 --single-transaction;涉及存储过程/触发器请加 --routines --triggers;字符集建议显式指定(如 utf8mb4
  • 安全与存储
    • 备份文件不要放在数据库本地磁盘,建议至少 两份副本 并做异地/云存储;严格控制访问权限(如 600
  • 定期验证
    • 定期做恢复演练,校验表数量、数据量、主外键、视图/存储过程可用性;保留合理 保留周期校验记录
  • 容器场景
    • 如在 Docker/Podman 中,使用 docker exec -i <容器> sh -c 'exec mysqldump ...' > backup.sql 进行导出,导入时管道至容器内 mysql

0