备份ThinkPHP项目的核心是项目文件、数据库和配置文件,以下是具体操作步骤:
使用tar命令打包项目目录(如/var/www/your_project),排除临时文件目录(如runtime,避免备份无用数据):
sudo tar -czvf project_backup.tar.gz /var/www/your_project --exclude=/var/www/your_project/runtime
-c:创建新归档文件;-z:用gzip压缩;-v:显示详细过程;-f:指定文件名。runtime目录可减少备份体积,该目录通常存放缓存、日志等临时文件。适用于所有MySQL/MariaDB数据库,命令示例:
mysqldump -u root -p'your_password' your_database > /backup/db_backup.sql
-u:指定数据库用户名;-p:后面紧跟密码(无空格);your_database:数据库名;> /backup/db_backup.sql:将输出重定向到备份文件。若项目已集成tp5er/tp5-databackup扩展,可通过ThinkPHP命令备份:
php think backup --db --path=/backup
--db:指定备份数据库;--path:自定义备份存储路径(需提前在config/console.php中配置backup_path)。2025-10-28_120000.sql),便于区分时间。ThinkPHP的配置文件(如数据库连接、路由规则)存储在config/目录,使用tar打包:
tar -czvf config_backup.tar.gz /var/www/your_project/config
恢复项目需按项目文件→数据库→配置文件的顺序操作,确保数据一致性:
解压备份文件至原项目路径(如/var/www/your_project):
sudo tar -xzvf project_backup.tar.gz -C /var/www/
-x:解压;-z:解gzip压缩;-C:指定解压目标目录。controller、model、view等目录是否存在)。将备份的SQL文件导入数据库:
mysql -u root -p'your_password' your_database < /backup/db_backup.sql
your_database)已存在,若不存在需先创建:mysql -u root -p'your_password' -e "CREATE DATABASE your_database;"
若备份文件是通过ThinkPHP生成的,可通过命令恢复:
php think restore --db --file=/backup/db_backup.sql
--file:指定备份文件路径(需绝对路径)。config/database.php)。解压配置备份文件并覆盖原目录:
sudo tar -xzvf config_backup.tar.gz -C /var/www/your_project/
config/目录,需确认备份文件的正确性(如database.php中的用户名、密码是否匹配)。权限设置
恢复后需调整项目目录权限,确保Web服务器(如Apache/Nginx)用户(通常为apache或nginx)有读写权限:
sudo chown -R apache:apache /var/www/your_project # 替换为实际用户
sudo chmod -R 755 /var/www/your_project
777),防止未授权访问。路径一致性
备份与恢复时需保持目录结构一致(如项目路径、数据库名、配置文件路径),避免因路径错误导致文件加载失败。
安全性保障
/backup或外部云存储),避免项目目录被删除时连带丢失备份;.env文件)或加密工具(如openssl)保护,避免硬编码在脚本中;600(仅所有者可读写):chmod 600 /backup/*.sql /backup/*.tar.gz
自动化与测试
crontab设置定时任务,定期执行备份(如每天凌晨2点备份数据库):crontab -e
添加以下内容:0 2 * * * mysqldump -u root -p'your_password' your_database > /backup/db_$(date +\%F).sql
0 3 * * * tar -czvf /backup/project_$(date +\%F).tar.gz /var/www/your_project --exclude=/var/www/your_project/runtime
(%需转义为\%,避免cron解析错误)过期备份清理
通过crontab或ThinkPHP自定义命令清理过期备份(如保留近30天的备份):
find命令删除超过30天的SQL文件:find /backup -type f -name "*.sql" -mtime +30 -exec rm {} \;
think\Console\Command),在handle方法中编写清理逻辑,并注册到config/console.php中,设置定时执行。通过以上步骤,可实现ThinkPHP项目在CentOS中的安全备份与快速恢复,确保项目数据与程序的完整性。