海洋CMS数据库备份与恢复怎么做?防止数据丢失
学完这篇,你能给海洋CMS(SeaCMS)做出一份真正能用来救命的数据库备份,并在数据被误删、服务器迁移或整站崩溃后,按步骤把数据完整恢复回来。
第一步:先把数据库连接信息抄下来
这一步的目的是拿到数据库名、用户名、密码、主机地址和表前缀,后面无论是后台备份还是命令行备份都要用到。这些信息不写在后台界面上,而是存在网站根目录下的配置文件里。
用 FTP 或宝塔面板的「文件」功能打开网站根目录,找到 /data/common.inc.php,用编辑器打开(宝塔面板右键 → 编辑),你会看到类似这几行:
$cfg_dbhost = 'localhost';
$cfg_dbname = 'seacms';
$cfg_dbuser = 'seacms';
$cfg_dbpwd = '你的数据库密码';
$cfg_dbprefix = 'sea_';
把这五项抄到记事本里。海洋CMS 的表前缀常见是 sea_,也有站是 seacms_,以文件里 $cfg_dbprefix 的实际值为准——恢复时前缀对不上,网站会直接白屏。
注意:
common.inc.php里含明文密码,别把这个文件截图发到群里或贴到论坛求助。
第二步:用后台自带功能备份(最省事)
登录海洋CMS后台,默认地址是 http://你的域名/admin/ 或 http://你的域名/admin.php,用管理员账号登录。
进后台后看左侧菜单。v10 及以上版本一般是「系统」→「数据库管理」,页面上有「备份数据库」「恢复数据库」「优化数据库」几个选项卡,点「备份数据库」。v6.x 等旧版本可能叫「工具」→「数据库备份」。如果找不到,在菜单区域按 Ctrl+F 搜「备份」两个字,直接定位。
进入备份页面后:
- 表列表默认全选,不要取消,除非你明确知道某张表不用备份;
- 分卷大小填
2048(单位 KB,2MB 一个分卷),数据库大的话不要填太大,容易超时; - 点「开始备份」按钮,等页面跑完。
结果是备份文件生成在 /data/backup/ 目录下(个别版本是 /admin/backup/,以后台页面提示的路径为准),文件名类似 20240601_xxxx.sql。
备份完立刻做一件事:用 FTP 或宝塔「文件」把整个 backup 目录下载到你自己电脑上。备份只存在服务器上,等于没备份——服务器硬盘坏了、被重装了,备份跟着一起没。
注意:部分版本的备份文件带
.php后缀,直接浏览器访问 URL 可能被下载或被执行,属于信息泄露风险,下载完请把服务器上的备份文件删掉。
第三步:用 mysqldump 做一份更可靠的备份
后台备份受 PHP 执行时间限制,几十万条数据的站容易中途失败。如果你有服务器 SSH 权限或宝塔面板的「终端」,优先用 mysqldump。
SSH 登录服务器后执行:
mkdir -p /www/backup
mysqldump -h127.0.0.1 -u seacms -p'你的密码' \
--default-character-set=utf8mb4 \
--single-transaction \
seacms > /www/backup/seacms_$(date +%F).sql
参数说明:-h127.0.0.1 是数据库主机;--default-character-set=utf8mb4 指定编码,写错会导致中文变乱码;--single-transaction 让 InnoDB 表在不锁表的情况下导出一致性快照,适合线上站。
执行完检查文件大小:
ls -lh /www/backup/
正常应该是一个几十 MB 到几百 MB 的文件,如果只有几 KB,说明密码错了或库名不对,命令会报错,别忽略。
如果你用的是宝塔面板,更简单:面板首页 →「数据库」→ 找到对应数据库 → 点右侧「备份」按钮。备份文件在 /www/server/panel/backup/database/,可以在面板「文件」里下载。
注意:宝塔面板备份和网站备份是两回事,面板的「网站备份」只备份网站文件(图片、模板、附件),不含数据库。数据库必须单独备。
第四步:恢复数据
场景一:后台还在,只是数据被误删。 登录后台 →「数据库管理」→「恢复数据库」→ 勾选你要恢复的备份文件 → 点「恢复」。如果当初是分卷备份的,多个分卷要按编号顺序依次恢复,别跳着来。恢复过程中不要刷新页面、不要关浏览器。
场景二:后台都进不去了。 用命令行恢复,先把备份文件传到服务器(宝塔「文件」上传即可),然后:
mysql -h127.0.0.1 -u seacms -p'你的密码' \
--default-character-set=utf8mb4 \
seacms < /www/backup/seacms_2024-06-01.sql
如果数据库已经被删了,先建空库再导:
mysql -uroot -p -e "CREATE DATABASE seacms DEFAULT CHARACTER SET utf8mb4;"
场景三:只有 phpMyAdmin。 登录 phpMyAdmin → 左侧点选你的数据库 → 顶部「导入」→「选择文件」→ 选中 .sql 文件 → 编码选 utf8 → 点「执行」。文件超过 2MB 可能被 PHP 的 upload_max_filesize 拦住,这时要么调大限制,要么用命令行。
恢复完成后立刻检查三件事:打开网站首页看是否正常、进后台看文章列表数量对不对、打开一篇文章详情页看中文有没有乱码。中文乱码基本就是恢复时编码没用 utf8mb4。
注意:执行恢复前,先对当前数据库再做一次备份(哪怕它已经坏了)。万一恢复的文件选错,你还有退路。恢复会覆盖同名表,是不可逆操作。
第五步:设置自动定时备份
手动备份迟早会忘,用宝塔面板的「计划任务」自动做。
面板左侧「计划任务」→「添加任务」:
- 任务类型:备份数据库
- 任务名称:海洋CMS每日备份
- 执行周期:每天 03:00(选凌晨,避开访问高峰)
- 备份到:选择「阿里云 OSS」「腾讯云 COS」或「七牛」,没有对象存储就选「服务器磁盘」
- 保留份数:7
保存后点「执行」测试一次,确认 /www/server/panel/backup/database/ 下有新文件生成。
如果不用宝塔,用 crontab:
crontab -e
加入一行:
0 3 * * * mysqldump -h127.0.0.1 -useacms -p'密码' --default-character-set=utf8mb4 --single-transaction seacms > /www/backup/seacms_$(date +\%F).sql && find /www/backup -name "seacms_*.sql" -mtime +7 -delete
这行的意思是每天凌晨 3 点备份一次,并自动删除 7 天前的旧备份,避免磁盘被撑满。
注意:crontab 里
%需要写成\%,否则会被当成换行符导致任务失效。这是最常见的 cron 踩坑点。
第六步:堵住备份文件泄露和恢复失败的口子
备份文件里有全站数据,包括管理员账号的密码哈希,被下载等于全站沦陷。在 Nginx 站点配置里加一段:
location ^~ /data/backup/ {
deny all;
}
改完执行 nginx -t 测试配置,再 nginx -s reload 重载。宝塔面板可以在「网站」→ 对应站点 →「配置文件」里直接改。
另外恢复失败最常见的原因是这三个:备份文件是半个(备份时中断了,重新备一份)、表前缀对不上(改 common.inc.php 里的 $cfg_dbprefix)、数据库版本不兼容(老备份里是 utf8,新库是 utf8mb4 一般没问题,反过来可能报错)。
小结
- 数据库信息在
/data/common.inc.php,重点记库名、用户名、密码、表前缀; - 后台备份入口:v10+ 是「系统」→「数据库管理」→「备份数据库」,旧版在「工具」菜单;
- 后台备份文件在
/data/backup/,备完必须下载到本地,别只留服务器; - 数据量大就用
mysqldump --single-transaction --default-character-set=utf8mb4,比后台备份可靠; - 恢复前先备份现状,恢复后检查首页、文章数和中文编码;
- 用宝塔计划任务或 crontab 做每日自动备份,保留 7 天并异地存一份;
- 给
/data/backup/加deny all,防止备份被直接下载。
原文链接:https://www.gj0.com/thread-41.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。