Linux环境下ThinkPHP项目备份指南
在开始备份前,需明确备份范围:项目文件(包含应用代码、配置文件)、数据库(存储业务数据的核心资产)。建议将备份文件存储在独立分区或外部存储设备(如NAS),避免与项目文件同目录导致磁盘空间耗尽。
使用tar命令将ThinkPHP项目目录(如/var/www/your_project)打包为压缩文件,保留目录结构及文件权限:
cd /var/www/ # 进入项目父目录
sudo tar -czvf your_project_backup_$(date +%F).tar.gz your_project/ # 打包并添加日期后缀
-c:创建新压缩包;-z:使用gzip压缩;-v:显示详细过程;-f:指定压缩包名称。your_project_backup_2025-11-08.tar.gz。ThinkPHP的配置文件(如数据库连接、应用设置)通常位于application/config.php、config/database.php或extra目录下。可将配置目录单独打包:
sudo tar -czvf config_backup_$(date +%F).tar.gz application/config/ config/database.php
mysqldump命令(推荐)mysqldump是MySQL官方备份工具,支持完整导出数据库结构(表、视图)及数据。
# 基本语法(替换为实际信息)
mysqldump -h [数据库主机] -P [端口,默认3306] -u [用户名] -p[密码] [数据库名] > [备份文件路径]
# 示例(备份名为"your_db"的数据库)
mysqldump -h localhost -u root -pYourPassword your_db > /path/to/backup/your_db_backup_$(date +%F).sql
-p与密码之间无空格;若密码包含特殊字符,建议用-p(无密码)后交互式输入。/path/to/backup/),文件名包含日期便于区分。ThinkPHP提供了db:backup命令,简化数据库备份流程:
# 进入项目根目录
cd /var/www/your_project
# 执行备份命令(默认存储到runtime/db_backup目录)
php think db:backup
config/database.php中的backup_path参数,或在命令中指定:php think db:backup --path=/path/to/custom/backup
crontab -e添加每日自动备份(如凌晨2点):0 2 * * * /usr/bin/php /var/www/your_project/think db:backup >> /var/log/db_backup.log 2>&1
日志会记录到/var/log/db_backup.log,便于排查问题。结合cron实现定期备份,避免人工遗漏:
# 编辑当前用户的cron任务
crontab -e
# 添加以下内容(每天凌晨2点备份数据库,3点备份项目文件)
0 2 * * * /usr/bin/mysqldump -h localhost -u root -pYourPassword your_db > /path/to/backup/your_db_$(date +\%F).sql
0 3 * * * /usr/bin/tar -czvf /path/to/backup/your_project_$(date +\%F).tar.gz /var/www/your_project
%需转义为\%,避免cron解析错误。定期删除超过保留期限的备份文件,节省存储空间:
# 创建清理脚本(如/path/to/cleanup_backups.sh)
#!/bin/bash
# 删除7天前的.sql备份
find /path/to/backup -name "*.sql" -mtime +7 -exec rm {} \;
# 删除30天前的.tar.gz备份
find /path/to/backup -name "*.tar.gz" -mtime +30 -exec rm {} \;
# 赋予执行权限
chmod +x /path/to/cleanup_backups.sh
# 添加到cron(每周日凌晨1点执行)
0 1 * * 0 /path/to/cleanup_backups.sh
备份完成后,需验证备份文件的完整性:
尝试用备份文件恢复到测试数据库,检查数据是否一致:
# 创建测试数据库
mysql -u root -p -e "CREATE DATABASE your_db_test;"
# 恢复备份文件
mysql -u root -p your_db_test < /path/to/backup/your_db_backup_2025-11-08.sql
# 登录测试数据库,查询关键表数据
mysql -u root -p -e "USE your_db_test; SELECT COUNT(*) FROM your_table;"
若数据量一致,则备份成功。
解压备份文件,检查关键目录(如application/controller、public)是否存在:
tar -tzvf your_project_backup_2025-11-08.tar.gz | grep "application/controller"
tar -tzvf your_project_backup_2025-11-08.tar.gz | grep "public/index.php"
敏感信息保护:
700(仅所有者可读写):chmod 700 /path/to/backup
备份文件加密(可选):
若备份文件包含高度敏感数据,可使用gpg加密:
gpg -c /path/to/backup/your_db_backup.sql # 生成加密文件your_db_backup.sql.gpg
rm /path/to/backup/your_db_backup.sql # 删除原始备份文件
解密时使用:
gpg -d your_db_backup.sql.gpg > your_db_backup.sql
通过以上步骤,可实现Linux环境下ThinkPHP项目的全面备份,确保数据安全与业务连续性。