快照仅备份面板环境不包含网站和数据库,远程备份只传文件不保存服务状态;可靠容灾需用同一脚本同步执行快照、mysqldump和网站增量打包并统一时间戳。

宝塔面板里“快照”和“远程备份”是两套完全不兼容的机制,混用会导致备份不可恢复——快照只存系统状态(含面板配置、PHP版本、Nginx模块),不包含网站文件和数据库;远程备份只传指定路径的文件,不保存服务运行时状态。真要快速容灾,必须分清楚:要恢复整个面板环境,用快照;只要保住网站和库,用远程备份。
快照不是文件备份,它救不了你的网站代码
宝塔的「快照」功能本质是 tar 打包 + rsync 差量归档,目标是还原面板自身运行环境。它会备份:/www/server/panel/、/www/server/php/、/www/server/nginx/ 等路径,但默认**跳过** /www/wwwroot/ 和 /www/backup/database/。这意味着你删了网站目录,恢复快照后还是空的。
- 快照恢复后必须手动重新绑定域名、重载 SSL(
bt 19)、重启 PHP 进程,否则网站打不开 - 快照不记录 MySQL 数据库内容,只备份配置(如
my.cnf),数据库数据得靠mysqldump单独处理 - 快照文件存在
/www/backup/panel/,不能直接下载到本地;想离线保存,得用 FTP 或 rsync 拉出来
远程备份只能传文件,别指望它同步数据库状态
宝塔「远程备份」页面里的 FTP/S3/COS 备份,实际调用的是 rsync 或 coscmd 等命令,仅对用户勾选的路径做文件级拷贝。它不会执行 FLUSH TABLES WITH READ LOCK,也不会停 MySQL,所以直接备份 /www/server/mysql/data/ 目录大概率导致数据库损坏。
- 只勾选「网站」备份 → 实际传输
/www/wwwroot/下所有子目录,不含隐藏文件(如.env),需手动加--include='.env'参数(改脚本才生效) - 只勾选「数据库」备份 → 宝塔会先用
mysqldump导出 SQL,再上传;但导出时不加--single-transaction,大表可能锁死 - FTP 备份失败常见报错:
530 Login authentication failed(密码含特殊字符未 URL 编码)、Connection timed out(服务器没开被动模式端口)
真正能快速恢复的组合:快照 + 数据库 SQL + 网站压缩包
单点故障下最快接管方式,是把三类东西分别存到不同位置,并确保可独立拉起:
- 每周一次全量快照 → 存本地
/www/backup/panel/,再用rsync -avz /www/backup/panel/ user@backup-server:/backup/panel/推到另一台机器 - 每日一次数据库 dump → 用定时任务跑:
mysqldump --defaults-extra-file=/www/server/panel/config/mysql.conf --single-transaction --routines --triggers db_name > /www/backup/database/db_name_$(date +\%Y\%m\%d).sql - 网站打包走增量 → 写脚本用
tar --newer-mtime='24 hours ago' -czf site_inc_$(date +\%s).tar.gz -C /www/wwwroot/ .,避免全量传几十 GB - 所有备份文件名强制带时间戳,OSS/FTP 上不覆盖,靠脚本自动清理 7 天前的旧包(
find /path -name 'site_*.tar.gz' -mtime +7 -delete)
最容易被忽略的是时间一致性:快照、数据库 dump、网站打包如果不在同一秒触发,恢复时就会出现“数据库有新订单,但网站代码还没部署”的状态错位。真要可靠,三个动作得塞进同一个 shell 脚本,用 date +\%s 统一打标,而不是靠宝塔界面上三个独立定时任务去拼。










