S-UI数据库备份和迁移到新服务器,命令不在菜单里

翻 S-UI 官方源码的时候发现一个容易被忽略的地方:它其实自带一个专门的数据库备份命令,功能完整,但没有放进 s-ui 那个交互式管理菜单里,光看菜单选项完全不会发现这东西存在,得直接敲命令行调用。

备份:直接敲命令,不在菜单里

在旧服务器上,SSH 进去直接执行:

1
/usr/local/s-ui/sui backup -output /root/s-ui-backup.db

会把当前的节点配置、用户信息这些数据导出成一个备份文件,存到指定路径。这个命令是通过程序自己的数据库连接读数据再导出的,不是直接复制正在使用中的文件,所以备份的时候不需要先停止面板服务,跑这条命令的时候面板照常运行不受影响。

如果不想把历史流量统计这类数据也一起备份进去,只保留节点和用户这些真正的配置,可以加上 -exclude 参数:

1
/usr/local/s-ui/sui backup -output /root/s-ui-backup.db -exclude changes,stats

changes 和 stats 对应的是变更记录和流量统计表,排除掉之后备份文件更小,内容也更纯粹。

迁移到新服务器:没有恢复命令,直接换文件

这里有个跟很多人预期不一样的地方:S-UI 没有单独的"恢复"命令,翻了一圈源码只有 backup,没有对应的 restore。实际迁移的做法是把备份文件直接当成数据库文件用:

  1. 新服务器先按S-UI面板搭建教程正常装好 S-UI,装完先别急着配置任何节点;
  2. 把旧服务器导出的备份文件传到新服务器:
1
scp /root/s-ui-backup.db root@新服务器IP:/root/
  1. 在新服务器上停掉面板服务,用备份文件覆盖掉默认的数据库文件,再重新启动:
1
2
3
systemctl stop s-ui
cp /root/s-ui-backup.db /usr/local/s-ui/db/s-ui.db
systemctl start s-ui

停止服务这一步不能省,数据库文件正在被占用的时候直接覆盖容易出问题,一定要先停服务再替换。

如果新旧服务器上 S-UI 的版本号不完全一致,不用太担心——程序自带数据库结构迁移的机制,启动的时候如果发现数据库版本跟当前程序版本对不上,会自动处理差异,不需要手动改数据库内容。当然还是建议两边尽量用同一个版本,能减少不必要的意外,升级和版本管理可以参考S-UI升级到新版本。

定期备份,别等出事才想起来

这个备份命令跑起来很轻量,值得写进 crontab 定期自动执行,比如每天备份一次到本地或者同步到别的地方存起来:

1
0 4 * * * /usr/local/s-ui/sui backup -output /root/s-ui-backup-$(date +\%Y\%m\%d).db -exclude changes,stats

配合定时清理超过一定天数的旧备份文件,就不用每次想起来才手动备份一次。忘记密码这类问题不需要靠数据库备份解决,直接看S-UI忘记密码怎么办更快;备份主要是应对换服务器、系统重装、或者误操作把配置搞乱了想恢复到之前状态这几种场景。