简介本资源是郑州大学计算机与人工智能学院《数据库系统原理》课程配套的完整实验报告面向高校数据库初学者及实践教学场景聚焦DBMS系统认知、国产数据库GreatSQL部署与运维、实验过程记录与结果分析等核心能力培养。报告覆盖8个递进式实验含DBMS架构理解、SELinux/防火墙配置调优、依赖包安装、GreatSQL二进制部署、systemd服务管理、逻辑组件实操等并严格遵循课程对截图编号、图题表名、书面行文等规范要求。压缩包为单个3.69MB的docx文件内容结构完整含实验目的、环境配置命令、操作步骤详解、问题反思与性能安全讨论可直接用于课程提交或作为数据库实践参考模板。目前已有511人学习下载适合需要对标高校实验标准、掌握Linux下国产数据库落地实操的本科生与自学开发者。1. GreatSQL 8.0.32 实验环境搭建CentOS 7 上装万里数据库别被 SELinux 和防火墙“静默拦截”坑哭你是不是也经历过——所有命令都敲对了systemctl start greatsql显示 active (running)但mysql -u root -p死活连不上ss -lntp | grep 3306一片空白查日志只看到mysqld: Cant open shared library libjemalloc.so.2或更玄学的Permission denied这不是你手残是 CentOS 7 默认开启的 SELinux 和 firewalld 在后台悄悄掐断了数据库的命脉。郑州大学《数据库系统原理》实验一明确要求在 VMware CentOS 7 环境下部署万里数据库 GreatSQL 8.0.32-25而这份实验报告里埋着一个关键提示关闭 SELinux 不是偷懒而是让数据库进程能真正读写/var/lib/mysql、加载jemalloc内存库、绑定 3306 端口的必要前提。很多同学卡在“安装成功但无法连接”本质是把setenforce 0当成可选项结果服务看似启动实则被安全策略锁死在初始化阶段。本文全程基于 GreatSQL 官方二进制包GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal.tar.xz覆盖从裸机 CentOS 7 到可交互 SQL 的完整链路每一步都标注了“为什么必须这样”尤其聚焦那些不报错却让数据库变成黑匣子的隐性配置。适合正在赶郑州大学数据库实验报告、需要一份能当天跑通的部署笔记的你。2. 环境准备与依赖安装CentOS 7 基础加固与 GreatSQL 运行时依赖闭环GreatSQL 并非开箱即用的“绿色版”它对底层系统有明确的运行时契约。跳过这步直接解压启动90% 的失败源于缺失关键依赖或内核级权限限制。本节严格按实验报告原文顺序执行但每条命令背后都补全了“不装会怎样”的血泪经验。2.1 关闭 SELinux 与防火墙不是妥协是解除系统级访问枷锁实验报告明确要求执行三步setenforce 0 sed -i /^SELINUX/c\SELINUXdisabled /etc/selinux/config systemctl disable firewalld systemctl stop firewalld提示setenforce 0是临时禁用重启后失效sed命令才是永久生效的关键。务必确认/etc/selinux/config中SELINUXdisabled已写入否则 reboot 后服务又挂。为什么必须关SELinux默认策略禁止mysqld进程访问/var/lib/mysql类型mysqld_db_t和加载libjemalloc.so.2类型lib_t。即使chown mysql:mysql权限正确SELinux 仍会拦截日志中仅显示avc: denied无具体错误码。firewalldCentOS 7 默认开启且publiczone 默认拒绝所有入站连接。GreatSQL 默认监听0.0.0.0:3306若未放行端口本地mysql -h 127.0.0.1 -P 3306可连但mysql -h 虚拟机IP必然超时——这是郑州大学实验中截图失败的最常见原因。验证是否生效# 检查 SELinux 状态应为 disabled sestatus # 检查防火墙状态应为 inactive systemctl status firewalld2.2 安装核心依赖包补齐 GreatSQL 的“肌肉”与“神经”GreatSQL 8.0.32 依赖一系列底层库缺一不可。实验报告列出的yum install命令是经过验证的最小集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 高性能写入必需mysqld启动失败报undefined symbol: io_submitjemallocjemalloc-devel内存分配器GreatSQL 默认启用以提升并发性能启动时报error while loading shared libraries: libjemalloc.so.2: cannot open shared object filenumactl-develnumactl-libsNUMA 架构优化支持避免跨节点内存访问延迟在多 CPU 虚拟机中性能下降明显sysbench测试 QPS 降低 30%openssl-develSSL/TLS 加密连接支持CREATE USER ... REQUIRE SSL语句必需无法启用加密连接SHOW VARIABLES LIKE have_ssl返回DISABLEDperl-JSONMGR组复制元数据解析依赖START GROUP_REPLICATION失败报JSON parser error注意python2是 GreatSQL 8.0.32 的硬依赖用于部分管理脚本CentOS 7 默认自带但若系统曾卸载过需补回。net-tools提供ifconfig/netstat虽非运行必需但实验中排查网络问题必备。2.3 创建 mysql 系统用户与目录结构权限模型的起点GreatSQL 遵循 MySQL 生态惯例要求以非 root 用户运行。实验报告指令精准/sbin/groupadd mysql /sbin/useradd -g mysql mysql -d /dev/null -s /sbin/nologin mkdir -p /var/lib/mysql /var/log 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确保mysql用户无家目录、无法登录 shell符合最小权限原则。mkdir -p-p参数避免因父目录不存在导致创建失败。chown -R必须递归授权尤其/usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal目录下bin/、lib/、share/子目录均需mysql权限否则mysqld启动时无法读取配置文件或字符集。验证权限# 检查用户与组 id mysql # 检查关键目录权限应显示 mysql:mysql ls -ld /var/lib/mysql /usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal3. GreatSQL 8.0.32 安装与服务注册二进制部署的标准化流程GreatSQL 提供免编译的二进制包部署核心在于路径规范、服务文件编写和配置文件初始化。本节严格遵循实验报告步骤但补全了官方文档未强调的细节。3.1 下载与解压选择正确的发行版与校验机制实验报告指定下载地址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为什么选这个包glibc2.17CentOS 7 的 glibc 版本为 2.17此包为兼容性编译若误用glibc2.28对应 CentOS 8将报GLIBC_2.28 not found。minimal精简版不含调试符号和测试套件体积小、启动快适合教学实验环境。强烈建议校验下载后执行sha256sum GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal.tar.xz比对官网发布的 SHA256 值防止镜像源篡改。解压后目录结构应为/usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal/ ├── bin/ # mysqld, mysql, mysqladmin 等可执行文件 ├── lib/ # libjemalloc.so.2, libssl.so.1.1 等动态库 ├── share/ # 字符集、错误消息、SQL 初始化脚本 └── support-files/ # my.cnf 模板、systemd 服务模板3.2 编写 systemd 服务文件让 GreatSQL 成为真正的系统服务实验报告要求创建/lib/systemd/system/greatsql.service。这是 CentOS 7 管理服务的标准方式比手动nohup ./mysqld 更可靠。文件内容需严格匹配 GreatSQL 路径[Unit] DescriptionGreatSQL Server Documentationman:mysqld(8) Documentationhttps://greatdb.com/ Afternetwork.target [Service] Typesimple Usermysql Groupmysql ExecStart/usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal/bin/mysqld --defaults-file/etc/my.cnf Restarton-failure RestartSec10 TimeoutSec300 LimitNOFILE65535 LimitCOREinfinity EnvironmentLANGen_US.UTF-8 [Install] WantedBymulti-user.target参数详解ExecStart必须指定--defaults-file/etc/my.cnf否则mysqld将按默认顺序搜索配置文件/etc/my.cnf,/etc/mysql/my.cnf...易导致配置不生效。LimitNOFILE65535提高文件描述符上限避免高并发连接时Too many open files错误。EnvironmentLANGen_US.UTF-8确保字符集一致避免中文字段乱码。注册服务systemctl daemon-reload systemctl enable greatsql # 开机自启注意systemctl enable必须在daemon-reload后执行否则提示Failed to enable unit: Unit greatsql.service does not exist.3.3 初始化配置文件 /etc/my.cnf从模板到可用的最小化配置GreatSQL 未提供开箱即用的my.cnf需手动创建。实验报告未给内容此处提供经验证的最小可行配置保存为/etc/my.cnf[mysqld] # 基础设置 port 3306 socket /var/lib/mysql/mysql.sock datadir /var/lib/mysql pid-file /var/lib/mysql/mysqld.pid user mysql # 字符集 character-set-server utf8mb4 collation-server utf8mb4_unicode_ci skip-character-set-client-handshake 1 # 日志 log-error /var/log/mysqld.log slow-query-log 1 slow-query-log-file /var/log/mysqld-slow.log long_query_time 2 # InnoDB innodb_buffer_pool_size 512M innodb_log_file_size 256M innodb_flush_log_at_trx_commit 1 # GreatSQL 特性开关按需启用 # plugin-load-add group_replication.so # loose-group_replication_group_name aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa关键配置说明datadir和socket必须与chown授权的路径一致否则mysqld无法创建 socket 文件。character-set-server utf8mb4支持完整 Unicode含 emojiutf8在 MySQL/GreatSQL 中仅为 3 字节编码不兼容四字节字符。innodb_buffer_pool_size设为物理内存的 50%-70%CentOS 7 虚拟机建议 512M 起步过小导致频繁磁盘 IO。skip-character-set-client-handshake强制服务端字符集避免客户端连接时协商失败。4. 启动与初始化从空数据目录到可登录的 root 用户GreatSQL 8.0.32 的首次启动需初始化数据目录生成系统表、root 密码等。此步极易出错必须按顺序执行。4.1 手动初始化数据目录生成基础系统表GreatSQL 不像 MySQL 8.0 提供mysqld --initialize自动初始化需使用mysqld自带的--initialize-insecure模式实验环境允许# 切换到 GreatSQL 目录 cd /usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal # 手动初始化--initialize-insecure 生成空密码 root bin/mysqld --defaults-file/etc/my.cnf --initialize-insecure --usermysql # 检查初始化结果应有 ibdata1, ib_logfile0 等文件 ls -lh /var/lib/mysql/初始化后关键文件ibdata1InnoDB 共享表空间存储数据字典、undo log。ib_logfile0/ib_logfile1InnoDB 重做日志保障崩溃恢复。mysql/目录包含user、db、tables_priv等系统表定义权限。注意--initialize-insecure生成的 root 用户密码为空仅限实验环境。生产环境必须用--initialize生成随机密码记录在 error log。4.2 启动 GreatSQL 服务并验证进程执行启动命令systemctl start greatsql验证是否真正启动# 1. 检查服务状态active (running) 且无 failed systemctl status greatsql # 2. 查看进程必须有 mysqld 进程且属 mysql 用户 ps -ef | grep mysqld | grep -v grep # 3. 检查端口监听3306 应处于 LISTEN 状态 ss -ltnp | grep :3306 # 4. 检查错误日志关键首行应为 mysqld: ready for connections tail -20 /var/log/mysqld.log常见失败现象与日志线索ps无mysqld进程systemctl status显示failed→ 查/var/log/mysqld.log最后 50 行重点关注ERROR行。ss无 3306 端口 → 检查my.cnf中port是否被注释或bind-address是否设为127.0.0.1导致外部不可达。日志末尾出现Aborting→ 通常是datadir权限错误或libjemalloc.so.2加载失败。4.3 首次登录与密码设置建立安全访问通道初始化后root 用户密码为空可直接登录# 使用本地 socket 登录推荐无需网络 /usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal/bin/mysql -u root -S /var/lib/mysql/mysql.sock # 或使用 TCP 登录需确保 bind-address 配置正确 /usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal/bin/mysql -u root -h 127.0.0.1 -P 3306首次登录后立即设置密码-- 进入 MySQL 命令行后执行 ALTER USER rootlocalhost IDENTIFIED BY ZhengDa2024!; FLUSH PRIVILEGES;验证密码生效# 退出后重新登录需输入新密码 mysql -u root -p -S /var/lib/mysql/mysql.sock提示ZhengDa2024!仅为示例实际请使用符合复杂度要求的密码大小写字母数字特殊字符。5. 常见问题排查那些让郑州大学实验报告截图失败的“静默陷阱”安装过程看似顺利但实验报告要求的截图如ps -ef | grep mysqld、ss -lntp | grep mysqld失败往往源于以下“不报错但无效”的配置。这些是我在帮某高校实验室批量部署 GreatSQL 时踩过的坑整理成可复现的排查清单。5.1 现象systemctl status greatsql显示 active但ps -ef | grep mysqld无进程原因mysqld进程启动后立即崩溃退出systemd因Restarton-failure重启形成“闪退-重启”循环systemctl status仅显示最后一次启动状态。解决查看详细日志journalctl -u greatsql -n 100 -f实时跟踪关键线索日志中mysqld: Error while loading shared libraries: libjemalloc.so.2: cannot open shared object file执行ldd /usr/local/.../bin/mysqld | grep jemalloc确认libjemalloc.so.2 not found修复echo /usr/lib64 /etc/ld.so.conf.d/greatsql.conf ldconfig将 jemalloc 路径加入动态库搜索5.2 现象mysql -u root -p连接超时ss -lntp | grep 3306无输出原因my.cnf中bind-address默认为127.0.0.1仅监听本地回环虚拟机外部如宿主机无法连接或skip-networking未注释。解决编辑/etc/my.cnf在[mysqld]下添加bind-address 0.0.0.0 # skip-networking OFF # 确保此行被注释或删除重启服务systemctl restart greatsql验证ss -ltnp | grep :3306应显示0.0.0.0:33065.3 现象CREATE DATABASE DB;执行成功但ls /var/lib/mysql/无DB目录原因GreatSQL 8.0.32 默认启用innodb_file_per_tableON数据库名仅存在于数据字典物理目录需创建表后才生成。解决执行建表语句CREATE TABLE DB.test (id INT) ENGINEInnoDB;再执行ls /var/lib/mysql/DB/即可看到test.ibd文件实验报告截图技巧SHOW DATABASES;后紧接着USE DB; CREATE TABLE t1(id INT); SHOW TABLES;再截图ls /var/lib/mysql/DB/确保目录存在。5.4 现象SELECT * FROM information_schema.TRIGGERS;返回空集但实验报告图6要求有触发器原因information_schema.TRIGGERS表仅显示当前用户有权限查看的触发器新初始化的 root 用户需显式刷新权限。解决登录后执行FLUSH PRIVILEGES;或直接查询SELECT TRIGGER_NAME, EVENT_MANIPULATION, EVENT_OBJECT_TABLE FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMAmysql;系统触发器在 mysql 库5.5 现象CREATE INDEX Student_Dept ON Students (Dno);报错Unknown table Students原因实验二中CREATE TABLE STUDENTS语句未指定数据库且未执行USE DB;导致表创建在mysql系统库而非DB库。解决确认当前库SELECT DATABASE();切换库USE DB;重新建表CREATE TABLE STUDENTS(...);郑州大学实验习惯所有 DDL 语句前加USE DB;避免跨库混淆。6. 验证与实验衔接用一条 SQL 验证整个环境是否 Ready for 实验一至九装完 GreatSQL 只是起点郑州大学实验报告的核心价值在于后续九个实验的连贯性。一个可靠的验证方法不是简单mysql -V而是模拟实验一至三的真实操作流用一条复合 SQL 覆盖逻辑组件、物理组件和基础查询能力。6.1 终极验证 SQL一次执行覆盖四大实验模块将以下 SQL 保存为verify_zzu.sql在 GreatSQL 中执行-- 1. 验证数据库存在性实验一认识DBMS SELECT DBMS_VERSION AS check_item, VERSION() AS result UNION ALL -- 2. 验证逻辑组件实验一基本表/视图/触发器/存储过程/约束 SELECT TABLE_COUNT, COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMAmysql UNION ALL SELECT VIEW_COUNT, COUNT(*) FROM information_schema.VIEWS WHERE TABLE_SCHEMAmysql UNION ALL SELECT TRIGGER_COUNT, COUNT(*) FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMAmysql UNION ALL SELECT PROCEDURE_COUNT, COUNT(*) FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMAmysql AND ROUTINE_TYPEPROCEDURE UNION ALL SELECT CONSTRAINT_COUNT, COUNT(*) FROM information_schema.KEY_COLUMN_USAGE WHERE CONSTRAINT_SCHEMAmysql UNION ALL -- 3. 验证物理组件实验一数据页/存储引擎 SELECT STORAGE_ENGINE, ENGINE FROM information_schema.ENGINES WHERE SUPPORTYES LIMIT 1 UNION ALL SELECT PAGE_SIZE, innodb_page_size UNION ALL -- 4. 验证实验二三基础能力建库/建表/查询 SELECT DB_CREATE, IF(EXISTS(SELECT 1 FROM information_schema.SCHEMATA WHERE SCHEMA_NAMEZZU_TEST), SUCCESS, FAILED) UNION ALL SELECT TABLE_CREATE, IF(EXISTS(SELECT 1 FROM information_schema.TABLES WHERE TABLE_SCHEMAZZU_TEST AND TABLE_NAMEverify_test), SUCCESS, FAILED) UNION ALL SELECT QUERY_RESULT, (SELECT COUNT(*) FROM ZZU_TEST.verify_test) ;执行步骤# 创建测试库与表 mysql -u root -p -S /var/lib/mysql/mysql.sock -e CREATE DATABASE ZZU_TEST; USE ZZU_TEST; CREATE TABLE verify_test(id INT); INSERT INTO verify_test VALUES(1),(2); # 执行验证SQL mysql -u root -p -S /var/lib/mysql/mysql.sock verify_zzu.sql预期输出所有result列应为非空值尤其DB_CREATE、TABLE_CREATE显示SUCCESSQUERY_RESULT显示2。若任一为FAILED说明对应模块未就绪。6.2 实验报告截图标准化确保每张图都“可复现、可验证”郑州大学实验报告要求截图带编号与图题为避免返工我总结了一套截图前必做的检查清单截图类型必检项命令示例为何重要进程状态图图1ps输出必须含--defaults-file/etc/my.cnf参数ps -efgrep mysqld | grep -v grepTCP连接图图3ss输出必须含LISTEN且PID对应mysqldss -ltnp | grep :3306证明网络层已就绪非仅进程存活数据库文件图图4ls必须显示ibdata1、mysql/、performance_schema/目录ls -F /var/lib/mysql/证明初始化成功非空目录SQL执行图图5-7每条 SQL 后必须跟SELECT ROW_COUNT();或SHOW WARNINGS;SELECT * FROM information_schema.VIEWS; SELECT ROW_COUNT();证明语句执行成功非语法错误静默忽略我的血泪经验从那以后我每次帮学生部署 GreatSQL都会在~/.bashrc里加一行alias zzu_checkmysql -u root -p -S /var/lib/mysql/mysql.sock /tmp/verify_zzu.sql部署完第一件事就是zzu_check通过再截图。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?