MySQL 5.1.73 一键部署中文游戏库环境
Zebra 游戏服务器数据库环境的一键搭建方案,支持 Debian 与 RedHat 系主流发行版。 脚本基于源码编译安装(非二进制分发),确保字符集、ABI、运行时 locale 与业务环境完全一致。 在还原安装文档的基础上,针对实测发现的问题做了多项修正,开箱即用。
支持的发行版
| 系列 | 部署脚本 | 支持版本 |
|---|---|---|
| Debian | debian_12/deploy_mysql.sh | 12 |
| RedHat / CentOS / Rocky / AlmaLinux | redhat/deploy_mysql.sh | 6、7、8、9 |
⚠️ CentOS Stream 不支持。RedHat 系脚本会自动检测系统版本,按版本号独立选择 yum 源、编译参数与 locale 生成方式,各版本分支互不复用。CentOS 6/7 已 EOL,会自动切换到 NJU centos-vault 归档源。
各版本差异速览
| 版本 | gcc | CXXFLAGS | 包管理/源 | GBK locale 来源 |
|---|---|---|---|---|
| Debian 12 | 12 | -include linux/types.h -std=c++98 -D_GLIBCXX_USE_CXX11_ABI=0 -fpermissive -Wno-narrowing | apt(默认源) | locale-gen 生成 |
| CentOS 6 | 4.4.7 | 无需声明 | NJU centos-vault 6.10 | localedef 现场生成 |
| CentOS 7 | 4.8.5 | 无需声明 | NJU centos-vault 7.9.2009 | localedef 现场生成 |
| RHEL 8 | 8.5 | -std=c++98 -D_GLIBCXX_USE_CXX11_ABI=0 -fpermissive -Wno-narrowing | NJU 镜像 | glibc-langpack-zh 预编译 |
| RHEL 9 | 11 | 同 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 |
-- | — | 分隔符,其后为子命令(配合 `curl | bash -s --` 使用) |
参数优先级:命令行参数 > 环境变量 DB_USER / DB_PASS > 内置默认值。
部署流程详解
all 子命令依次执行以下四个阶段:
1. 环境准备
- Debian 12:
apt安装编译依赖(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(含datadir、skip-name-resolve,权限644,避免 world-writable 导致配置被忽略); - 通过
mysqld_safe启动并轮询等待就绪。
4. 授权与建库
- 为业务库账号在
localhost、127.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.debian | debian:12 | Debian 系列测试镜像 |
docker/Dockerfile.redhat | almalinux:8 | RedHat 系列测试镜像 |
本地手动构建:
# 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重置。