首页主机资讯Linux下ThinkPHP如何备份

Linux下ThinkPHP如何备份

时间2025-12-04 23:55:03发布访客分类主机资讯浏览444
导读:Linux下ThinkPHP备份实操指南 一 备份策略与准备 备份对象通常包含两部分:一是数据库(如 MySQL/MariaDB),二是项目代码与配置(含上传目录、配置文件等)。 建议准备一个专用备份目录(如 /opt/backups/y...

Linux下ThinkPHP备份实操指南

一 备份策略与准备

  • 备份对象通常包含两部分:一是数据库(如 MySQL/MariaDB),二是项目代码与配置(含上传目录、配置文件等)。
  • 建议准备一个专用备份目录(如 /opt/backups/your_project/),并确保运行备份的用户对该目录有读写权限,同时具备访问数据库的账号与权限
  • 为降低风险,备份文件应定期异地/离线保存,并做好保留周期容量规划。

二 数据库备份

  • 方式一 命令行 mysqldump(最通用)

    • 基本用法:
      • 交互式输入密码:
        mysqldump -h 127.0.0.1 -u 用户名 -p 数据库名 >
             /opt/backups/your_project/db_$(date +%F_%H-%M-%S).sql
        
      • 命令行直接带密码(注意安全):
        mysqldump -h 127.0.0.1 -u 用户名 -p'密码' 数据库名 >
             /opt/backups/your_project/db_$(date +%F_%H-%M-%S).sql
        
      • 常用增强参数(按需添加):
        --single-transaction --routines --triggers --hex-blob --set-gtid-purged=OFF
        
    • 恢复命令:
      mysql -h 127.0.0.1 -u 用户名 -p 数据库名 <
           /opt/backups/your_project/db_2025-12-04_10-00-00.sql
      
    • 说明:上述方法适用于所有基于 MySQLThinkPHP 应用,简单、可靠、便于自动化。
  • 方式二 在ThinkPHP中编程生成SQL备份(便于集成到后台)

    • 思路:使用 Db 类获取所有表名,遍历执行 SHOW CREATE TABLE 获取建表语句,再对每张表 SELECT * FROM 生成 INSERT 语句,写入 .sql 文件。
    • 示例(简化版):
      use think\Db;
          
      
      $tables = Db::query('SHOW TABLES');
          
      $backup = "SET FOREIGN_KEY_CHECKS=0;
          \n\n";
      
      foreach ($tables as $row) {
          
          $table = current($row);
          
          $ddl  = Db::query("SHOW CREATE TABLE `$table`")[0]['Create Table'];
          
          $backup .= "$ddl;
          \n\n";
          
          $data = Db::table($table)->
          select();
      
          foreach ($data as $row) {
          
              $cols = array_map(fn($c) =>
           "`$c`", array_keys($row));
          
              $vals = array_map(fn($v) =>
           is_null($v) ? 'NULL' : "'".addslashes($v)."'", $row);
          
              $backup .= "INSERT INTO `$table` (".implode(',', $cols).") VALUES (".implode(',', $vals).");
          \n";
      
          }
      
      }
          
      $backup .= "SET FOREIGN_KEY_CHECKS=1;
          \n";
          
      file_put_contents('/opt/backups/your_project/db_'.date('YmdHis').'.sql', $backup);
          
      
    • 提示:大数据量时建议改用 mysqldump 或分批导出,避免内存溢出与超时。

三 项目代码与上传目录备份

  • 打包整个项目目录(不含敏感或临时文件更稳妥):
    tar --exclude='runtime' --exclude='.git' --exclude='*.log' \
        -czvf /opt/backups/your_project/code_$(date +%F_%H-%M-%S).tar.gz \
        -C /var/www your_project
    
  • 仅备份配置与上传目录(常见做法):
    tar -czvf /opt/backups/your_project/config_upload_$(date +%F).tar.gz \
        /var/www/your_project/config /var/www/your_project/public/uploads
    
  • 说明:tar 是 Linux 下常用的归档与压缩工具,适合做目录级备份与迁移。

四 自动化与保留策略

  • 使用 crontab 定时执行(示例:每天 02:00 备份数据库与代码)
    0 2 * * * /usr/bin/mysqldump -h127.0.0.1 -u用户名 -p'密码' 数据库名 >
         /opt/backups/your_project/db_$(date +\%F).sql
    30 2 * * * tar --exclude='runtime' --exclude='.git' -czvf /opt/backups/your_project/code_$(date +\%F).tar.gz -C /var/www your_project
    
    • 注意:crontab 中 % 需转义为 %,否则会被当作换行。
  • 保留策略示例(保留最近 7 天):
    # 每天清理7天前的数据库与代码备份
    0 3 * * * find /opt/backups/your_project -name "db_*.sql" -mtime +7 -delete
    0 3 * * * find /opt/backups/your_project -name "code_*.tar.gz" -mtime +7 -delete
    
  • 建议将备份文件再同步到远程存储(如对象存储/内网备份机),提升可靠性。

五 恢复与校验

  • 数据库恢复:
    mysql -h 127.0.0.1 -u 用户名 -p 数据库名 <
         /opt/backups/your_project/db_2025-12-04_10-00-00.sql
    
    • 如遇到字符集问题,可在导入时指定:
      mysql -h 127.0.0.1 -u 用户名 -p --default-character-set=utf8mb4 数据库名 <
           backup.sql
      
  • 代码恢复:
    tar -xzvf /opt/backups/your_project/code_2025-12-04.tar.gz -C /var/www
    
  • 校验建议:
    • 检查备份文件大小修改时间是否合理。
    • 在测试环境抽样恢复验证表结构与数据一致性。
    • 定期做恢复演练,确保流程可用。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Linux下ThinkPHP如何备份
本文地址: https://pptw.com/jishu/764107.html
ThinkPHP在Linux怎样更新 Ubuntu中Fortran内存管理如何实现

游客 回复需填写必要信息