资讯动态

VMware+CentOS 7 部署 GreatSQL 8.0.32 完整指南与避坑

发布时间:2026/10/27 20:07:41 来源:尧图企业网站定制
简介这份资源是郑州大学计算机与人工智能学院《数据库系统原理》课程的实验报告文档面向计算机类专业学生及需要完成数据库实验的学习者帮助其理解DBMS系统架构、掌握万里数据库GreatSQL的安装配置与日常管理并规范实验报告的撰写格式。压缩包内为1个docx文件约3.69MB完整记录了实验一至实验九的内容涵盖实验目的、内容、类型与学时分配以及运行环境配置、依赖包安装、二进制包下载解压、服务启动与进程状态检查等实践环节并配有带编号和图题的实验截图。报告还详细说明了关闭SELinux与防火墙的原因及操作命令分析了实验中的问题与解决方法并对结果进行反思。已有509人学习适合需要参考实验流程、排错思路与报告排版规范的读者对照使用。1. 从一台干净的 CentOS 说起GreatSQL 8.0.32 装不上多半是环境没铺平虚拟机里刚装完 CentOS 7命令行一片黑很多人第一反应是直接wget二进制包解压开跑结果mysqld起不来、端口连不上、日志里全是权限和依赖报错。这套「VMware CentOS 7 GreatSQL 8.0.32-25」的组合在数据库原理实验里出现频率极高装不好后面建库、建表、写查询全都卡在第一步。这篇笔记按我实际部署的顺序走一遍先关 SELinux 和防火墙再补依赖然后解压二进制包、写 systemd 服务、配my.cnf、建 mysql 用户和目录最后启动验证。适合刚接触 Linux 下数据库部署的开发者也适合想复盘版本差异和参数取舍的熟手。2. 装前环境准备SELinux、防火墙与依赖包一个都不能少2.1 为什么先关 SELinux 和防火墙GreatSQL 需要读写数据目录、监听 3306 端口SELinux 的强制访问控制会拦截这些特权操作防火墙则可能直接把端口挡在外面。实验环境里我一般先关掉这两个减少变量。命令如下# 临时关闭 SELinux当前会话生效 setenforce 0 # 永久关闭 SELinux改配置文件重启后依然生效 sed -i /^SELINUX/c SELINUXdisabled /etc/selinux/config # 关闭防火墙并禁止开机自启 systemctl disable firewalld systemctl stop firewalldsetenforce 0只对当前运行状态生效机器一重启就恢复所以必须同时改/etc/selinux/config把SELINUX那一行替换成disabled。防火墙这边disable管开机自启stop管当前进程两条都要执行。注意这是实验和开发环境的做法生产环境应该用firewall-cmd放行 3306 而不是直接关掉SELinux 也应该配策略而不是禁用这个取舍心里要有数。2.2 依赖包清单与安装GreatSQL 二进制包不自带所有运行时库缺libaio会在启动时报libaio.so.1: cannot open shared object file。我一般一次性把常用依赖装齐yum install -y pkg-config perl libaio-devel numactl-devel numactl-libs \ net-tools openssl openssl-devel jemalloc jemalloc-devel \ perl-Data-Dumper perl-Digest-MD5 python2 perl-JSON perl-Test-Simplelibaio-devel和numactl-devel是 InnoDB 异步 IO 和 NUMA 绑定的基础jemalloc是内存分配器GreatSQL 在高并发下用它替代 glibc malloc 能减少碎片。perl-Data-Dumper、perl-Digest-MD5这些是mysql_install_db和部分脚本依赖的缺了初始化阶段就会报错。python2在 CentOS 7 上默认就有但有些精简镜像被裁掉了显式装上更稳。提示如果yum源不可用先确认虚拟机能访问软件源别急着怀疑 GreatSQL 包本身。2.3 版本选择为什么是 8.0.32-25 而不是别的实验材料指定的是GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal.tar.xz。glibc2.17对应 CentOS 7 的 glibc 版本选错 glibc 版本会在解压后运行mysqld --version时直接报GLIBC_2.xx not found。minimal是精简包去掉了调试符号和部分工具体积小、够用。8.0.32 属于 8.0 系列和 MySQL 8.0 语法基本兼容实验里的CREATE DATABASE、CREATE TABLE、CREATE INDEX都能直接跑。如果换成 5.7 系列CHECK约束、窗口函数这些会有差异实验三里的CHECK(Grade 0 AND Grade 100)在 5.7 里是被忽略的8.0 才真正生效这个版本差异值得留意。3. 安装 GreatSQL 8.0.32解压、systemd 服务与 my.cnf 配置3.1 下载解压到 /usr/local二进制包统一放/usr/local/解压后目录名带版本号后面配置路径要对应上cd /usr/local wget https://product.greatdb.com/GreatSQL-8.0.32-25/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal.tar.xz tar xf GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal.tar.xz解压出来是GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal这个长目录。我一般会再建一个软链接ln -s指向它叫greatsql这样my.cnf和服务文件里写路径短一点将来升级版本只改软链接。这一步不是必须但能省掉后面一堆长路径拼写错误。3.2 写 systemd 服务文件手工mysqld_safe启动不方便管理用 systemd 托管才能systemctl start/stop/status。新建/lib/systemd/system/greatsql.service[Unit] DescriptionGreatSQL Server Afternetwork.target [Service] Typeforking Usermysql Groupmysql ExecStart/usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal/bin/mysqld --defaults-file/etc/my.cnf --daemonize ExecStop/usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal/bin/mysqladmin -uroot -p shutdown LimitNOFILE65535 Restarton-failure [Install] WantedBymulti-user.targetTypeforking是因为mysqld --daemonize会 fork 到后台systemd 需要知道主进程什么时候退。Usermysql保证进程不以 root 跑LimitNOFILE65535是文件描述符上限数据库连接多了默认 1024 不够用。写完执行systemctl daemon-reloaddaemon-reload让 systemd 重新读取服务文件不执行这一步systemctl start greatsql会提示服务不存在。3.3 建 mysql 用户和数据目录数据库进程不能用 root 跑建一个无登录权限的系统用户/sbin/groupadd mysql /sbin/useradd -g mysql mysql -d /dev/null -s /sbin/nologin mkdir -p /var/lib/mysql chown -R mysql:mysql /var/lib/mysql /var/log \ /usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal-d /dev/null -s /sbin/nologin表示这个用户没有家目录、不能登录 shell纯粹给服务用。chown把数据目录、日志目录和安装目录都划给 mysql 用户漏掉任何一个启动时都会在错误日志里看到Permission denied。3.4 my.cnf 关键参数/etc/my.cnf是全局配置实验环境我一般写这些[mysqld] basedir/usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal datadir/var/lib/mysql socket/var/lib/mysql/mysql.sock port3306 usermysql log-error/var/log/greatsql-error.log pid-file/var/lib/mysql/greatsql.pid character-set-serverutf8mb4 default-storage-engineInnoDBbasedir和datadir必须和实际路径一致socket是本地连接用的port是 TCP 端口。character-set-serverutf8mb4避免中文乱码实验里插入「张华」「李玉」这些中文名字符集不对会变成问号。log-error指向的目录要提前存在且有写权限否则启动失败但错误信息无处可看这就是个黑匣子。3.5 初始化与启动首次启动前要初始化数据目录/usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal/bin/mysqld \ --defaults-file/etc/my.cnf --initialize --usermysql--initialize会生成 root 临时密码写在log-error指定的日志里用grep temporary password /var/log/greatsql-error.log找出来。然后启动服务systemctl start greatsql systemctl status greatsqlstatus显示active (running)才算起来。再用ps -ef | grep mysqld确认进程在ss -lntp | grep mysqld确认 3306 在监听ls /var/lib/mysql能看到ibdata1、mysql目录这些文件。三步都过安装才算落地。4. 避坑排查GreatSQL 启动失败的五种典型现场4.1 现象systemctl start报Job for greatsql.service failed原因多半是my.cnf路径写错或数据目录权限不对。先看journalctl -xe和服务文件里的ExecStart路径再确认datadir存在且属主是 mysql。解决chown -R mysql:mysql /var/lib/mysql核对basedir与实际解压目录一致。4.2 现象错误日志报libaio.so.1: cannot open shared object file原因依赖包没装全libaio缺失。解决yum install -y libaio libaio-devel装完ldconfig刷新动态库缓存再启动。4.3 现象Access denied for user rootlocalhost原因初始化时生成的临时密码没记下来或者用了错误的密码。解决停服务删掉datadir下内容重新--initialize或者用--skip-grant-tables启动后改密码再正常启动。我一般初始化完立刻把临时密码记到笔记里省得回头翻日志。4.4 现象端口 3306 被占用启动报Address already in use原因之前装过 MySQL 或 MariaDB旧进程还在。解决ss -lntp | grep 3306找到 PIDkill掉或者改my.cnf里的port。CentOS 7 自带mariadb-libs有时会残留rpm -qa | grep mariadb查一下冲突就卸掉。4.5 现象中文插入后显示乱码原因客户端和服务端字符集不一致。解决my.cnf里character-set-serverutf8mb4建库时CREATE DATABASE DB DEFAULT CHARACTER SET utf8mb4;连接时SET NAMES utf8mb4;。三处统一乱码基本消失。5. 装完怎么验证从建库建表到查询跑通的一条龙检查装完不是看到active (running)就完事得用实际 SQL 把链路走一遍。先用临时密码登录mysql -uroot -p -S /var/lib/mysql/mysql.sock登录后先改密码再建库建表-- 改 root 密码 ALTER USER rootlocalhost IDENTIFIED BY NewPass123!; -- 建库并指定字符集 CREATE DATABASE DB DEFAULT CHARACTER SET utf8mb4; USE DB; -- 建学生表主键和非空约束都带上 CREATE TABLE STUDENTS( Sno char(9) PRIMARY KEY, Sname char(10) NOT NULL, Sex char(2), Birthday DATE, Speciality char(20), Dno char(4) ); -- 插入中文数据验证字符集 INSERT INTO STUDENTS VALUES (201705001,张华,男,1999-12-16,计算机,CS), (201705002,张晓霞,女,1999-01-01,软件工程,SE); -- 查询验证 SELECT * FROM STUDENTS;PRIMARY KEY保证学号唯一NOT NULL防止姓名空值utf8mb4让中文正常显示。查询结果里中文不乱码、两条记录都在说明存储和字符集都通了。再建个索引验证 DDLCREATE INDEX Student_Dept ON STUDENTS(Dno); SHOW INDEX FROM STUDENTS;SHOW INDEX能看到Student_Dept这一行说明索引创建成功。最后用systemctl restart greatsql重启一次再查一遍数据还在确认数据目录持久化没问题。这套检查我每次装完都走一遍因为「服务起来了」和「能正常读写」是两回事前者只证明进程活着后者才证明这套环境真能跑实验。从那以后我每次部署完数据库都强制走一遍「建库、插中文、查索引、重启再查」这四步少一步都可能在上实验课时翻车。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑