Linux环境下ThinkPHP项目备份策略
ThinkPHP项目备份需覆盖项目文件与数据库两大核心部分,确保数据与程序完整性:
config/
目录)、静态资源(public/
目录下的CSS/JS/图片)等,这些文件存储了项目的业务逻辑与配置信息;使用Linux自带的tar
命令打包项目目录,实现高效压缩与归档。例如,若项目位于/var/www/html/my_thinkphp_project
,可执行以下命令:
cd /var/www/html # 进入项目上级目录
tar -czvf my_thinkphp_project_backup.tar.gz my_thinkphp_project # 打包并压缩项目目录
-c
创建新归档文件,-z
使用gzip压缩,-v
显示详细过程,-f
指定归档文件名。mysqldump
命令(推荐)mysqldump
是MySQL官方提供的备份工具,支持完整导出数据库结构(表、视图、存储过程)与数据。命令示例:
mysqldump -u root -pMySecretPassword my_database > /path/to/backup/my_database_backup_$(date +\%F).sql
-u
指定用户名,-p
后跟密码(无空格),my_database
为数据库名,>
将输出重定向到备份文件;$(date +\%F)
添加日期后缀(如my_database_backup_2025-10-05.sql
),便于区分不同时间的备份。ThinkPHP内置db:backup
命令,简化数据库备份流程。首先进入项目根目录,执行:
php think db:backup
runtime/db_backup
目录下;config/console.php
中的backup_path
参数调整存储位置。ThinkPHP的配置文件(如数据库连接、缓存设置、路由规则)存储在config/
目录下,备份该目录可快速恢复项目配置。使用tar
命令打包:
tar -czvf config_backup.tar.gz config/
通过Linux的cron
定时任务实现定期自动备份,避免人工遗漏。编辑crontab
文件:
crontab -e
添加以下内容(以每天凌晨2点备份为例):
# 每天凌晨2点备份数据库
0 2 * * * mysqldump -u root -pMySecretPassword my_database > /path/to/backup/my_database_backup_$(date +\%F).sql
# 每天凌晨3点备份项目文件
0 3 * * * tar -czvf /path/to/backup/my_thinkphp_project_backup_$(date +\%F).tar.gz /var/www/html/my_thinkphp_project
# 每天凌晨4点备份配置文件
0 4 * * * tar -czvf /path/to/backup/config_backup_$(date +\%F).tar.gz /var/www/html/my_thinkphp_project/config/
* * * * *
分别代表分钟、小时、日、月、星期,$(date +\%F)
需转义%
字符(\%F
),避免cron解析错误。/home/username/backups
或单独挂载的磁盘分区),避免项目目录被删除时连带丢失备份;cron
任务或ThinkPHP自定义命令清理过期备份(如保留近30天的备份)。例如,创建ClearDbBackup
命令(继承think\Console
类),在handle
方法中编写以下逻辑:$backupDir = '/path/to/backup';
$daysToKeep = 30;
foreach (glob($backupDir . '/*.sql') as $file) {
if (time() - filemtime($file) > $daysToKeep * 86400) {
unlink($file); // 删除超过30天的文件
}
}
然后在config/console.php
中注册该命令,设置每天凌晨5点执行。
/etc/environment
或项目根目录的.env
文件中,通过getenv('DB_PASSWORD')
获取;openssl
加密配置文件(如config/database.php
),使用时解密。600
(仅所有者可读写),防止未授权访问:chmod 600 /path/to/backup/*.sql
chmod 600 /path/to/backup/*.tar.gz
mysql -u root -pMySecretPassword my_database < /path/to/backup/my_database_backup_2025-10-05.sql
恢复项目文件:
tar -xzvf /path/to/backup/my_thinkphp_project_backup_2025-10-05.tar.gz -C /var/www/html/