温馨提示×

Ubuntu PHP日志备份与恢复方法

小樊
34
2025-11-30 03:31:46
栏目: 编程语言

Ubuntu PHP日志备份与恢复方法

一 日志位置与确认

  • 常见日志路径与用途如下(不同部署可能略有差异,请以实际配置为准):
    • Apache/var/log/apache2/error.log/var/log/apache2/access.log
    • Nginx/var/log/nginx/error.log/var/log/nginx/access.log
    • PHP-FPM/var/log/php-fpm//var/log/php7.x-fpm.log
    • 自定义 PHP 错误日志:由 php.ini 的 error_log 指定,例如 /var/log/php_errors.log
  • 快速确认方式与实时查看:
    • 查找 php.ini:php --ini
    • 查看日志尾部:sudo tail -f /var/log/apache2/error.logsudo tail -f /var/log/nginx/error.logsudo tail -f /var/log/php-fpm/error.log
    • 若配置了自定义 error_log,直接查看该文件即可。

二 备份方法

  • 使用 rsync 增量同步(适合持续备份与镜像)
    • 安装与同步示例:
      • sudo apt update && sudo apt install rsync
      • sudo rsync -av --delete /var/log/php/ /backup/logs/
    • 说明:-a 归档模式,-v 详细输出,–delete 使目标与源保持一致(谨慎使用)。
  • 使用 tar 压缩归档(适合按日归档与离线保存)
    • 单目录示例:
      • sudo tar -czvf /backup/logs/php-$(date +%Y%m%d).tar.gz -C /var/log/php .
    • 多目录示例(同时备份 FPM 与 Nginx 错误日志):
      • sudo tar -czvf /backup/logs/php-nginx-fpm-$(date +%Y%m%d).tar.gz /var/log/php-fpm /var/log/nginx/error.log
  • 自动化定时备份(cron)
    • 编辑任务:crontab -e
    • 示例(每天 02:00 执行 rsync):
      • 0 2 * * * rsync -av --delete /var/log/php/ /backup/logs/
    • 示例(每天 01:00 执行 tar 归档并保留 30 天):
      • 创建脚本 /usr/local/bin/backup_php_logs.sh
        #!/usr/bin/env bash
        set -e
        BACKUP_DIR="/backup/logs"
        DATE=$(date +%Y%m%d)
        mkdir -p "$BACKUP_DIR"
        tar -czvf "$BACKUP_DIR/php-$DATE.tar.gz" -C /var/log/php .
        find "$BACKUP_DIR" -type f -name "php-*.tar.gz" -mtime +30 -delete
        
      • 赋权并加入 cron:
        • sudo chmod +x /usr/local/bin/backup_php_logs.sh
        • 0 1 * * * /usr/local/bin/backup_php_logs.sh
  • 远程异地备份(可选)
    • 使用 scp 将归档复制到远程主机:
      • scp /backup/logs/php-$(date +%Y%m%d).tar.gz user@remote:/backup/

三 恢复方法

  • 从 rsync 镜像恢复(保持最新一致)
    • 基本用法(覆盖式恢复):
      • sudo rsync -av --delete /backup/logs/ /var/log/php/
    • 若需先备份现有日志再恢复:
      • sudo tar -czvf /backup/logs/php-before-restore-$(date +%Y%m%d%H%M%S).tar.gz -C /var/log/php .
      • 再执行上面的 rsync 恢复命令。
  • 从 tar 归档恢复
    • 进入目标目录后解压(避免绝对路径污染):
      • sudo tar -xzvf /backup/logs/php-20250417.tar.gz -C /var/log/php
    • 若归档包含多个目录(如 php-fpm 与 nginx 错误日志),同样在目标父目录解压:
      • sudo tar -xzvf /backup/logs/php-nginx-fpm-20250417.tar.gz -C /
  • 权限与生效
    • 确保日志目录与文件权限正确(示例):
      • sudo chown -R www-data:adm /var/log/php
      • sudo chmod 640 /var/log/php/*.log
    • 如使用 PHP-FPM,必要时重启以重新打开日志文件句柄:
      • sudo systemctl restart php7.x-fpm(将 7.x 替换为实际版本)

四 日志轮转与清理

  • 使用 logrotate 进行按日轮转、压缩与保留
    • 新建配置 /etc/logrotate.d/php
      /var/log/php/*.log {
          daily
          rotate 7
          compress
          delaycompress
          missingok
          notifempty
          create 640 www-data adm
          postrotate
              systemctl reload php7.x-fpm >/dev/null 2>&1 || true
          endscript
      }
      
    • 测试与强制执行:
      • sudo logrotate -d /etc/logrotate.d/php(干跑调试)
      • sudo logrotate -f /etc/logrotate.d/php(强制执行一次)
  • 按需在脚本中清理旧备份(示例保留 30 天已在备份脚本中给出)。

五 注意事项与最佳实践

  • 备份前先确认日志路径与配置,避免遗漏自定义 error_log;变更 php.ini 后需重启相应服务。
  • 执行恢复前先对当前日志做一次归档备份,便于回滚;谨慎使用 rsync --delete 与通配删除。
  • 为备份目录与归档设置合适的权限与属主,避免日志写入失败;远程备份注意传输加密与凭据安全。
  • 建议将备份与轮转结合:日常轮转控体积,定期归档与异地复制做长期留存与灾备。

0