SQLite 与 MySQL
选择数据库#
| 类型 | 适用场景 |
|---|---|
| SQLite | 单服、无需外部数据库、维护成本低 |
| MySQL | 多台子服共享熔炉,或需要使用现有的 MySQL 备份体系 |
默认使用 SQLite,文件为 plugins/KaFurnace/furnaces.db。
准备 MySQL#
先在 MySQL 中创建数据库和专用账号:
CREATE DATABASE kafurnace CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'kafurnace'@'%' IDENTIFIED BY 'replace-with-a-strong-password';
GRANT ALL PRIVILEGES ON kafurnace.* TO 'kafurnace'@'%';
FLUSH PRIVILEGES;
然后填写 config.yml 中的 MySQL 连接信息,将 database.type 改为 mysql,最后完整重启服务器。插件会自动创建所需数据表。多服使用还需在每台子服设置 cross-server.enabled: true。
远程生产库应使用默认的 sslMode=VERIFY_IDENTITY 并提供受信任证书。只有同机、隔离的临时测试库可以把参数改为 sslMode=DISABLED。默认连接与读取超时较短,数据库故障时关键玩家操作仍可能等待数秒,因此必须在目标网络延迟下测试。
多服共用 MySQL 时,每台子服必须启用 cross-server.enabled。玩家切服时,新服会等待旧服保存完毕再加载数据;未启用时不要让多个 KaFurnace 实例同时连接同一个库,否则可能覆盖玩家数据。配置示例见跨服同步。
什么时候会保存数据?#
放入、取出物品及购买升级等重要操作会等待数据库确认。若保存失败,操作会取消并恢复原状态;MySQL 故障或连接延迟可能让这次点击等待数秒。因此请使用连接稳定、延迟较低的数据库。
购买时若已经扣款,但数据库保存失败,插件会尝试退款。退款也失败时,请管理员根据控制台 SEVERE 日志人工核对。
熔炼进度会在后台定期保存,完成熔炼和消耗燃料也会触发保存。
关闭熔炉界面或退出服务器时,也会提交最新数据;跨服切换会等旧服保存后再由新服加载。正常关服会等待保存完成,强制结束进程仍可能丢失尚未保存的后台进度。checkpoint-seconds 默认为 30,表示定期保存间隔,不代表保证零数据丢失。
首次使用某种数据库时,插件会下载并校验对应驱动;下载失败或文件不匹配时,请检查控制台错误。
切换数据库#
切换类型不会自动搬迁数据。应先确保所有玩家取空虚拟物品,再停服、备份旧数据库、修改配置并启动新后端。
KaFurnace 不会自动将旧数据库里的熔炉或物品搬到新数据库。切换前应备份并规划人工迁移,否则新数据库中的玩家熔炉会看起来是空的。
备份#
SQLite 应在服务器停止后备份 furnaces.db。MySQL 使用现有的定时备份或 mysqldump 流程。数据库中包含玩家物品,不应只依赖世界备份。