在Linux环境下用PHP做备份这事儿,其实不复杂,但有几个关键点得理清楚。很多开发者一上来就想着用现成的工具,但自己写个脚本,反而更灵活、更可控。下面直接进入正题,讲清楚具体怎么做。
第一步:确定备份目标
首先得明确你想备份什么。是整个网站目录?还是某个数据库?或者只是几个关键配置文件?这个决定直接影响后续脚本的写法。常见的场景是备份整个站点文件夹,加上数据库导出,但这里我们先聚焦文件备份,数据库备份可以单独处理。
第二步:编写备份脚本
PHP脚本的核心就是用shell_exec或exec调用系统命令,比如tar来打包压缩。下面是一个典型的示例,备份指定目录并生成带时间戳的.tar.gz文件:
注意这里用了escapeshellarg对路径进行转义,避免特殊字符引发安全问题,这是必须养成的习惯。另外,备份文件保存在原目录下只是一种临时方案,正式场景应另存到独立存储路径。
第三步:设置定时任务
手动运行脚本显然不够“自动化”,这时候就需要cron登场了。比如希望每天凌晨1点自动执行备份,可以在crontab中这样写:
0 1 * * * /usr/bin/php /path/to/your/backup-script.php
添加方法很简单:运行crontab -e,在打开的编辑器中加入上述行,保存即可。注意/usr/bin/php要替换成你系统上PHP的实际路径,可以用which php查询。
第四步:妥善存储备份文件
备份文件如果只留在原服务器上,那基本等于没备份——服务器一挂,一切归零。所以需要把文件传到远程存储,比如另一台服务器、云存储(OSS、S3等)或挂载的NAS。常用的传输工具有scp、rsync,也可以直接在脚本里调用curl上传到API。如果是关键数据,建议同时保留本地和远端两份副本。
最后提醒一点:运行脚本的用户必须拥有对备份目录的读写权限,以及执行tar等命令的权限。另外,如果备份包含大量小文件,tar打包可能会比较慢,可以考虑用rsync做增量备份作为补充策略。以上方案足够应对绝大多数中小规模站点的日常备份需求,你可以根据实际环境做适当调整。
