在 CentOS 7 下使用宝塔面板时,如果 MySQL 或 Nginx 崩溃(例如服务无法启动、系统异常),但服务器还能访问或能进入系统,你可以通过以下方法进行关键数据的备份,防止数据丢失。
一、优先确认当前系统状态
- 能否登录服务器?
- 使用 SSH 登录(如
ssh root@your_ip) - 如果能登录,说明系统还在运行,可以手动操作。
- 使用 SSH 登录(如
- 磁盘是否可读?
- 检查
/,/www等分区是否挂载正常。 - 执行:
df -h查看磁盘使用情况。
- 检查
二、MySQL 数据备份(即使服务崩溃)
即使 MySQL 服务无法启动,数据文件本身通常仍然存在,可以从原始文件备份。
方法 1:直接复制 MySQL 数据目录(最可靠)
-
找到 MySQL 数据目录位置
默认路径通常是:
/www/server/data/或
/var/lib/mysql/可以通过宝塔面板查看:
【数据库】→【MySQL配置】→ 搜索datadir。 -
打包并压缩数据目录
tar -zcvf mysql_data_backup.tar.gz /www/server/data/注意:不要只复制单个数据库文件夹,要包含
ibdata1,ib_logfile*,mysql/,performance_schema/等系统文件。 -
导出为 SQL 文件(如果 MySQL 能短暂启动)
mysqldump -u root -p --all-databases > all_databases.sql若忘记密码,可通过跳过权限方式重置后导出(见下文附录)。
-
拷贝备份文件到安全位置
使用
scp或上传到云存储:scp mysql_data_backup.tar.gz user@backup-server:/backup/
三、Nginx 配置和网站文件备份
1. 网站根目录(重要!)
默认路径:
/www/wwwroot/
备份所有网站文件:
tar -zcvf website_files.tar.gz /www/wwwroot/
2. Nginx 配置文件
- 主配置文件:
/www/server/nginx/conf/nginx.conf - 虚拟主机配置:
/www/server/panel/vhost/nginx/
备份命令:
tar -zcvf nginx_config_backup.tar.gz /www/server/panel/vhost/nginx/ /www/server/nginx/conf/nginx.conf
3. SSL 证书(如有)
证书通常也在:
/www/server/panel/vhost/ssl/
四、其他重要数据备份
| 数据类型 | 路径 |
|---|---|
| 宝塔面板数据库 | /www/server/panel/data/default.db(SQLite) |
| 用户账户信息 | /www/server/panel/data/userInfo.json |
| 计划任务脚本 | /www/server/cron/ |
| FTP 用户数据 | /www/server/pure-ftpd/etc/ |
建议一并打包:
tar -zcvf baota_critical_data.tar.gz
/www/server/panel/data/default.db
/www/server/panel/data/userInfo.json
/www/server/cron/
/www/server/pure-ftpd/etc/
五、将备份传出服务器(关键步骤)
方式 1:使用 SCP(推荐)
从本地机器执行:
scp root@your_server_ip:/root/mysql_data_backup.tar.gz ./backup/
方式 2:上传到对象存储(如阿里云 OSS、腾讯云 COS)
安装 ossutil 或 coscli 工具上传。
方式 3:挂载远程 NFS/Samba
临时挂载网络存储,拷贝过去。
六、特殊情况处理
❗ MySQL 无法启动,但想导出数据?
尝试启动 MySQL:
systemctl start mysqld
若失败,检查日志:
tail -f /www/server/data/*.err
常见问题:
ib_logfile大小不匹配 → 删除ib_logfile0,ib_logfile1(谨慎!需先备份)- 权限问题 →
chown -R mysql:mysql /www/server/data/
❗ 忘记 MySQL 密码?
- 编辑
/etc/my.cnf,在[mysqld]下添加:skip-grant-tables - 重启 MySQL
- 直接登录:
mysql -u root - 修改密码:
UPDATE mysql.user SET authentication_string=PASSWORD('new_password') WHERE user='root'; FLUSH PRIVILEGES; - 删除
skip-grant-tables并重启。
七、总结:紧急备份清单
| 项目 | 是否必须 | 路径 |
|---|---|---|
| MySQL 数据文件 | ✅ 极重要 | /www/server/data/ |
| 网站文件 | ✅ 极重要 | /www/wwwroot/ |
| Nginx 配置 | ✅ 重要 | /www/server/panel/vhost/nginx/ |
| SSL 证书 | ✅ 重要 | /www/server/panel/vhost/ssl/ |
| 宝塔数据库 | ⚠️ 可选 | /www/server/panel/data/default.db |
| FTP 账号 | ⚠️ 如有需要 | /www/server/pure-ftpd/etc/ |
✅ 最佳实践建议:
- 平时启用宝塔自动备份(数据库、网站每日备份到云)。
- 使用
rsync+ 定时任务同步到异地。 - 关键数据定期导出并下载到本地。
如果你目前服务器已无法启动,但硬盘可挂载(如用 Live CD 或云平台挂载磁盘),也可以挂载 /www 分区后复制上述文件。
如有具体错误信息(如 MySQL 启动报错),欢迎提供日志内容,我可以进一步帮你分析恢复方案。
PHPWP博客