数据库
星月市集把商品、待寄清单、成交记录、出价、事件、玩家名单与操作记录都存在数据库里(寄出去的邮件存在星月邮箱自己的数据库)。设定在 config.yml 的 database,改了要重启服务器。
三种类型
type | 适合 | 说明 |
|---|---|---|
sqlite(默认) | 单服 | 数据存在 plugins/StarAuction/data.db(文件名由 file 决定),不用任何设定 |
mysql | 多个子服跨服 | 所有子服连同一个数据库就能跨服,见 跨服设置 |
mariadb | 同上 | 服务端有 MariaDB 驱动时使用 MariaDB 驱动,没有时自动用 MySQL 驱动 |
Paper / Purpur / Folia 本身就带有 SQLite 与 MySQL 驱动,不需要另外安装。服务端缺少驱动时,插件会在控制台说明缺少哪一个并停用自己。
database:
type: mysql
host: 127.0.0.1
port: 3306
database: starauction
username: root
password: ''
parameters: 'useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=utf8&serverTimezone=UTC'
table-prefix: 'sa_'
pool-size: 8
每个键的说明见 config.yml · 数据库。MySQL 的数据库要先建好(建议 utf8mb4),表格由插件自动建立。
连接池(HikariCP)
插件内置 HikariCP 连接池(已打包在 jar 里,不需要在运行时下载):
- MySQL / MariaDB:最多
pool-size条连接(最少 2);预编译语句快取、批量写入;每条连接 30 分钟回收、每 5 分钟保活,避免被 MySQL 的wait_timeout或代理的闲置上限断开;断线自动重连。表格使用 InnoDB 与utf8mb4。 - SQLite:WAL 模式、单一连接,所有操作依序执行。
- 所有数据库操作都在插件自己的背景线程执行,不会卡主线程。
表格
以默认前缀 sa_ 为例:
| 表格 | 内容 |
|---|---|
sa_listing | 商品:类型、状态、卖家、物品数据、数量、价格、货币、出价、一口价、保留价、手续费、税率、上架 / 到期 / 结束时间、子服 |
sa_stash | 待寄清单:要寄给玩家的每一笔物品或货币、来源、是否已通知、哪个子服正在寄(lease)、是否已寄出与对应的星月邮箱邮件编号(claimed、mail_id)。1.1.0 以前是领取箱,升级时自动加上新的栏位 |
sa_trade | 成交记录:时间、类型、卖家、买家、物品、数量、金额、税、货币、子服(交易记录、成交均价、/sa trades) |
sa_bid | 拍卖的出价记录(出价菜单的「最近出价」) |
sa_event | 事件表:跨服同步用,每次变动一行 |
sa_players | 上线过的玩家(名字 ↔ UUID),用来 /sa view、/sa remove、/sa log 离线玩家 |
sa_log | 操作记录(/sa log) |
sa_meta | 1.1.0 新增:这套市集的安装编号(寄信编号用,见 跨服设置) |
table-prefix 只能用字母、数字与下划线(最多 32 个字)。同一个数据库里想放好几套互不相通的市集时,才需要设不同的前缀。
自动清理
开服后不久执行一次,之后每 3 小时一次:
| 内容 | 保留多久 | 设定 |
|---|---|---|
| 事件表 | 10 分钟 | 固定 |
| 已寄出的待寄记录 | 30 天 | mail.keep-sent-days |
| 已结束的商品与它们的出价记录 | 30 天 | cleanup.finished-listing-days |
| 成交记录 | 365 天 | cleanup.trade-days(0 = 永久) |
| 操作记录 | 90 天 | cleanup.log-days(0 = 永久) |
上架中的商品与还没寄出的东西永远不会被清理。 寄出去的邮件由星月邮箱保管,按星月邮箱的规则清理(市集寄的邮件默认永不过期)。
备份与搬服
- SQLite:整个
plugins/StarAuction/资料夹。请在关服后复制;开服中复制时要连同data.db-wal、data.db-shm一起复制,否则可能缺少最近的交易。 - MySQL:备份数据库(例如
mysqldump starauction),以及每个子服的plugins/StarAuction/(设定、分类、菜单)。 token.yml的授权会绑定机器。换了机器后如果验证失败,控制台会写出原因与本机机器码,照提示到会员中心处理。
从 SQLite 换成 MySQL
不会自动搬移原本 data.db 里的数据。换之前请让玩家先下架商品,并确认待寄的东西都已经寄到星月邮箱(%starauction_stash_items%、%starauction_stash_money% 为 0)。