温馨提示×

Linux上ThinkPHP项目如何备份

小樊
31
2025-11-28 16:34:34
栏目: 编程语言

Linux上ThinkPHP项目备份实操指南

一 备份范围与准备

  • 明确备份对象:
    • 代码与资源:项目源码目录(如**/var/www/your_project**)、.envconfig/database.php等敏感配置。
    • 数据与结构:MySQL/MariaDB 数据库(建议同时保留结构与数据)。
  • 准备备份目录与权限:
    • 建议统一放在如**/opt/backups/your_project/**,并限制访问权限(仅备份用户可读写)。
    • 示例:sudo mkdir -p /opt/backups/your_project && sudo chown -R www-data:www-data /opt/backups/your_project && sudo chmod 700 /opt/backups/your_project
  • 安全建议:避免在命令行或代码中明文写密码,优先使用环境变量或受控配置文件读取凭据。
  • 工具检查:确保已安装mysqldump/mysqltar,且运行备份的用户对数据库与备份目录具备相应权限。

二 方案一 快速手动备份(适合临时或一次性)

  • 数据库备份(mysqldump):
    • 基本用法:mysqldump -u 用户名 -p 数据库名 > 备份文件.sql(回车后输入密码)。
    • 指定主机与端口:mysqldump -h 主机 -P 端口 -u 用户名 -p 数据库名 > 备份文件.sql
    • 示例:mysqldump -h 127.0.0.1 -P 3306 -u root -p tp5_db > /opt/backups/your_project/db_$(date +%F_%H-%M-%S).sql
  • 项目代码与配置打包:
    • 示例:tar -czvf /opt/backups/your_project/code_$(date +%F_%H-%M-%S).tar.gz -C /var/www your_project
  • 说明:上述命令适用于所有基于MySQL的 ThinkPHP 项目,简单可靠,便于立即执行与迁移。

三 方案二 在ThinkPHP中编程实现备份(便于集成与可控)

  • 命令行命令方式(推荐):
    • 生成命令字符串时从配置读取连接信息,避免硬编码密码;使用exec/system执行并判断返回码。
    • 示例要点:
      • 获取配置:$dbConfig = Db::getConfig();
      • 构造命令:mysqldump -h {$dbConfig['host']} -P {$dbConfig['port']} -u {$dbConfig['username']} -p{$dbConfig['password']} {$dbConfig['database']} > {$backupFile}
      • 执行并校验:exec($cmd, $out, $ret); $ret === 0 表示成功。
  • 自定义命令(便于团队与定时任务调用):
    • 生成自定义命令:php think make:command Backup,在execute()中封装上面的备份逻辑。
    • 注册命令后可直接运行:php think backup
  • 安全与可维护性:
    • 敏感信息通过环境变量或框架配置读取;对失败写入日志;备份完成后可做文件大小校验保留策略

四 自动化与保留策略

  • 使用 Cron 定时执行:
    • 示例(每天02:00备份数据库,保留7天):
      • 编辑:crontab -e
      • 条目:0 2 * * * /usr/bin/mysqldump -h 127.0.0.1 -P 3306 -u dbuser -p'DBPASS' tp5_db > /opt/backups/your_project/db_$(date +\%F).sql && find /opt/backups/your_project -name "db_*.sql" -mtime +7 -delete
    • 如需同时备份代码:0 2 * * * /bin/tar -czf /opt/backups/your_project/code_$(date +\%F).tar.gz -C /var/www your_project
  • 保留策略建议:
    • 时间滚动(如保留最近7–30天);
    • 重要节点(版本上线、迁移)可打标签另存;
    • 定期在测试环境恢复演练,验证可用性与完整性。

五 恢复与校验

  • 数据库恢复:
    • 基本用法:mysql -u 用户名 -p 数据库名 < 备份文件.sql(回车后输入密码)。
    • 指定字符集(如有乱码风险):mysql -u 用户名 -p --default-character-set=utf8mb4 数据库名 < 备份文件.sql
  • 代码与配置恢复:
    • 解压覆盖:tar -xzvf code_2025-11-28.tar.gz -C /var/www/ && chown -R www-data:www-data /var/www/your_project
    • 恢复后核对:配置是否匹配、目录权限是否正确、应用是否能正常连接数据库。
  • 校验清单:
    • 检查备份文件大小修改时间
    • 抽样表数据量对比;
    • 在预备环境做一次全量恢复演练,确认无误再用于生产。

0