跳到主要内容

MySQL 5.1.73 一键部署中文游戏库环境

Zebra 游戏服务器数据库环境的一键搭建方案,支持 Debian 与 RedHat 系主流发行版。 脚本基于源码编译安装(非二进制分发),确保字符集、ABI、运行时 locale 与业务环境完全一致。 在还原安装文档的基础上,针对实测发现的问题做了多项修正,开箱即用。

支持的发行版

系列部署脚本支持版本
Debiandebian_12/deploy_mysql.sh12
RedHat / CentOS / Rocky / AlmaLinuxredhat/deploy_mysql.sh6、7、8、9

⚠️ CentOS Stream 不支持。RedHat 系脚本会自动检测系统版本,按版本号独立选择 yum 源、编译参数与 locale 生成方式,各版本分支互不复用。CentOS 6/7 已 EOL,会自动切换到 NJU centos-vault 归档源。

各版本差异速览

版本gccCXXFLAGS包管理/源GBK locale 来源
Debian 1212-include linux/types.h -std=c++98 -D_GLIBCXX_USE_CXX11_ABI=0 -fpermissive -Wno-narrowingapt(默认源)locale-gen 生成
CentOS 64.4.7无需声明NJU centos-vault 6.10localedef 现场生成
CentOS 74.8.5无需声明NJU centos-vault 7.9.2009localedef 现场生成
RHEL 88.5-std=c++98 -D_GLIBCXX_USE_CXX11_ABI=0 -fpermissive -Wno-narrowingNJU 镜像glibc-langpack-zh 预编译
RHEL 911同 8 + -include linux/types.h,并需开启 CRB 仓库NJU 镜像glibc-langpack-zh 预编译

CentOS 6/7 的 gcc 4.4/4.8 编译 MySQL 5.1 无需任何 CXXFLAGS 修正;RHEL 8/9 的高版本 gcc 需处理 ABI 宏与缺失类型头文件。

核心能力

  • GBK 中文环境:系统全局字符环境统一切换为 zh_CN.GBK(GB2312 超集),覆盖新终端、已开终端、sudo、cron、systemd 所有会话;
  • 统一上海时区:自动切换为 Asia/Shanghai,缺失 tzdata 时自动补装;
  • 编译并行优化:自动按 nproc-1 并行编译(至少 1 核),同时保留单线程可回退;
  • 开机自启:有 systemd 走 systemctl enable,否则回退写入 /etc/rc.local

一键部署

按系统类型选用对应的部署脚本,用 -- 传入脚本参数:

# Debian 12
curl -sL https://cnb.cool/osaaki/cloud-native-deploy/-/git/raw/main/debian_12/deploy_mysql.sh | bash -s -- all

# RedHat 系(自动检测 CentOS 6/7、RHEL 8/9、Rocky、AlmaLinux 版本)
curl -sL https://cnb.cool/osaaki/cloud-native-deploy/-/git/raw/main/redhat/deploy_mysql.sh | bash -s -- all

自定义业务库账号与密码

默认账号 ztgame / 密码 123456,可通过命令行参数或环境变量覆盖:

# 命令行参数
curl -sL https://cnb.cool/osaaki/cloud-native-deploy/-/git/raw/main/redhat/deploy_mysql.sh | bash -s -- all --db-user gameuser --db-pass 'newpass'

# 短选项
curl -sL https://cnb.cool/osaaki/cloud-native-deploy/-/git/raw/main/redhat/deploy_mysql.sh | bash -s -- all -u gameuser -p 'newpass'

# 环境变量
DB_USER=gameuser DB_PASS='newpass' curl -sL https://cnb.cool/osaaki/cloud-native-deploy/-/git/raw/main/redhat/deploy_mysql.sh | bash -s -- all

账号与密码仅在脚本运行期间内存中使用,不会以明文写入任何全局文件。

下载后本地运行(便于审计脚本)

# Debian 12
curl -sL https://cnb.cool/osaaki/cloud-native-deploy/-/git/raw/main/debian_12/deploy_mysql.sh -o deploy_mysql.sh
chmod +x deploy_mysql.sh

./deploy_mysql.sh all # 默认账号部署
./deploy_mysql.sh all --db-user gameuser --db-pass 'newpass' # 自定义账号

子命令

命令说明
all全流程:环境准备 → 编译安装 → 初始化启动 → 授权建库
install仅编译安装
init仅初始化 + 启动 + 授权 + 建库
import <dir>导入指定目录下各业务库 *.sql
backup <dir>备份 FLServerDB / ZtGameDB 到指定目录

示例:

./deploy_mysql.sh import /path/to/sql
./deploy_mysql.sh backup /path/to/backup

参数说明

参数简写说明默认值
--db-user <name>-u业务库账号ztgame
--db-pass <pass>-p业务库密码123456
--分隔符,其后为子命令(配合 `curlbash -s --` 使用)

参数优先级:命令行参数 > 环境变量 DB_USER / DB_PASS > 内置默认值。

部署流程详解

all 子命令依次执行以下四个阶段:

1. 环境准备

  • Debian 12apt 安装编译依赖(gcc、make、libncurses5-dev、libtirpc-dev、locales-all、tzdata 等);
  • RedHat 系:自动检测发行版与主版本,按版本独立安装编译依赖与源配置(CentOS 6/7 走 vault 归档源,RHEL 8/9 切 NJU 镜像);
  • 切换系统字符环境为 zh_CN.GBK,写入全局配置确保所有会话生效;
  • 统一时区为 Asia/Shanghai

2. 编译安装

  • 从阿里云镜像下载 MySQL 5.1.73 源码;
  • 按系统版本选择对应 CXXFLAGS(Debian/RHEL 8/9 需 ABI 宏处理,CentOS 6/7 无需声明);
  • make -j$(nproc-1) 并行编译,make install 安装到 /usr/local/mysql

3. 初始化与启动

  • 创建带家目录的 mysql 系统用户(避免 su - mysql 告警);
  • 配置 /etc/my.cnf(含 datadirskip-name-resolve,权限 644,避免 world-writable 导致配置被忽略);
  • 通过 mysqld_safe 启动并轮询等待就绪。

4. 授权与建库

  • 为业务库账号在 localhost127.0.0.1% 三个来源授予 ALL PRIVILEGES
  • 创建 Zebra 业务库清单;
  • 配置开机自启(systemd 或 rc.local 回退)。

业务库清单

脚本会创建以下数据库:

FLServerDB ZtGameDB LoginServer roleChangeServer roleregServer unify00 zt

前置条件

  • root 权限运行(否则脚本直接报错退出);
  • 系统可访问网络(脚本会自动配置国内镜像源);
  • RedHat 系需为 CentOS 6/7/8/9、RHEL、Rocky 或 AlmaLinux 普通版本(CentOS Stream 不支持)。

部署后验证

# 确认中文字符环境全局生效 (应输出中文日期, 而非 202686:19:24 这类畸形)
date

# 确认时区已切换为上海 (应输出 CST +0800)
date +"%Z %z"

# 确认 MySQL 已运行
mysqladmin ping

# 连接数据库 (账号/密码为部署时传入的值)
mysql -u<账号> -p<密码>

注意:系统 locale 已切换为 zh_CN.GBK,当前终端(UTF-8)可能需要将 SSH 连接编码改为 GBK 后重新连接,避免后续命令/日志乱码。

Docker 测试环境

docker/ 目录下的 Dockerfile 用于构建部署测试环境,模拟真实干净云镜像(仅预装基础命令,不含编译工具链,由脚本现场安装)。通过 --build-arg BASE_IMAGE=... 指定不同基础镜像:

文件默认基础镜像说明
docker/Dockerfile.debiandebian:12Debian 系列测试镜像
docker/Dockerfile.redhatalmalinux:8RedHat 系列测试镜像

本地手动构建:

# RedHat 系
docker build -f docker/Dockerfile.redhat --build-arg BASE_IMAGE=centos:7 -t test-centos7 .

# Debian 系
docker build -f docker/Dockerfile.debian --build-arg BASE_IMAGE=debian:12 -t test-debian12 .

安全说明

  • 账号与密码仅在部署脚本运行期间使用,不会以明文写入任何文件;
  • 部署完成后请妥善记录你设置的账号密码;
  • 如遗忘密码,可通过 mysql -uroot 登录后查询 mysql.user 重置。