网站有可能因服务器数据丢失而一夜之间变得毫无内容,国内某个颇有名气的论坛,由于备份不完整致使十年间所发的帖子没办法恢复,这样的教训是值得引起警觉的。预先去配置可靠的备份策略,这是每一位PHP网站管理员必须要学习的课程。
认清该备份哪些内容
网站的源码乃是根基所在,它涵盖了所有的PHP文件,还有HTML页面,以及JavaScript脚本,这些文件要是一旦被篡改或者被删除,那么网站的前端就会直接出现报错的情况,甚至致使无法访问。
文章内容、用户信息以及网站配置被存储于数据库,一旦丢失网站就会失去动态能力。2024年,某电商平台由于数据库损坏并且没有备份,直接停业了三天,损失极为惨重。
存储着数据库账号密码等重要信息的配置文件像是config.php ,是一定要被纳入备份范围之内的。用户上传的内容一般是存放在uploads目录之中,那些附件要是丢失了,同样会对用户体验造成影响的。
编写可靠的备份脚本
backup.sh这个脚本要存放在/root/backup目录,并且要声明解释器路径在开头,它的功能是要同时完成文件打包以及数据库导出这两项任务。
对文件进行打包操作时,运用tar命令来压缩网站的根目录如/var/www/html ,数据库导出借助mysqldump予以达成,这还需要预先配置数据库的用户名以及密码。
#!/bin/bash WEB_DIR="/var/www/html" DB_NAME="your_db" DB_USER="root" DB_PASS="your_password" BACKUP_DIR="/data/backup" DATE=$(date +%Y%m%d_%H%M%S)创建备份目录
mkdir -p $BACKUP_DIR
打包网站文件
tar -czf $BACKUPDIR/files$DATE.tar.gz -C $WEB_DIR .
导出数据库
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUPDIR/db$DATE.sql.gz
删除7天前的旧备份
find $BACKUP_DIR -name ".tar.gz" -mtime +7 -delete find $BACKUP_DIR -name ".sql.gz" -mtime +7 -delete
写入脚本之际,务必要增添过期备份予以删除的这种逻辑思维,得留存最近七天或者三十天所历经生成的备份文件。执行删除命令之时,运用find并搭配-mtime这类参数去处理该项操作,以此达成防止磁盘空间被填满这种状况出现的目的。
设置精准的定时任务
进行cron定时任务操作时,要保证每天在固定的时间去执行,比较好的做法是挑选凌晨那个访问量低的时段。执行编辑crontab文件这个动作,添加0 2 * /root/backup/backup.sh这样一行命令。
若添加任务了,那就得去检查cron服务的状态,利用systemctl status cron来确认是否在正常运行。之前存在这样的情况,有站长在设置cron之后把保存这件事给忘了,时隔半年之后才发觉压根没执行过备份,这是怎么回事啊。
那个定时任务日志所在之处是/var/log/syslog,借助grep cron能够去查看执行的记录。当察觉到异常之际,首先要去排查脚本权限或者路径方面的问题。
实现安全的异地存储
在本地备份硬盘损坏的事例常常出现的情况下,将rsync用于同步至远程服务器作为基础方案,其命令格式为rsync -avz /backup/ user@remote:/backup/ ,而这需要预先配置SSH免密登录。
云存储对象服务,像阿里云OSS或者腾讯云COS,是适合用于长期归档的,其每月成本仅仅只有几十元。上传脚本需要集成对应的SDK,并且要设置Bucket为私有读写权限。
敏感的数据,像数据库文件那般,一定要加密进行传输,运用gpg命令去对备份包予以加密。密钥文件,要单独进行保管,以此来防止服务器遭受入侵之后,备份数据跟着一起被泄露。
制定详细的恢复流程
0 2 * * * /root/backup/backup.sh
若要恢复文档,需注明网站根目录所处位置、数据库的名称以及账号密码等关键信息。当服务器出现宕机情况时,第一步是先去安装具有相同版本的PHP和MySQL环境。
把用于备份包解压以恢复文件的tar,被解压到原目录那儿,要留意备份原目录所存在的现有文件。数据库恢复借助mysql命令来导入SQL文件呢,得提前去创建一个空数据库。
配置文件恢复完毕之后,要即刻将权限改成644,以此避免被非法进行读取。恢复达成之后,一定要针对网站展开访问,对所有功能予以测试,其中涵盖用户登录以及文章发布模块。
坚持定期演练验证
全恢复每季度于测试服务器模拟一回,耗时一般在一小时之内进行。演练之际运用最近备份文件,以此验证备份脚本是不是完整捕获了所有数据。
在恢复进程当中,需要对每一个步骤所耗费的时间进行记录,以此来对后续的操作流程予以优化。在2023年的时候,某一个政务网站开展演练,结果发现数据库备份文件出现了损坏的情况,随后及时对脚本做出调整,进而避免了大问题的发生。
rsync -avz /data/backup/ user@remote:/backup/php_site/
演练完毕之后,要去更新恢复文档,把新发现的问题以及解决方案补充进去。文档需要存放在离线设备之上,以此确保在主服务器出现故障的时候,依然能够获取到。
后续的下个季度,你是否会去安排一回备份恢复演练呢,可欢迎一起来分享你所拥有的相关其备份的经验呀。


还没有评论,来说两句吧...