-
准备二区程序,并修改启动、停止脚本。
将二区的可执行文件按下面的名称对应修改,同时更新 /home/tlbb2/run.sh、/home/tlbb2/stop.sh 和 /home/tlbb2/Server/shm 中的程序引用:
| 原程序名 |
二区程序名 |
| Server |
Server2 |
| Login |
Login2 |
| World |
World2 |
| Billing |
Billing2 |
| ShareMemory |
ShareMemory2 |
| smtool |
smtool2 |
脚本中的进程检查、PID 文件名、启动命令和停止命令必须对应一致。例如,二区共享内存进程使用 ShareMemory2,PID 文件使用 ShareMemory2.pid。
只修改对应程序名,不要把所有 Server、Login 等文字全局替换。 Server 目录名、配置文件名,以及程序识别的 exit.cmd、quitserver.cmd 保持原名。
给脚本和程序设置执行权限:
chmod +x /home/tlbb2/run.sh /home/tlbb2/stop.sh \
/home/tlbb2/Server/shm \
/home/tlbb2/Server/Server2 \
/home/tlbb2/Server/Login2 \
/home/tlbb2/Server/World2 \
/home/tlbb2/Server/Billing2 \
/home/tlbb2/Server/ShareMemory2 \
/home/tlbb2/Server/smtool2
当前优化后的 run.sh 不再生成 *.bootstrap.log。后台程序输出使用:
nohup "${executable}" "$@" >/dev/null 2>&1 </dev/null &
游戏自身的分类日志仍由程序写入 Server/Log。run.sh 和 shm 不自动创建 Log;目录不存在时停止写入文件日志,不转存临时目录,服务继续运行。
-
修改二区数据库配置。
配置文件都位于 /home/tlbb2/Server/Config/,修改各文件现有的 DBName,不要重复添加同名配置项:
| 配置文件 |
二区数据库 |
| LoginInfo.ini |
DBName=tlbbdb2 |
| ShareMemInfo.ini |
DBName=tlbbdb2 |
| BillingInfo.ini |
DBName=web2 |
Billing 使用账号库 web2,不能填写 tlbbdb2。
三个文件的数据库连接地址、账号及密码应与实际数据库一致。例如:
DBIP=127.0.0.1
DBPort=3306
DBUser=tlbbdb
DBPassword=数据库账号当前密码
上面的密码是占位说明,需要替换为实际密码。
在 /etc/odbc.ini 中保留一区已有配置,新增二区的数据源。以下示例适用于已安装 MariaDB Unicode 驱动的当前环境:
[tlbbdb2]
Driver = MariaDB Unicode
SERVER = 127.0.0.1
PORT = 3306
USER = tlbbdb
PASSWORD = 数据库账号当前密码
DATABASE = tlbbdb2
CHARSET = utf8mb4
[web2]
Driver = MariaDB Unicode
SERVER = 127.0.0.1
PORT = 3306
USER = tlbbdb
PASSWORD = 数据库账号当前密码
DATABASE = web2
CHARSET = utf8mb4
-
分配二区独立端口。
不只修改 World 端口,其他发生冲突的监听端口也要一起调整。 当前两区采用以下配置:
| 用途 |
配置位置 |
一区 |
二区 |
| World |
[World] Port |
777 |
778 |
| Billing |
[Billing] Port0~Port4 |
10101 |
10102 |
| 游戏服务对外端口 |
[Server0] Port0 |
14401 |
24401 |
| 游戏服务内部端口 |
[Server0] Port1 |
8880 |
9880 |
| Login 对外端口 |
[Server1] Port0 |
14400 |
24400 |
| Login 内部端口 |
[Server1] Port1 |
8882 |
9882 |
修改 /home/tlbb2/Server/Config/ServerInfo.ini 中对应字段,其他配置保持原样:
[World]
IP=0.0.0.0
Port=778
[Billing]
Port0=10102
Port1=10102
Port2=10102
Port3=10102
Port4=10102
[Server0]
Port0=24401
Port1=9880
[Server1]
Port0=24400
Port1=9882
这些是需要修改的字段,不要用上述片段覆盖整个配置文件。
同步修改二区 run.sh 中的端口占用检查和启动等待端口。客户端二区登录入口使用 24400;如使用端口映射,映射规则也应对应二区端口。
-
分离两区共享内存。
程序名改为 ShareMemory2 并不会自动隔离共享内存,配置中的 Key 也必须独立。
修改二区 ShareMemInfo.ini:
[ShareMem]
KeyCount=11
Key0=1002
Key1=2002
Key2=3002
Key3=4002
Key4=5002
Key5=6002
Key6=7002
Key7=8002
Key8=9002
Key9=10002
Key10=11002
同步修改二区 WorldInfo.ini 中的对应引用:
[System]
GuildSMKey=2002
MailSMKey=3002
PetSMKey=8002
CitySMKey=9002
GlobalDataSMKey=5002
LeagueSMKey=10002
FindFriendADKey=11002
修改二区 ServerInfo.ini 的 [Server0] 中对应引用:
[Server0]
HumanSMKey=1002
PlayShopSMKey=4002
ItemSerialKey=7002
CommisionShopKey=6002
以上字段名沿用当前工程原名。此配置对应当前单游戏服务布局;一区共享内存配置保持不变。
-
上传配套 SQL 文件。
以下数据库命令适用于:MariaDB 已安装、tlbbdb 数据库账号已存在,且 Ubuntu 的系统 root 可以通过本机 socket 管理 MariaDB。
在 Windows PowerShell 执行:
scp "H:\TLBB\Temp_Release_v0-85-9602\环境_v0-85-9602_Ubuntu\web.sql" "H:\TLBB\Temp_Release_v0-85-9602\环境_v0-85-9602_Ubuntu\tlbbdb.sql" root@183.141.44.112:/home/tlbb2/
登录 Ubuntu:
ssh root@183.141.44.112
部署到其他服务器时,将命令中的 IP 替换为实际地址。
-
创建、导入并授权二区数据库。
仅在二区数据库尚未创建的新环境执行。 命令会先检查 SQL 文件、数据库是否存在以及账号是否齐全;任意一项不符合条件就停止。
在 Ubuntu 执行:
(
set -euo pipefail
# 检查配套 SQL 文件
test -s /home/tlbb2/web.sql || {
echo "缺少 SQL 文件或文件为空:/home/tlbb2/web.sql"
exit 1
}
test -s /home/tlbb2/tlbbdb.sql || {
echo "缺少 SQL 文件或文件为空:/home/tlbb2/tlbbdb.sql"
exit 1
}
# 任意一个二区数据库已经存在,都停止,避免重复导入
existing=$(mariadb --protocol=socket -uroot --batch --skip-column-names \
--execute="SELECT COUNT(*) FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME IN ('web2', 'tlbbdb2');")
if [ "$existing" != "0" ]; then
echo "web2 或 tlbbdb2 已存在,停止创建和导入。"
exit 1
fi
# 本教程复用现有账号,不创建账号、不修改密码
accounts=$(mariadb --protocol=socket -uroot --batch --skip-column-names \
--execute="SELECT COUNT(*) FROM mysql.user
WHERE User='tlbbdb'
AND Host IN ('localhost', '127.0.0.1', '%');")
if [ "$accounts" != "3" ]; then
echo "tlbbdb 的本机或远程账号尚未配置齐全,请先完成账号配置。"
exit 1
fi
# 创建二区账号库和游戏库
mariadb --protocol=socket -uroot <<'SQL'
CREATE DATABASE web2 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE DATABASE tlbbdb2 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
SQL
# 导入本版本配套 SQL
mariadb --protocol=socket -uroot --default-character-set=utf8mb4 \
--database=web2 < /home/tlbb2/web.sql
mariadb --protocol=socket -uroot --default-character-set=utf8mb4 \
--database=tlbbdb2 < /home/tlbb2/tlbbdb.sql
# 授权本机和远程连接;不修改账号密码
mariadb --protocol=socket -uroot <<'SQL'
GRANT ALL PRIVILEGES ON web2.* TO
'tlbbdb'@'localhost',
'tlbbdb'@'127.0.0.1',
'tlbbdb'@'%';
GRANT ALL PRIVILEGES ON tlbbdb2.* TO
'tlbbdb'@'localhost',
'tlbbdb'@'127.0.0.1',
'tlbbdb'@'%';
SELECT version AS game_schema_version
FROM tlbbdb2.t_schema_version;
SELECT MAX(version) AS billing_schema_version
FROM web2.billing_schema_version;
SQL
echo "二区数据库创建、导入及授权完成。"
)
本教程对应的配套 SQL,最后两项查询应分别返回:
% 表示允许远程来源使用该账号连接;已有的 localhost 和 127.0.0.1 账号仍需分别授权。这里仅授予二区两个库的权限,不授予整个数据库服务器的权限,也不需要执行 FLUSH PRIVILEGES。
如果导入中途失败,命令会停止,但不会自动删除已经创建的数据库或已导入的数据。应先查看报错,不能直接把检查改成“忽略已存在”后重复导入。
-
检查配置后,再启动二区。
先检查脚本语法:
bash -n /home/tlbb2/run.sh
bash -n /home/tlbb2/stop.sh
bash -n /home/tlbb2/Server/shm
数据库工具重新连接后,tlbbdb 账号应能看到 tlbbdb、web、tlbbdb2、web2 四个库,前提是公网连接或 SSH 隧道本身已正常配置。
上面的数据库命令不会启动游戏服务。 确认程序、数据库、端口和共享内存配置全部对应后,再手动启动二区:
cd /home/tlbb2
./run.sh
需要正常停服时执行:
cd /home/tlbb2
./stop.sh