众多站长于备份网站之际,仅仅晓得去下载文件,然而待服务器崩溃之后,才发觉数据库未曾备份,致使网站根本无法恢复。PHP网站进行备份时,务必要将源码以及数据库当作一个整体予以处理,二者缺一不可。接下来的这套方法,乃是我于维护十几个服务器之时总结而成的实操经验,每一步均历经了实际故障的检验。
全量文件打包是基础
当登录到服务器之后,首先要做的事便是去确认网站根目录的所在位置。我于阿里云ECS上所维护的站点,其中绝大多数都处于/var/www/html这个路径,但若是使用宝塔面板的话,可能其位置会在/www/wwwroot之下放着。在2025年的时候,为一位客户去恢复数据期间,正是由于找错了目录,结果白白折腾了长达两小时之久。
打包命令给出的建议是采用tar并加上日期参数。我所习惯的做法是依次执行tar,然后输入“_”,再紧跟上“$(date +%Y%m%d)”字样,接着输入“.”,随后输入“tar.gz”,最后输入“/var/www/html/your_site”,像这样生成的存在于压缩包之中的东西直接带有日期,举例来说就是如“backup_20260320.tar.gz”这般,在去查找历史版本的时候能够一眼就看出来。
在压缩操作完成之后,一定要去检查那文件的大小。上个月的时候,有个新手在执行命令之际,遗漏了星号,最终打包出来了一个空目录,还好发现得足够及时。使用ls -lh去查看文件大小,再跟网站实际所占用的情况作对比,要是相差太多,那就得重新进行打包。
数据库必须单独导出
依赖PHP构建的网站所涉及的数据全部存储于数据库之中,若不针对此进行备份,这便等同于未曾有过备份之举。登录MySQL数据库管理系统,执行mysqldump -u root -p your_database > database_$(date +%Y%m%d).sql这条指令程序代码,在输入相应密码之后,即可生成SQL格式的文件。要记得运用--opt这一参数选项来优化导出数据时的速度,就像我备份一个容量为2GB之大的数据库,仅仅只需三分钟的时间便可完成。
导出的要跟上源码放置一处的 SQL 文件,在家目录下的 backup 子目录里依据日期创建文件夹,将当日的源码包以及数据库文件都投放到其中,去年双十一那段时期服务器出现故障停止运行,正是运用这种办法在半小时之内恢复了三个电商站点。
用于标识的文件名,希望能够清晰明确地表明其中是否包含数据库。我个人的习惯做法是,采用site_full_20260320.tar.gz这样的形式去表示携带数据库的情况,而使用site_code_only_20260320.tar.gz来表示仅含有源码的情形。如此一来,在进行恢复操作的时候,就不会出现混淆不清的状况,从而避免了因慌乱而导致的手忙脚乱。
Git实现版本控制备份
在代码出现频繁改动情形下,Git相较压缩包好用许多。于2024年年初之际,我着手在网站根目录开展git init操作,而后对所有文件予以添加并进行提交,git add.以及git commit - m"更新了支付接口"这两条命令,每日都需敲击达十几次之多。
关于远程仓库,建议选择私有性质的服务。我将代码推送至码云的私有仓库,设置为仅特定账号方可进行访问。上个月,服务器遭遇被黑情况,直接通过git clone拉取下来后便恢复运行,甚至连配置都无需重新进行设置。
对于分支管理而言同样切不可有所忽忘,我于master分支之中存储稳定版本,而将处于开发进程里的代码放置于develop分支之上,曾有一回在对新功能开展测试时致使网站出现崩溃状况,然而当切换回到master分支后便恢复至正常状态,甚至连备份文件都无需去翻找。
定时自动化脚本解放双手
进行手动备份之时总是容易遗忘,故而撰写一个脚本让机器能够自动运行才算是可靠妥当。我于 /usr/local/bin 创建了一个名为 backup.sh 的文件,其内容仅仅只有十几行,其中涵盖了进入目录、进行打包、导入数据库以及清理旧文件等操作。在使用 sh backup.sh 进行测试且通过之后便能够设定定时任务。
Cron表达式得写得精准无误,去执行crontab -e添加0 3 * /usr/local/bin/backup.sh,那表示的是每日凌晨3点进行执行,这个时间段的网站访问量是最为低的,我针对日志做过观察,执行一回大概需要五分钟,并不会对白天的业务造成影响。
增添保留策略是务必需要加上的,在脚本之中运用find以及Backup这个路径,并且限定文件类型为f,同时依据修改时间超过30天来进行删除操作,也就是删除30天前的备份,去年的时候,存在这样一个情况,有位客户的硬盘被备份文件全部塞满了,当把旧文件删除之后,马上就多出了200GB的空间。
加密存储确保数据安全
传输途中的备份文件,存在被截获的可能,加密成为了最后的防线,我借助gpg --symmetric --cipher-algo AES256 backup_20260320.tar.gz来生成加密文件,只需输入两次密码便可完成,这个密码必须牢牢记住,我将其存于1Password之中,倘若忘记,谁都无法解开。
选取可靠服务用于云端存储,我在阿里云OSS的特定Bucket上同步加密文件,将其设置为私有读写模式,2025年初遭遇机房火灾时,凭借云端备份成功恢复全部数据,即便物理服务器被烧尽也无妨。
对于物理介质备份而言是绝对不能省去的,在每个月刚开始的时候我都会朝着移动硬盘之中拷贝一份当月的备份内容,之后将其放置到银行的保险柜里面,去年勒索病毒出现爆发情况的时候,内网里所有的备份均被予以加密了,唯独这块处于离线状态的硬盘是没有问题纯净的,从而保住了长达半年时间的数据。
你现在的备份方案能扛住服务器完全损毁的情况吗?


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