免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

Linux下源码编译安装MySQL 5.0.45:天龙八部服务端数据库实战

Linux下源码编译安装MySQL 5.0.45:天龙八部服务端数据库实战 简介天龙八部游戏数据库MySQL安装指南是一份面向游戏私服架设与数据库管理人员的实用文档。它围绕天龙八部游戏数据库环境详细讲解在Linux服务器上安装MySQL 5.0.45的完整操作流程包括安装文件传输、解压编译、字符集配置、数据库初始化及开机自启设置覆盖从准备到上线的关键步骤适合具备基础Linux命令知识、希望独立搭建游戏数据库的读者。资源为单个PDF文件仅66KB轻量易用。目前已有587人学习下载说明该文档对许多同类需求者具有参考价值。通过阅读可以快速理清MySQL安装的各个环节减少自行摸索时间避免因配置遗漏导致的数据库运行问题为后续游戏数据开发与维护打下基础。1. 天龙八部游戏数据库要装 mysql 5.0.45别被“老版本”劝退看到《天龙八部游戏数据库 mysql 安装》这份文档时很多人第一反应是“2011 年的 mysql 5.0.45太老了吧”。但如果你真正架过天龙八部服务端就会明白“新版本不一定能用”才是这个场景的常态。游戏库里的存储过程、字符集和连接方式往往是为老版本 mysql 调的换 5.6、5.7 反而会碰到一堆不兼容问题。这份资源的价值不在于“新”而在于把 linux 下源码编译安装 mysql 的完整流程走了一遍从上传到配置再到自启一次讲清。适合正在搭天龙服务端、对 linux 基础命令熟悉但没碰过源码编译的运维。下面我按实际复现顺序把每一步拆开顺手把坑标出来。2. 源码编译三步走上传、configure、make源码装 mysql 大体逃不开三步把安装包弄到服务器上、配置编译参数、make 编译安装。这三步里每一步都有细节错了就卡住半天。2.1 WinSCP 二进制传输与 SecureCRT 连接先把 mysql-5.0.45.tar.gz 从本地传到 linux 服务器的 /home 目录。这里最关键的坑是 WinSCP 的传输模式必须显式切到“二进制”不是默认的“文本”或“自动”。tar.gz 是压缩过的二进制数据如果用文本模式传WinSCP 会把文件里的 0x0A 之类字节按行尾规则改写传完后 tar 包就损坏了。常见翻车现场就是解压时报“gzip: invalid magic bytes”。传完后用 SecureCRT 打开终端建议把终端字符集设成 UTF-8避免后面 vi 编辑含中文注释的 my.cnf 时乱码。登录后先确认根目录空间够不够源码编译 mysql 至少留 2GB 剩余空间用df -h /home看一眼总没错。cd /home tar xzvf mysql-5.0.45.tar.gz cd /home/mysql-5.0.45这里tar xzvf的四个参数各有作用x 是解压z 是走 gzip 解压v 是打印解压出的文件名f 指定文件。不加 z 的话tar 会把它当普通归档包处理同样解不开。解压完cd /home/mysql-5.0.45进去之后的 configure、make 都得在这个目录里操作出去就找不到配置脚本了。2.2 configure 参数拆解进入源码目录后第一件事是执行 configure 生成 Makefile。这一步的参数直接决定 mysql 装到哪、用什么字符集、能不能被客户端安全调用./configure --prefix/usr/local/mysql-5.0.45 \ --with-charsetutf8 \ --with-extra-charsetsall \ --enable-thread-safe-client第一个--prefix是安装路径。我习惯把版本号带进目录名比如 /usr/local/mysql-5.0.45这样以后要装 5.1、5.5 可以并存切回老版本时不用动原目录。如果直接写/usr/local/mysql后续升级覆盖时数据目录容易乱。--with-charsetutf8是把 mysql 默认字符集设为 utf8。天龙八部服务端的表结构大多用 utf8 存中文不加这个参数的话默认 latin1 会让游戏里人名、帮派名全部乱码后面再改库表字符集非常痛苦。--with-extra-charsetsall是把所有附加字符集都编译进去代价是编译时间多几分钟但换来的是以后导入别人给的 SQL 时不受字符集限制我一般直接选 all省得一换库就报“Unknown character set”。--enable-thread-safe-client是给客户端库加线程安全支持。游戏服务端里多个进程可能同时连同一个 mysql如果你的 libmysqlclient 不是线程安全的高并发连库时会随机崩溃这个参数建议保留。2.3 make 与 make installconfigure 顺利通过后就是编译环节这是整个安装里最耗时的部分老机器编译 mysql 5.0.45 跑 2040 分钟都很正常别以为死机了。make make install第一个make是根据 Makefile 把源码编译成二进制文件日志里会出现大量 gcc 的编译输出。如果这步报错多半是缺 gcc、gcc-c 或 ncurses-devel具体处理见后面避坑章节。第二个make install是把编译好的文件复制到 /usr/local/mysql-5.0.45 下这步通常一分钟内结束。安装完成后我习惯先看一眼目录结构是否完整ls -l /usr/local/mysql-5.0.45/bin/mysqld ls -l /usr/local/mysql-5.0.45/share/mysql/my-small.cnf如果bin/mysqld存在且可执行说明编译安装没问题了。share 目录下的 cnf 文件是 mysql 自带的配置文件模板下一步马上要用到。3. my.cnf 与初始化字符集 utf8 和小内存配置编译安装只是把程序放进目录要让 mysql 能跑起来还得配配置文件、初始化数据目录、启动服务。这三步天数龙服务端能不能正常读写中文数据。3.1 替换 my-small.cnfmysql 自带了好几套配置模板small、medium、large 分别对应不同内存规模。天龙八部服务端通常是 mysql 和游戏进程挤在同一台服务器上内存本来就紧张所以我默认选my-small.cnf它把缓冲池调得比较保守适合 256MB512MB 内存的机器。cp /usr/local/mysql-5.0.45/share/mysql/my-small.cnf /etc/my.cnf复制成 /etc/my.cnf 后mysql 启动时会自动读这个路径不需要额外指定配置文件位置。注意是覆盖式复制如果之前有旧的 my.cnf先备份成 my.cnf.bak 再覆盖别问我为什么知道要备份。3.2 在 client 和 mysqld 段加入 default-character-setutf8文件复制完用 vi 打开 /etc/my.cnf找到[client]和[mysqld]两个段分别加上一行default-character-setutf8vi /etc/my.cnf进去后按G跳到文件尾部逐个找段在[client]段下加的是“客户端连上来时默认用的字符集”不加的话mysql 命令行客户端、游戏服务端连上后可能用 latin1 发中文出现“问号”或乱码。在[mysqld]段下加的是“服务端存储和返回数据时默认字符集”不加的话建表语句没写 charset 时就会建出 latin1 表后面再改麻烦很多。这里有三个细节值得注意一是 my-small.cnf 里可能只写了[mysqld]没有[client]段需要自己补一个[client]再写参数二是 5.0.45 用的是default-character-set到了 5.5 之后才推荐用character-set-server这个版本别写错三是加完后最好用mysqld --verbose --help | grep charset检查当前生效值前提是服务还没启动。3.3 mysql_install_db 与 mysqld_safe 启动配置文件就绪后第一件事是初始化系统库。mysql 的权限表、帮助表都是在这步生成/usr/local/mysql-5.0.45/bin/mysql_install_db执行后正常会在终端末尾看到“To start mysqld at boot time”之类的提示。此时/usr/local/mysql-5.0.45/var目录下应该出现 mysql、test 等系统库目录。如果这步报错百分之八十是 make install 没装完整或者 /usr/local/mysql-5.0.45 目录的属主不是当前用户解决办法稍后详述。初始化通过后启动服务最稳妥的方式是 mysqld_safe它会自动拉起 mysqld 并在崩溃时重启/usr/local/mysql-5.0.45/bin/mysqld_safe --userroot --userroot是文档里给的写法意味着 mysqld 进程以 root 身份运行。测试环境图省事没问题生产上不推荐建议单独建 mysql 用户。末尾的是把进程放到后台终端不会被占用。启动后如果立刻出现“Starting mysqld... [ OK ]”那是最好如果没看到去 /usr/local/mysql-5.0.45/var 下找 .err 日志文件mysql 起来失败的原因基本都在里面。4. 开机自启和导入游戏库rc.local 与 source服务起一次不算完服务器重启后 mysql 不会自己出现。这章讲怎么让它开机自动跑以及怎么把天龙的服务端 SQL 导进去。4.1 rc.local 固定启动项centos 5、6 时代最简单的自启方式是写 /etc/rc.d/rc.local。这个文件在系统启动到最后阶段会执行把 mysqld_safe 加进去就能保证 mysql 跟着机器起来echo /usr/local/mysql-5.0.45/bin/mysqld_safe --userroot /etc/rc.d/rc.local chmod x /etc/rc.d/rc.local注意两点路径必须是绝对路径不写绝对路径的话启动时 PATH 环境变量可能找不到 mysqld_safe末尾的不能省否则开机过程会卡在启动 mysql 这里后面其他服务全部等它。加完后最好用cat /etc/rc.d/rc.local看一眼内容别被引号搞出多余字符。4.2 建库建表与导入 SQLmysql 跑起来后天龙服务端一般会附带一份或多份 SQL 脚本里面是建库、建表语句。先用 root 登录然后直接 source/usr/local/mysql-5.0.45/bin/mysql -uroot mysql source /home/tlbb/db/tlbb.sql; mysql source /home/tlbb/db/account.sql;source 是 mysql 客户端的导入命令它会逐行执行文件里的 SQL。导入前留意两件事一是 SQL 文件的编码UTF-8 的 SQL 文件才能配合之前配的默认字符集二是导入过程出现“ERROR 1064”语法错误时多半是 SQL 里的注释或特殊字符被终端编码搞坏了检查 SecureCRT 会话编码。导入完执行show databases;看到游戏库名出现在列表里才算成功。这里库名以你的服务端实际文件名为准不同的服务端分发目录里叫法不一样我不编。4.3 用 mysqladmin 和 show 检查服务状态验证 mysql 到底“活着”没最直接的是用自带工具/usr/local/mysql-5.0.45/bin/mysqladmin -uroot status uptime: 132 Threads: 1 Questions: 17 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 11 Queries per second avg: 0.128能看到uptime就说明服务稳定。再确认监听端口和版本netstat -tlnp | grep 3306 /usr/local/mysql-5.0.45/bin/mysql --version如果 netstat 没输出说明 mysqld_safe 起来了又掉了回头查 var 目录的日志。版本命令会输出类似mysql Ver 14.12 Distrib 5.0.45这时候才能放心把服务端进程接上去。5. 避坑指南五条血泪经验照着文档按顺序操作一般能过但真实环境里总有意外。下面五条是我复现时实际踩过、或帮别人排查过的坑每条都是现象、原因、解决。5.1 解压报 gzip: invalid magic现象执行tar xzvf mysql-5.0.45.tar.gz后立刻报gzip: stdin has invalid magic或gzip: invalid magic bytes文件后缀明明是 .tar.gz。原因WinSCP 用了文本模式传输把二进制 tar.gz 按文本处理字节流被改写过。很多新手的 WinSCP 默认配置是 Auto识别不出 tar.gz 时会回退成文本格式。解决WinSCP 里选择连接点“传输”标签页把传输模式强制改成“二进制”重新上传覆盖原文件再解压就正常。5.2 configure 报错 cannot find C compiler现象执行 ./configure 没有跑到末尾输出里出现checking for C compiler... no或configure: error: no acceptable C compiler found。原因系统里没装 gcc-c。configure 过程中要编译 C 代码mysql 源码里有些工具是 C 写的。解决在 centos 上执行yum install -y gcc gcc-c make装完重新跑 configure。debian/ubuntu 对应apt-get install build-essential。5.3 make 报错找不到 curses.h现象make 编译到一半中断最后的错误信息里能看到curses.h: No such file or directory连带mysqladmin.cc之类的文件编译不过。原因mysql 5.0 的终端工具依赖 ncurses 开发库系统只有 ncurses 运行时库缺了头文件。解决先确认装没装rpm -qa | grep ncurses然后yum install -y ncurses-devel。装完不用清源码重新 make 即可configure 已经生成 Makefile不会因为新增依赖需要重配。5.4 mysql_install_db 初始化失败现象执行/usr/local/mysql-5.0.45/bin/mysql_install_db后输出类似FATAL ERROR: Could not find (or read) my.cnf或者Neither host x nor localhost could be looked up。原因常见有三种。一是 /etc/my.cnf 里的参数写得不对mysqld 启动时解析失败二是 make install 没完全成功share/mysql 目录里缺初始化脚本三是 /usr/local/mysql-5.0.45 目录属主不是当前用户init 脚本写不了 var 目录。当然还有网络配置问题mysql_install_db 会尝试解析 localhostDNS 坏了也会挂在这。解决先看错误日志位置我一般先执行ls -l /usr/local/mysql-5.0.45确认目录可写再在 /etc/my.cnf 中临时把[mysqld]段里的奇葩参数注释掉然后重跑。如果是权限问题直接chown -R root:root /usr/local/mysql-5.0.45。DNS 问题则在 /etc/hosts 里补一行127.0.0.1 localhost。5.5 连接时报 Cant connect through socket现象mysql 客户端连不上报ERROR 2002 (HY000): Cant connect to local MySQL server through socket /tmp/mysql.sock (2)。原因这条路有两条一是 mysqld 没起来socket 文件自然不存在二是 mysqld_safe 起来过但立刻崩了或者 socket 文件路径不在 /tmp而在 var 目录。解决先看进程ps -ef | grep mysqld没有进程就查日志tail -n 50 /usr/local/mysql-5.0.45/var/$(hostname).err。如果日志显示 buffer pool 初始化错误之类的按 5.4 的方式排查 my.cnf。如果进程在但 socket 路径不同执行mysql -uroot --socket/usr/local/mysql-5.0.45/var/mysql.sock测试。6. 装完不算完把验证和备份做成习惯服务起来、游戏库导入成功看着像结束了但真正上线前我还习惯多走两步验证不然半夜游戏服连不上库那才叫血泪。第一步是确认字符集真实生效不能只看配置文件/usr/local/mysql-5.0.45/bin/mysql -uroot -e show variables like character%;输出里character_set_server和character_set_client都应该是 utf8。只要有一个不是游戏里的中文数据迟早出事。第二步是用 mysqladmin ping 做一分钟一次的探活。我一般写一个 50 行的 shell 脚本把 ping 和磁盘空间检查绑在一起任何一个失败就发一封邮件。但脚本是后话更关键的是备份因为导入游戏库之后表和表之间的关系就绑定在一个可运行的库里了再重建一次环境要重新编译、重新导数据纯手工非常费神。备份命令长这样/usr/local/mysql-5.0.45/bin/mysqldump -uroot -p --all-databases /home/mysql_backup_$(date %Y%m%d).sql--all-databases会连系统库带游戏库一起导恢复的时候直接mysql -uroot -p 备份文件就能全部还原。老版本 mysqldump 不存在热备份阻塞问题但导出时最好避开游戏在线高峰。从那以后我每次架完服务端都强制自己走一遍字符集查看、mysqladmin ping、mysqldump 落盘这三件事再关机重启验证一次 rc.local。这套动作能省下后面绝大多数的半夜排查希望帮到你也祝你一次通过。本文还有配套的精品资源点击获取
返回列表