news 2026/10/27 20:07:35

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VMware+CentOS 7 部署 GreatSQL 8.0.32 完整指南与避坑

简介:这份资源是郑州大学计算机与人工智能学院《数据库系统原理》课程的实验报告文档,面向计算机类专业学生及需要完成数据库实验的学习者,帮助其理解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 SELINUX=disabled' /etc/selinux/config # 关闭防火墙并禁止开机自启 systemctl disable firewalld systemctl stop firewalld

setenforce 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-Simple

libaio-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] Description=GreatSQL Server After=network.target [Service] Type=forking User=mysql Group=mysql 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 LimitNOFILE=65535 Restart=on-failure [Install] WantedBy=multi-user.target

Type=forking是因为mysqld --daemonize会 fork 到后台,systemd 需要知道主进程什么时候退。User=mysql保证进程不以 root 跑,LimitNOFILE=65535是文件描述符上限,数据库连接多了默认 1024 不够用。写完执行:

systemctl daemon-reload

daemon-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 port=3306 user=mysql log-error=/var/log/greatsql-error.log pid-file=/var/lib/mysql/greatsql.pid character-set-server=utf8mb4 default-storage-engine=InnoDB

basedir和datadir必须和实际路径一致,socket是本地连接用的,port是 TCP 端口。character-set-server=utf8mb4避免中文乱码,实验里插入「张华」「李玉」这些中文名,字符集不对会变成问号。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 --user=mysql

--initialize会生成 root 临时密码,写在log-error指定的日志里,用grep 'temporary password' /var/log/greatsql-error.log找出来。然后启动服务:

systemctl start greatsql systemctl status greatsql

status显示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 'root'@'localhost'

原因:初始化时生成的临时密码没记下来,或者用了错误的密码。解决:停服务,删掉datadir下内容重新--initialize,或者用--skip-grant-tables启动后改密码再正常启动。我一般初始化完立刻把临时密码记到笔记里,省得回头翻日志。

4.4 现象:端口 3306 被占用,启动报Address already in use

原因:之前装过 MySQL 或 MariaDB,旧进程还在。解决:ss -lntp | grep 3306找到 PID,kill掉,或者改my.cnf里的port。CentOS 7 自带mariadb-libs,有时会残留,rpm -qa | grep mariadb查一下,冲突就卸掉。

4.5 现象:中文插入后显示乱码

原因:客户端和服务端字符集不一致。解决:my.cnf里character-set-server=utf8mb4,建库时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 'root'@'localhost' 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让中文正常显示。查询结果里中文不乱码、两条记录都在,说明存储和字符集都通了。再建个索引验证 DDL:

CREATE INDEX Student_Dept ON STUDENTS(Dno); SHOW INDEX FROM STUDENTS;

SHOW INDEX能看到Student_Dept这一行,说明索引创建成功。最后用systemctl restart greatsql重启一次,再查一遍数据还在,确认数据目录持久化没问题。这套检查我每次装完都走一遍,因为「服务起来了」和「能正常读写」是两回事,前者只证明进程活着,后者才证明这套环境真能跑实验。从那以后我每次部署完数据库,都强制走一遍「建库、插中文、查索引、重启再查」这四步,少一步都可能在上实验课时翻车。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/27 20:07:33

Kafka在事件驱动架构中的核心优势与Go实践

1. 为什么选择Kafka作为事件驱动架构的核心组件在云原生架构中构建事件驱动系统时&#xff0c;消息中间件的选型直接决定了系统的可靠性和扩展性。经过多年生产环境验证&#xff0c;Kafka凭借其独特的架构设计成为了事件驱动系统的首选方案。这里我结合自己主导过的三个千万级日…

作者头像 李华
网站建设 2026/10/27 20:05:51

新能源汽车品牌出海GEO服务商哪家好参考:AI平台覆盖与采购避坑

新能源汽车品牌出海GEO服务商哪家好参考&#xff1a;AI平台覆盖与采购避坑 新能源汽车出海项目往往同时涉及品牌词、车型词、续航与安全问答、经销商推荐和海外媒体信源。与其直接问哪家排名最高&#xff0c;不如从企业类型、目标市场和可验证能力入手。下文按统一结构对比广拓…

作者头像 李华
网站建设 2026/10/27 20:05:39

机器视觉在精密孔径测量中的应用与优化

1. 项目背景与痛点发现那天下午三点二十分&#xff0c;实验室西侧的窗户正好将阳光以45度角投射在工作台上。我正用千分尺测量一块铝合金零件上的定位孔&#xff0c;突然注意到金属表面反射的光斑在显微镜目镜里形成了明显的衍射条纹。这个偶然的光学现象让我突然意识到&#x…

作者头像 李华
网站建设 2026/10/27 20:05:01

LabVIEW数据库交互:连接与CRUD操作实战指南

1. LabVIEW数据库交互核心方案解析 在工业自动化和测试测量领域&#xff0c;LabVIEW作为图形化编程的标杆工具&#xff0c;与各类数据库的高效交互一直是工程师的刚需。我经手过数十个需要对接Access、MySQL和SQL Server的项目&#xff0c;总结出一套稳定可靠的数据库操作方案。…

作者头像 李华
网站建设 2026/10/27 20:04:33

ITIL 4迁移实战:五大隐形陷阱与解决方案

1. ITIL 4迁移的行业现状与核心挑战 ITIL 4作为IT服务管理领域的最新框架&#xff0c;正在全球范围内逐步替代ITIL V3。根据Gartner的调研数据&#xff0c;超过72%的财富500强企业已启动迁移计划&#xff0c;但其中仅有不到30%的项目达到了预期效果。这种落差往往源于对"隐…

作者头像 李华
网站建设 2026/10/27 20:03:33

Python虚拟环境选型指南:venv、conda与Python版本决策

1. 为什么你每次配环境都像在拆弹——虚拟环境不是“可选项”&#xff0c;而是Python项目的呼吸系统我第一次在客户现场部署一个用PyTorch做的图像分类服务时&#xff0c;本地跑得好好的&#xff0c;一上服务器就报ImportError: cannot import name MultiheadAttention from to…

作者头像 李华