Grasscutter服务器迁移步骤:从旧服务器到新服务器
Grasscutter服务器迁移步骤:从旧服务器到新服务器
【免费下载链接】Grasscutter A server software reimplementation for a certain anime game. 项目地址: https://gitcode.com/GitHub_Trending/gr/Grasscutter
1. 迁移前准备工作
1.1 环境检查清单
| 检查项 | 要求 | 验证方法 |
|---|---|---|
| Java版本 | JDK 17+ | java -version |
| 数据库兼容性 | MySQL 8.0+ 或 MariaDB 10.5+ | mysql --version |
| 端口可用性 | 443, 22102, 8080 | netstat -tuln |
| 磁盘空间 | 至少20GB可用 | df -h |
1.2 关键数据识别
Grasscutter服务器核心数据存储在以下路径:
Grasscutter/
├── config/ # 配置文件目录
│ ├── application.yml # 主配置文件
│ ├── database.yml # 数据库配置
│ └── game.properties # 游戏参数配置
├── data/ # 游戏数据目录
│ ├── BinOutput/ # 二进制资源文件
│ └── ExcelBinOutput/ # 表格数据文件
├── plugins/ # 已安装插件
└── userdata/ # 用户数据目录
├── accounts/ # 账号数据
└── players/ # 玩家存档
2. 旧服务器数据备份
2.1 文件系统备份
执行以下命令创建核心数据压缩包:
# 停止服务器进程
systemctl stop grasscutter
# 创建备份目录
mkdir -p /backup/grasscutter
# 压缩配置和数据文件
tar -czvf /backup/grasscutter/config_data.tar.gz
./config ./data ./plugins ./userdata
# 备份数据库
mysqldump -u root -p grasscutter > /backup/grasscutter/grasscutter_db.sql
2.2 备份验证
| 文件 | 预期大小 | 校验方法 |
|---|---|---|
| config_data.tar.gz | 500MB-2GB | md5sum /backup/grasscutter/config_data.tar.gz |
| grasscutter_db.sql | 10MB+ | grep "INSERT INTO" /backup/grasscutter/grasscutter_db.sql |
3. 新服务器环境部署
3.1 基础环境搭建
# 更新系统
apt update && apt upgrade -y
# 安装依赖
apt install -y openjdk-17-jdk mysql-server unzip
# 配置MySQL
systemctl enable mysql && systemctl start mysql
mysql_secure_installation
3.2 数据库迁移
# 在新服务器创建数据库
mysql -u root -p -e "CREATE DATABASE grasscutter CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 导入数据库备份
mysql -u root -p grasscutter < /backup/grasscutter/grasscutter_db.sql
# 验证数据完整性
mysql -u root -p -e "SELECT COUNT(*) FROM grasscutter.accounts;"
4. 核心数据迁移
4.1 文件传输方案
使用SCP传输备份文件(推荐):
# 从旧服务器传输到新服务器
scp /backup/grasscutter/config_data.tar.gz user@new_server_ip:/tmp/
# 在新服务器解压
tar -xzvf /tmp/config_data.tar.gz -C /path/to/Grasscutter/
4.2 配置文件适配
修改新服务器配置文件以适应新环境:
# application.yml 关键修改项
server:
port: 443
address: 0.0.0.0
game:
server:
ip: 新服务器IP地址
name: "迁移后的服务器"
database:
address: localhost
port: 3306
username: 新数据库用户名
password: 新数据库密码
5. 服务部署与验证
5.1 服务启动流程
# 赋予执行权限
chmod +x ./gradlew
# 构建项目
./gradlew jar
# 启动服务器(首次启动)
java -jar grasscutter.jar -boot
5.2 功能验证清单
| 验证项 | 测试方法 | 预期结果 |
|---|---|---|
| 账号登录 | 使用原账号密码登录 | 成功进入游戏 |
| 角色数据 | 检查角色等级、装备、背包 | 与旧服务器一致 |
| 场景加载 | 传送至不同地图区域 | 无资源缺失提示 |
| 插件功能 | 执行插件命令 | 命令正常响应 |
| 多人联机 | 邀请其他玩家进入世界 | 联机功能正常 |
6. 迁移后优化
6.1 性能调优建议
# application.yml 性能优化配置
jvm:
xms: 2G # 初始堆内存
xmx: 4G # 最大堆内存
gc: G1 # 使用G1垃圾收集器
server:
worker_threads: 8 # 工作线程数(建议为CPU核心数*2)
6.2 数据安全加固
# 设置文件权限
chmod 600 ./config/*.yml
chmod 700 ./userdata
# 创建定期备份脚本
cat > backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/backup/grasscutter/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
tar -czvf $BACKUP_DIR/data.tar.gz ./config ./userdata ./plugins
mysqldump -u root -p grasscutter > $BACKUP_DIR/db.sql
EOF
chmod +x backup.sh
7. 故障排除指南
7.1 常见迁移问题解决
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| 数据库连接失败 | 账号权限不足 | GRANT ALL ON grasscutter.* TO 'user'@'localhost'; |
| 资源加载失败 | 数据文件不完整 | 重新传输BinOutput目录 |
| 端口冲突 | 其他服务占用端口 | kill -9 $(lsof -t -i:443) |
| 插件失效 | 插件版本不兼容 | 更新插件至最新版本 |
7.2 回滚方案
如迁移失败需要回滚:
# 停止新服务器
systemctl stop grasscutter
# 恢复旧服务器
systemctl start grasscutter-old
# 通知玩家
echo "服务器迁移临时维护,旧服务器已恢复" > /var/www/html/status.html
8. 迁移后维护计划
8.1 日常维护清单
- 每日自动备份(配置crontab任务)
- 每周检查日志文件(./logs/grasscutter.log)
- 每月更新游戏数据文件
- 每季度进行一次完整服务器迁移演练
8.2 监控指标设置
| 监控项 | 阈值 | 告警方式 |
|---|---|---|
| CPU使用率 | >80%持续5分钟 | 邮件通知 |
| 内存使用率 | >85% | 消息通知 |
| 数据库连接数 | >100 | 控制台提醒 |
| 玩家在线峰值 | >服务器承载上限 | 自动扩容准备 |
9. 迁移总结与最佳实践
9.1 迁移流程回顾
9.2 经验教训分享
- 数据备份优先级:数据库备份应优先于文件备份,使用
--single-transaction参数确保一致性 - 配置文件版本控制:建议使用Git管理配置文件变更,便于回滚
- 灰度迁移策略:可先迁移部分测试账号验证流程,再进行全量迁移
- 玩家通知机制:迁移前72小时、24小时、1小时分别发送通知
附录:迁移工具脚本
自动备份脚本
#!/bin/bash
# 自动备份脚本 backup.sh
set -e
# 配置参数
GRASSCUTTER_DIR="/opt/grasscutter"
BACKUP_DIR="/backup/grasscutter"
DB_USER="root"
DB_PASS="your_password"
DB_NAME="grasscutter"
# 创建备份目录
DATE=$(date +%Y%m%d_%H%M%S)
CURRENT_BACKUP_DIR="$BACKUP_DIR/$DATE"
mkdir -p "$CURRENT_BACKUP_DIR"
# 备份文件数据
echo "开始备份文件数据..."
tar -czvf "$CURRENT_BACKUP_DIR/files.tar.gz"
"$GRASSCUTTER_DIR/config"
"$GRASSCUTTER_DIR/userdata"
"$GRASSCUTTER_DIR/plugins"
# 备份数据库
echo "开始备份数据库..."
mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$CURRENT_BACKUP_DIR/db.sql"
# 保留最近30天备份
echo "清理旧备份..."
find "$BACKUP_DIR" -type d -mtime +30 -exec rm -rf {} ;
echo "备份完成: $CURRENT_BACKUP_DIR"
服务器状态检查脚本
#!/bin/bash
# 服务器状态检查脚本 status.sh
set -e
# 检查Java进程
if pgrep -x "java" > /dev/null; then
echo "服务器进程: 运行中"
else
echo "服务器进程: 已停止"
exit 1
fi
# 检查数据库连接
if mysql -u root -p -e "SELECT 1" > /dev/null 2>&1; then
echo "数据库连接: 正常"
else
echo "数据库连接: 失败"
exit 1
fi
# 检查端口监听
PORTS=("443" "22102" "8080")
for port in "${PORTS[@]}"; do
if netstat -tuln | grep -q ":$port"; then
echo "端口 $port: 已监听"
else
echo "端口 $port: 未监听"
exit 1
fi
done
echo "服务器状态: 正常"
重要提示:服务器迁移建议在低峰期进行,预计总 downtime 约为2-4小时。迁移前请确保所有玩家已收到通知,迁移后建议进行24小时监控,确保服务稳定运行。
点赞收藏本文,关注获取更多Grasscutter服务器管理技巧!下期预告:《Grasscutter服务器集群部署方案》
【免费下载链接】Grasscutter A server software reimplementation for a certain anime game. 项目地址: https://gitcode.com/GitHub_Trending/gr/Grasscutter









