温馨提示×

CentOS SQLAdmin的备份与恢复流程

小樊
31
2025-12-05 19:29:16
栏目: 云计算

适用范围与前提

  • SQLAdmin在Linux环境中通常是用于管理数据库的Web管理工具(如phpMyAdmin、Adminer、或厂商提供的同名工具),本身不执行备份/恢复;真正的备份与恢复由数据库引擎完成。以下流程以CentOS上的MySQL/MariaDB为主,亦给出PostgreSQL的常用做法与自动化示例。操作前请确认数据库类型、版本、数据目录(如**/var/lib/mysql**)、配置文件(如**/etc/my.cnf**)及备份存放路径,并在非生产环境充分演练。

MySQL 备份与恢复流程

  • 逻辑备份(mysqldump,适合大多数场景)
    • 备份单库:
      • mysqldump -uroot -pyour_password --single-transaction --routines --triggers --default-character-set=utf8mb4 dbname > /backups/dbname_$(date +%F).sql
    • 备份全库(不含系统库可选):
      • mysqldump -uroot -pyour_password --single-transaction --routines --triggers --databases db1 db2 > /backups/full_$(date +%F).sql
    • 压缩备份(节省空间):
      • mysqldump -uroot -pyour_password dbname | gzip > /backups/dbname_$(date +%F).sql.gz
    • 恢复:
      • 先建库(如不存在):mysql -uroot -p -e “CREATE DATABASE IF NOT EXISTS dbname CHARACTER SET utf8mb4;”
      • 逻辑恢复:mysql -uroot -pyour_password dbname < /backups/dbname_2025-12-05.sql
      • 压缩包恢复:gunzip < /backups/dbname_2025-12-05.sql.gz | mysql -uroot -pyour_password dbname
  • 物理备份(Percona XtraBackup,适合大库/要求快速恢复)
    • 全量备份:
      • xtrabackup --defaults-file=/etc/my.cnf --backup --user=root --password --target-dir=/backups/full_$(date +%F)
    • 准备备份:
      • xtrabackup --prepare --target-dir=/backups/full_2025-12-05
    • 恢复(需停库并清空数据目录):
      • mysqladmin -uroot -pyour_password shutdown
      • rm -rf /var/lib/mysql/*
      • xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/backups/full_2025-12-05
      • chown -R mysql:mysql /var/lib/mysql
      • 启动:systemctl start mysqld 或 mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &
  • 要点
    • 建议备份命令加入**–single-transaction**(InnoDB一致性)、–routines/–triggers;如含GTID,增加**–set-gtid-purged=OFF**(避免导入到已启用GTID实例时报错)。
    • 恢复前确认my.cnf中datadir、socket、server-id等配置与备份来源一致;物理恢复后务必校正权限并启动服务再校验数据。

PostgreSQL 备份与恢复流程

  • 备份
    • 自定义格式(便于选择性恢复):
      • pg_dump -U postgres -F c -f /backups/pgdb_$(date +%F).backup dbname
    • 纯文本SQL脚本:
      • pg_dump -U postgres -f /backups/pgdb_$(date +%F).sql dbname
  • 恢复
    • 自定义格式:
      • pg_restore -U postgres -d dbname /backups/pgdb_2025-12-05.backup
    • SQL脚本:
      • psql -U postgres -d dbname -f /backups/pgdb_2025-12-05.sql
  • 要点
    • 恢复前确保目标库存在(createdb),大库建议用pg_restore并配合-J并行;文本脚本恢复前可先检查语法或在测试库验证。

自动化备份与校验

  • 示例脚本(MySQL,含日志与保留策略)
    • 路径与变量:BACKUP_DIR=/backups/mysql;DATE=$(date +%F_%H%M%S);LOG=/var/log/backup_mysql.log
    • 备份与压缩:mysqldump -uroot -pyour_password --single-transaction --routines --triggers dbname | gzip > $BACKUP_DIR/db_$DATE.sql.gz
    • 成功/失败记录:if [ $? -eq 0 ]; then echo “$(date) OK $BACKUP_DIR/db_$DATE.sql.gz” >> $LOG; else echo “$(date) FAIL” >> $LOG; fi
    • 保留最近7天:find $BACKUP_DIR -name “db_*.sql.gz” -mtime +7 -delete
  • 定时任务(cron)
    • 每天02:00执行:0 2 * * * /usr/local/bin/backup_mysql.sh
  • 校验建议
    • 定期在测试环境执行恢复演练;对压缩包做gunzip -t校验;记录并告警备份日志;重要备份可同步至异地/对象存储

常见注意事项与故障排查

  • 权限与目录
    • 备份目录属主应为执行备份的用户;物理恢复后**/var/lib/mysql必须属主mysql:mysql**;确保磁盘空间充足。
  • 一致性
    • MySQL InnoDB使用**–single-transaction**避免锁表;MyISAM需谨慎停写或使用–lock-all-tables。
  • 版本与兼容性
    • 跨大版本恢复可能失败;PostgreSQL自定义格式与文本脚本的恢复方式不同,按备份类型选择pg_restore/psql
  • 恢复目标
    • 恢复前确认目标库名、字符集(如utf8mb4)、时区、GTID/复制位点等配置,避免业务异常。
  • 日志与告警
    • 打开并监控数据库错误日志(如**/var/log/mysqld.log**);备份脚本加入日志与失败告警,便于及时处置。

0