一、备份流程
使用tar命令打包ThinkPHP项目目录(如/var/www/your_project),排除临时文件目录(如runtime,避免缓存、日志等冗余数据干扰备份):
cd /var/www # 进入项目上级目录
sudo tar -czvf your_project_backup.tar.gz --exclude='your_project/runtime' your_project
-c创建新归档,-z用gzip压缩,-v显示详细过程,--exclude排除指定目录。/backup或外部存储设备),避免与项目目录同磁盘。mysqldump命令(推荐)通过MySQL官方工具导出数据库结构(表、视图)与数据,适用于所有MySQL/MariaDB版本:
mysqldump -u root -p'your_password' your_database > /backup/db_backup.sql
-u指定用户名,-p后跟密码(无空格),your_database为项目数据库名,>将输出重定向至备份文件。--single-transaction参数(InnoDB表适用),确保备份一致性。若项目已集成tp5er/tp5-databackup扩展,可直接通过命令行备份:
cd /var/www/your_project # 进入项目根目录
php think backup --db --path=/backup
--db表示备份数据库,--path指定备份存储路径(需提前在config/console.php中配置backup_path)。ThinkPHP的核心配置(数据库连接、路由规则、缓存设置等)存储在config/目录,需单独备份:
sudo tar -czvf config_backup.tar.gz /var/www/your_project/config
通过crontab定时执行备份脚本,避免人工遗漏。编辑当前用户的cron任务:
crontab -e
添加以下内容(每天凌晨2点备份数据库、3点备份项目文件、4点备份配置文件):
# 每天凌晨2点备份数据库
0 2 * * * mysqldump -u root -p'your_password' your_database > /backup/db_$(date +\%F).sql
# 每天凌晨3点备份项目文件
0 3 * * * tar -czvf /backup/your_project_$(date +\%F).tar.gz --exclude='your_project/runtime' /var/www/your_project
# 每天凌晨4点备份配置文件
0 4 * * * tar -czvf /backup/config_$(date +\%F).tar.gz /var/www/your_project/config
%需转义为\%,避免cron解析错误。二、恢复流程
mysql命令导入若备份文件为SQL格式,直接导入目标数据库(需确保数据库已存在):
mysql -u root -p'your_password' your_database < /backup/db_backup.sql
若备份文件为ThinkPHP生成的格式(如runtime/db_backup/下的文件),可使用内置命令:
cd /var/www/your_project # 进入项目根目录
php think restore --db --file=/backup/db_backup.sql
解压项目备份文件至原路径(如/var/www/your_project),覆盖现有文件:
sudo tar -xzvf /backup/your_project_backup.tar.gz -C /var/www/
apache或nginx)有读写权限:sudo chown -R apache:apache /var/www/your_project # 若使用Apache
sudo chmod -R 755 /var/www/your_project/runtime # 确保runtime目录可写
解压配置备份文件至项目config/目录,覆盖原有配置:
sudo tar -xzvf /backup/config_backup.tar.gz -C /var/www/your_project/
三、注意事项
sudo提升权限,确保对项目目录、数据库有完全访问权限。runtime目录需可写),避免因权限不足导致项目无法运行。/var/www/your_project),避免因路径错误导致文件加载失败。public_path、runtime_path)。/var/www/html),防止恶意下载。find命令删除7天前的备份),避免磁盘空间耗尽:# 在备份脚本中添加以下命令(删除7天前的.sql文件)
find /backup -name "your_project_*.sql" -mtime +7 -exec rm -f {} \;