首页 / 资讯中心 / 文章详情

CentOS 7下安装配置GreatSQL 8.0数据库:从零到跑通SQL

CentOS 7下安装配置GreatSQL 8.0数据库:从零到跑通SQL ★ FEATURED ARTICLE
简介郑州大学计算机与人工智能学院《数据库系统原理》课程实验报告适合正在学习数据库原理、需要完成万里数据库GreatSQL相关实验的本科生参考。报告内容从实验一至实验九围绕DBMS系统认识、GreatSQL的安装与启动、逻辑/物理组件理解展开完整记录了关闭SELinux和防火墙的原因及具体命令、依赖包安装、二进制包下载解压、systemd服务配置等关键步骤。针对实验中的问题给出了解决方法与结果分析并强调实验截图、图编号、表格标题等书面规范对基本表、视图、触发器、存储过程和约束等逻辑组件也进行了梳理同时涉及数据库物理存储方式的思考可作为同类实验报告撰写的直接模板。压缩包内含1个docx文档大小约3.69MB已有509人学习适合郑州大学该课程学生及自学数据库管理系统操作的初学者下载使用。1. 数据库实验环境搭建为什么我最后选了万里数据库 GreatSQL数据库原理实验报告这类活儿看着是写文档其实九成时间耗在装环境上。某同学第一次做《数据库系统原理》实验时照着实验指导书把 CentOS 7 虚拟机开起来然后就开始跟数据库管理系统较劲先装 MySQL发现实验报告里要求用的是万里数据库 GreatSQL换装 GreatSQL 后又碰上依赖缺失、服务起不来、中文乱码一堆问题折腾到半夜才把第一张截图交上去。实验一没做完后面创建数据库和表、交互式 SQL 这些就全卡住了。这套组合其实很常见虚拟机 VMware 里装 CentOS 7 或更高版本再装一个万里数据库 GreatSQL 8.0.32-25 二进制发行版。难点不在数据库本身而在 Linux 侧的配置——SELinux 要不要关、防火墙怎么处理、systemd 服务文件怎么写、数据目录权限给谁。装不好的话systemctl start greatsql一步就卡死后续九个实验全没法往下走。这篇就把我从零搭建到跑通 SQL 的完整过程写清楚新手照着一路做熟手看看哪些参数踩过坑。文章涉及的实验报告来自某高校计算机学院的课程实验但安装和配置步骤是通用的。2. 环境准备CentOS 7 最小化安装后的三个必改项2.1 关闭 SELinux 与防火墙不是玄学是减少变量实验指导书第一步就是关 SELinux 和防火墙命令很短setenforce0 sed -i /^SELINUX/cSELINUXdisabled /etc/selinux/config systemctl disable firewalld systemctl stop firewalldsetenforce0是临时把 SELinux 从 enforcing 切到 permissive 模式重启前有效sed -i那行直接把/etc/selinux/config里SELINUX开头的那行替换成SELINUXdisabled这是永久关闭。后面两条是关防火墙先disable取消开机自启再stop立刻停掉一台刚装好的虚拟机里其实没有别的服务停了也不影响什么。SELinux 对数据库这类需要做文件读写、网络监听的程序确实不友好。它做的是强制访问控制进程只能在策略允许的范围内碰文件和端口而 MySQL 系的数据库默认目录、日志路径很多不在预设策略里就会莫名被拦截。实验场景下直接关闭减少出错的变量。防火墙同理GreatSQL 默认监听 3306 端口不关防火墙就得记得写规则放行虚拟机和宿主机之间做测试时多一道检查就多一分麻烦。一个小提醒sed -i后面如果手滑把/c写错改坏了配置文件可以用vim /etc/selinux/config手动把那一行改成SELINUXdisabled再保存效果一样。2.2 安装依赖包缺一个都能让初始化失败GreatSQL 的二进制包是官方编译好的不需要自己从源码编但运行时刻依赖库还是得装齐。实验一里给的依赖安装命令包含了一串包名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是异步 I/O 库InnoDB 读写数据页要调它numactl-devel和numactl-libs是 NUMA 内存管理工具MySQL 8.0 在多核机器上跑内存分配策略跟它有关openssl-devel是 SSL/TLS 支持MySQL 8.0 默认开了密码加密认证jemalloc是替代 glibc 的内存分配器能减少内存碎片perl-*那串是初始化脚本要用的解释器和模块。这一长串里最容易漏的是libaio-devel。漏了的话后面初始化数据目录时大概率报libaio.so.1: cannot open shared object file找不到库整个安装停在那儿。装这批依赖没有技巧就是整段yum install -y一次性执行缺什么再加不用纠结哪个包多余。2.3 虚拟机内存与磁盘预留装完后才发现的坑CentOS 7 虚拟机建议内存给到 2GB 以上。GreatSQL 用 InnoDB 引擎innodb_buffer_pool_size默认值是 128MB跑实验那点数据量肯定够但加上操作系统本身、mysqld 进程、还有临时表排序空间1GB 内存会频繁触发 swap响应特别慢。磁盘方面整个二进制包解压后接近 2GB再加上数据库文件、binlog预留 20GB 比较稳妥。检查磁盘和内存的命令很简单free -h df -h /usr/local第一行看内存总量和可用量第二行看/usr/local所在分区的剩余空间。如果发现内存只有 1GB关掉虚拟机后在 VMware 设置里调高再开机磁盘不够就得加一块虚拟磁盘或者把安装目录换到数据盘。把这些检查放在最前面后面安装会顺利很多。3. 安装 GreatSQL 8.0.32-25从解压到 systemd 托管3.1 下载二进制包与目录规划万里数据库 GreatSQL 提供的是官方编译好的二进制包不用自己 make这对教学环境特别友好。下载和解压的完整流程是这样的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.xzwget后面的 URL 指向万里数据库官网的二进制包仓库glibc2.17表示它要求系统 glibc 版本不低于 2.17CentOS 7 的 glibc 是 2.17恰好满足。-minimal是精简版只带了服务器端和基本工具没有额外的测试套件和调试符号对实验环境来说体积小、够用。tar xf解压后会在/usr/local/下生成一个类似GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal的目录这就是安装根目录。下载前先确认/usr/local有空闲空间df -h /usr/local看一眼。压缩包大约 200MB 上下解压后接近 2GB网络不好时下载可能中断可以加-c参数断点续传wget -c URL。3.2 编写 systemd 服务文件解压完还不能直接启动GreatSQL 官方推荐用 systemd 管理服务。需要手动写一个服务文件vim /lib/systemd/system/greatsql.service[Unit] DescriptionGreatSQL Server Afternetwork.target [Service] Usermysql Groupmysql Typeforking ExecStart/usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal/bin/mysqld --defaults-file/etc/my.cnf --daemonize ExecReload/bin/kill -s HUP $MAINPID ExecStop/bin/kill -s TERM $MAINPID Restarton-failure LimitNOFILE65535 [Install] WantedBymulti-user.target这个文件的核心是Typeforking和ExecStart。MySQL 系的 mysqld 用--daemonize参数把自己转入后台运行父进程先返回systemd 认为启动成功了所以用Typeforking而不是默认的simple。Restarton-failure让它在异常退出时自动拉起但正常 stop 不重启。这里有一个新手容易踩的坑Usermysql和Groupmysql必须先创建好系统用户服务文件里的路径也要与实际解压目录一字不差。写完文件后执行systemctl daemon-reloaddaemon-reload让 systemd 重新读取服务文件之后就能用systemctl start|stop|restart|status greatsql来管理服务了。如果之后改了服务文件内容每次都要重新daemon-reload才生效。3.3 my.cnf 配置文件最小可行配置GreatSQL 启动时读取/etc/my.cnf这个文件决定数据目录、端口、socket 等核心参数。一个最小配置是[client] port 3306 socket /var/lib/mysql/mysql.sock [mysqld] port 3306 socket /var/lib/mysql/mysql.sock basedir /usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal datadir /var/lib/mysql pid-file /var/lib/mysql/mysql.pid user mysql character-set-server utf8mb4 collation-server utf8mb4_general_ci lower_case_table_names 1datadir是数据文件存放目录默认指向/var/lib/mysqlcharacter-set-server utf8mb4让数据库默认字符集支持中文实验里要插入“张华”这类中文名不设这个很容易乱码lower_case_table_names 1让表名大小写不敏感Windows 上开发的习惯到 Linux 上也能通用不过这个参数要在初始化数据目录之前就定好中途改会出事。配置文件里没有写skip-grant-tables实验环境不要开它——那会跳过所有权限检查任何客户端都能无密码登录适合线下救援但不适合日常使用。3.4 创建系统用户和数据目录mysqld 不能用 root 直接跑安全考虑需要独立的低权限用户/sbin/groupadd mysql /sbin/useradd -g mysql mysql -d /dev/null -s /sbin/nologin第一行创建mysql用户组第二行创建mysql用户-d /dev/null表示不给它家目录-s /sbin/nologin禁止它登录 shell这是系统账户的标准姿势。之后创建数据目录并授权mkdir /var/lib/mysql/ chown -R mysql:mysql /var/lib/mysql/ /var/log /usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimalmkdir /var/lib/mysql创建数据目录chown -R把数据目录、日志目录和安装目录归属改成mysql:mysql。这里把/var/log整个授权给 mysql 有点宽但从实验环境角度能少很多日志写权限问题。生产环境应该单独建/var/log/mysql目录再授权然后把 my.cnf 里的log-error指过去。至此安装前的准备全部完成。接下来启动服务验证安装是否成功systemctl start greatsql systemctl status greatsql ps -ef | grep mysqld ss -lntp | grep mysqldsystemctl status会显示服务当前状态ps -ef | grep mysqld看进程是否存在注意grep自己也会出现在结果里要区分ss -lntp | grep mysqld检查 3306 端口是否被监听。如果看到LISTEN状态说明数据库已经跑起来了。查看数据文件用ls /var/lib/mysql正常能看到mysql、performance_schema、sys这几个系统库的目录以及ibdata1、undo_001这类 InnoDB 系统文件。4. 服务启停与常见问题排查那些年折腾过的 systemd 和 33064.1 systemctl 管理服务的日常操作服务配置好后日常管理就全靠 systemdsystemctl start greatsql # 启动 systemctl stop greatsql # 停止 systemctl restart greatsql # 重启 systemctl enable greatsql # 开机自启enable很关键。不加的话虚拟机重启后 GreatSQL 不会自动拉起你还得手动 start实验时突然连不上数据库大概率是这个。重启验证一下也比较省心reboot # 重启后 systemctl status greatsql如果显示active (running)说明开机自启配置成功了。4.2 启动失败从 status 和日志里找线索systemctl start greatsql执行后如果服务没起来第一时间看状态和错误日志systemctl status greatsql journalctl -u greatsql --no-pager -n 50journalctl是 systemd 的日志查询命令-u指定服务名-n 50只显示最近 50 行。最常见的启动失败原因有几个现象一ERROR! The server quit without updating PID file这个报错信息本身没什么信息量本质是 mysqld 启动后立刻退出。原因一般是某个启动前置条件不满足最常踩的是/var/lib/mysql目录属主不对。解决chown -R mysql:mysql /var/lib/mysql systemctl stop greatsql systemctl start greatsql现象二初始化时提示libaio.so.1找不到原因就是少了libaio-devel。回去补装yum install -y libaio-devel装完再启动一般就好了。现象三3306 端口被占用可能是机器上装过别的 MySQL或者自己手滑启动了第二个实例。检查ss -lntp | grep 3306看到输出里有mysqld之外的进程占着端口先停掉它或者改 my.cnf 里的port参数。教学环境里更常见的是以前装过 MariaDBsystemctl stop mariadb停掉再启动 GreatSQL。4.3 配置文件改错导致起不来my.cnf 里一个参数写错mysqld 也会拒绝启动。比如datadir指向不存在的目录或者lower_case_table_names和已初始化的数据目录不一致mysqld 会在错误日志里直接写明原因用tail -f /var/log/mysql/error.log实时看日志是好习惯。改配置前先备份cp /etc/my.cnf /etc/my.cnf.bak.$(date %Y%m%d)这个$(date %Y%m%d)会自动拼上当天日期做备份文件名改坏了随时回滚算是装环境时最实用的一个习惯。4.4 客户端连接报权限错误GreatSQL 装好后默认root账户只允许从本机登录。实验里需要用命令行或可视化工具连数据库先在本机登录进去确认没问题如果后续要开远程访问得单独授权mysql -uroot -p登录后执行查询用户表SELECT user, host FROM mysql.user;如果root的 host 只有localhost远程工具就连不上需要授权。实验场景里不开远程问题不大全部操作在虚拟机里做。5. 数据库逻辑组件与 SQL 交互实验二到实验三的落地操作5.1 创建数据库与基本表实验二要求创建数据库DB然后建三张表STUDENTS、COURSES、SC。完整流程是mysql -uroot -pCREATE DATABASE DB; SHOW DATABASES; USE DB;CREATE DATABASE DB创建数据库SHOW DATABASES确认它存在USE DB把当前会话切到 DB 库。这里有个细节数据库名和表名最好用大写或统一风格好和实验报告里的截图对上太随意的命名后面写 SQL 容易搞混。建表语句按实验要求逐步来CREATE TABLE STUDENTS( Sno char(9) PRIMARY KEY, Sname char(10) NOT NULL, Sex char(2), Birthday DATE, Speciality char(20), Dno char(4) ); CREATE TABLE COURSES( Cno char(5) PRIMARY KEY, Cname char(20) NOT NULL, Period int, Credit int ); CREATE TABLE SC( Sno char(9), Cno char(5), Grade int, PRIMARY KEY (Sno, Cno) );char定长字符串实验数据里学号、课程号长度固定用char比varchar省空间、也符合教材惯例PRIMARY KEY定义主键SC 表用(Sno, Cno)联合主键确保一个学生一门课只出现一次这是关系模型里实体完整性的基本要求。SC 表建完后可以顺手加外键把学生和课程关联起来ALTER TABLE SC ADD FOREIGN KEY (Sno) REFERENCES STUDENTS(Sno); ALTER TABLE SC ADD FOREIGN KEY (Cno) REFERENCES COURSES(Cno);插入实验数据的语句就不展开了注意日期格式要用 YYYY-MM-DD教材里偶尔会写成1999_12_16这种下划线格式GreatSQL 8.0 严格模式下会直接报错写成1999-12-16就对了。5.2 索引的创建与删除实验二最后一个任务是索引CREATE INDEX Student_Dept ON STUDENTS(Dno); CREATE UNIQUE INDEX Course_Cno ON COURSES(Cno); DROP INDEX Course_Cno ON COURSES;CREATE INDEX在Dno列上建普通索引加速按系别查询UNIQUE INDEX建唯一索引保证课程号不重复。删除索引用DROP INDEX 索引名 ON 表名注意不是ALTER TABLE ... DROP INDEX两种写法在 GreatSQL 里都支持但实验报告里写哪种就要保持哪种免得截图和文字对不上。5.3 交互式 SQL查询、更新与视图实验三是要在 GreatSQL 命令行里完成教材那一堆查询实例。最常用的是这几类-- 不带 WHERE 的查询 SELECT * FROM Courses; -- 带 WHERE 的查询 SELECT Tname, Sex FROM Teachers WHERE Title 讲师; -- 带 DISTINCT 去重 SELECT DISTINCT Sno FROM SC WHERE Grade 60; -- 范围查询 SELECT Sname, Speciality FROM students WHERE YEAR(Birthday) BETWEEN 1997 AND 1999;SELECT *查全表WHERE过滤行DISTINCT去重BETWEEN ... AND ...是闭区间查询。YEAR(Birthday)从日期里取出年份再比较这是 MySQL 系的标准函数GreatSQL 完全兼容。视图的创建在实验里也会用到实验一要求看视图相关的系统信息实际验证时可以自己建一个CREATE VIEW v_student_info AS SELECT Sno, Sname, Speciality FROM STUDENTS WHERE Dno CS;CREATE VIEW把查询结果存成虚表以后SELECT * FROM v_student_info就能直接拿结果。视图不占物理存储它的数据来自基础表基础表数据变了视图结果也跟着变这是实验报告里需要写明白的概念点。存储过程和触发器在实验里更多是查询系统表验证存在不要求真的写复杂的业务逻辑。查看系统中已定义的存储过程和触发器SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_TYPE PROCEDURE; SELECT * FROM information_schema.TRIGGERS;这两个查询走系统库information_schema一个是拿所有存储过程的元数据一个是拿触发器定义实验报告里截图取证都靠它们。6. 装完怎么验证跑通从启动服务到第一条完整查询服务装好、命令也跑通后最后要有一套能证明环境可用的验证流程。我每次装完 GreatSQL 都强制自己走全套不只systemctl status看一眼就完事。第一步确认服务状态。systemctl status greatsql输出里Active: active (running)是硬指标。如果这里不是 running后面全白搭。第二步确认端口在听。ss -lntp | grep 3306有LISTEN状态的输出就是好的。第三步数据库登录测试。mysql -uroot -p能进到mysql提示符说明客户端到服务端整条链路都通。第四步创建一个测试库和表做一次完整的插入和查询。CREATE DATABASE testdb; USE testdb; CREATE TABLE t1(id INT, name VARCHAR(20)); INSERT INTO t1 VALUES(1, hello), (2, world); SELECT * FROM t1;这里的CREATE DATABASE、CREATE TABLE、INSERT、SELECT四条语句覆盖了 DDL、DML、DQL 三类操作每条都返回正常结果实验二、实验三里那些建表查询操作就都能跑通。第五步中文乱码检查。INSERT INTO t1 VALUES(3, 中文测试); SELECT * FROM t1 WHERE id 3;如果name列显示的是???或者乱码检查 my.cnf 里character-set-server是否为utf8mb4改完配置文件要重启服务才生效。这是实验报告里最容易忽略的一环——建表插中文没问题截图却一片问号复查时才发现字符集没配。第六步重启验证。systemctl restart greatsql systemctl status greatsql重启后服务能自己回来说明 systemd 配置没写坏。做完这一套虚拟机随便重启数据库都能自己拉起后续九个实验想跑哪段跑哪段。从那以后我每次搭建数据库环境装完都强制自己跑一遍这六步确认systemctl status、ss -lntp、登录、建表、插中文、重启六项全部通过才算真正交付。花不了五分钟却能省掉之后每次实验课前三十分钟的排障时间。这是个装了无数次环境养成的习惯希望也能帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站