找回密码
 registerss
搜索

[文档笔记] 一机多区注意事项

[复制链接]
Waylee 发表于 2026-10-16 13:59 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?registerss

×

本教程用于在同一台 Ubuntu 服务器上新增二区:一区目录为 /home/tlbb,二区目录为 /home/tlbb2。两区分别使用独立的数据库、端口和共享内存。

当前服务器的二区数据库已经创建、导入并授权完成,不需要重复执行创建和导入命令。以下步骤供新环境部署参考。

  1. 准备二区程序,并修改启动、停止脚本。

    将二区的可执行文件按下面的名称对应修改,同时更新 /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;目录不存在时停止写入文件日志,不转存临时目录,服务继续运行。

  2. 修改二区数据库配置。

    配置文件都位于 /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
  3. 分配二区独立端口。

    不只修改 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;如使用端口映射,映射规则也应对应二区端口。

  4. 分离两区共享内存。

    程序名改为 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

    以上字段名沿用当前工程原名。此配置对应当前单游戏服务布局;一区共享内存配置保持不变。

  5. 上传配套 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 替换为实际地址。

  6. 创建、导入并授权二区数据库。

    仅在二区数据库尚未创建的新环境执行。 命令会先检查 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,最后两项查询应分别返回:

    数据库 版本
    tlbbdb2 22
    web2 3

    % 表示允许远程来源使用该账号连接;已有的 localhost 和 127.0.0.1 账号仍需分别授权。这里仅授予二区两个库的权限,不授予整个数据库服务器的权限,也不需要执行 FLUSH PRIVILEGES。

    如果导入中途失败,命令会停止,但不会自动删除已经创建的数据库或已导入的数据。应先查看报错,不能直接把检查改成“忽略已存在”后重复导入。

  7. 检查配置后,再启动二区。

    先检查脚本语法:

    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

 楼主| Waylee 发表于 2026-10-16 16:25 | 显示全部楼层 | Google Chrome | Windows 10

单独授权方法:

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'@'%';
SQL
您需要登录后才可以回帖 登录 | registerss

本版积分规则

QQ|手机版|雪舞知识库 ( 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 )

GMT+8, 2026-10-22 15:06 , Processed in 0.027684 second(s), 26 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表