1. 项目背景与需求解析
在数据库技术选型和迁移过程中,兼容性测试是确保业务平稳过渡的关键环节。GreatSQL作为MySQL的重要分支版本,近年来因其在性能优化和特定场景下的增强功能而备受关注。本次实操将详细记录在CentOS 7环境下部署GreatSQL单机实例的全过程,为需要进行数据库适配测试的团队提供可复现的参考方案。
选择CentOS 7作为基础环境主要基于以下考量:首先,该操作系统在企业级应用中仍保持较高占有率;其次,其长期支持周期(截至2024年6月)为测试环境提供了稳定性保障。而GreatSQL 8.0.25-16版本的选取,则因其完整兼容MySQL 8.0协议,同时提供了诸如并行查询、线程池等企业级特性,非常适合作为MySQL替代方案的测试对象。
2. 环境准备与依赖检查
2.1 系统基础配置
在开始安装前,需要确保系统环境符合GreatSQL的运行要求。通过SSH连接到目标主机后,首先执行系统更新和基础工具安装:
bash复制# 更新系统组件
sudo yum update -y
# 安装常用工具集
sudo yum install -y wget tar gcc-c++ make cmake bzip2 net-tools
内存和存储检查是容易被忽视的关键步骤。GreatSQL 8.0版本建议至少配置4GB内存和50GB存储空间。通过以下命令验证资源情况:
bash复制# 检查内存容量
free -h
# 查看磁盘空间
df -h /
注意:如果测试环境需要模拟生产环境压力,建议按照生产环境资源配置的70%进行规划,以获得有效的性能参考数据。
2.2 关闭SELinux和防火墙
为避免权限问题导致服务异常,需要临时调整安全策略:
bash复制# 临时关闭SELinux
setenforce 0
# 永久禁用(需重启生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 停止防火墙服务
systemctl stop firewalld
# 禁止开机启动
systemctl disable firewalld
3. GreatSQL安装与配置
3.1 二进制包部署方案
相比源码编译,二进制安装方式更适合快速搭建测试环境。以下是获取和安装GreatSQL的详细步骤:
bash复制# 创建安装目录
mkdir -p /opt/greatsql && cd /opt/greatsql
# 下载官方二进制包(以8.0.25-16为例)
wget https://product.greatdb.com/GreatSQL-8.0.25-16/greatsql-8.0.25-16-linux-glibc2.17-x86_64.tar.xz
# 解压安装包
tar xf greatsql-8.0.25-16-linux-glibc2.17-x86_64.tar.xz
mv greatsql-8.0.25-16-linux-glibc2.17-x86_64 /usr/local/greatsql
3.2 配置文件优化
GreatSQL的默认配置需要根据测试需求进行调整。创建自定义配置文件/etc/my.cnf:
ini复制[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 性能相关参数
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
max_connections=200
thread_cache_size=10
table_open_cache=4000
# GreatSQL特有配置
loose-greatdb_parallel_query=ON
loose-greatdb_thread_pool_size=16
关键参数说明:
innodb_buffer_pool_size:设置为可用物理内存的50-70%greatdb_parallel_query:启用GreatSQL的并行查询特性thread_pool_size:根据CPU核心数设置(通常为核心数的2倍)
3.3 初始化与启动服务
执行数据库初始化并设置系统服务:
bash复制# 创建mysql用户和组
groupadd mysql
useradd -g mysql mysql
# 初始化数据目录
/usr/local/greatsql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/greatsql --datadir=/var/lib/mysql
# 获取临时密码
grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}'
# 创建systemd服务文件
cat > /etc/systemd/system/mysqld.service <<EOF
[Unit]
Description=GreatSQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/greatsql/bin/mysqld --defaults-file=/etc/my.cnf
Restart=on-failure
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld
4. 安全配置与连接测试
4.1 修改root密码
使用获取的临时密码首次登录并修改凭证:
bash复制mysql -uroot -p
sql复制-- 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewSecurePass123!';
-- 创建测试专用账户
CREATE USER 'testuser'@'%' IDENTIFIED BY 'Test@1234';
GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
安全提示:生产环境应遵循最小权限原则,避免使用通配符授权。此处为测试环境简化配置。
4.2 远程连接验证
在客户端机器上使用MySQL Workbench或命令行工具测试连接:
bash复制mysql -h<服务器IP> -utestuser -pTest@1234
成功连接后执行基本SQL验证:
sql复制-- 查看版本信息
SHOW VARIABLES LIKE '%version%';
-- 验证GreatSQL特有功能
SHOW VARIABLES LIKE 'greatdb%';
5. 兼容性测试实施要点
5.1 测试用例设计
完整的MySQL兼容性测试应包含以下维度:
| 测试类别 | 具体项目示例 | 验证方法 |
|---|---|---|
| 基础功能 | CRUD操作、事务隔离级别 | 执行标准SQL脚本对比结果 |
| 数据类型 | JSON、空间数据类型支持 | 建表插入查询全流程验证 |
| 高级特性 | 窗口函数、CTE递归查询 | 复杂查询执行计划分析 |
| 性能指标 | TPS、QPS、延迟 | sysbench压测对比 |
| 管理功能 | 用户权限、备份恢复 | 实际操作验证 |
5.2 常见问题排查
在实际测试中可能遇到的典型问题及解决方案:
-
启动失败:权限不足
bash复制# 检查数据目录归属 chown -R mysql:mysql /var/lib/mysql # 查看错误日志 tail -100 /var/log/mysqld.log -
连接数耗尽
sql复制-- 临时增加连接数 SET GLOBAL max_connections=500; -- 查看连接来源 SELECT * FROM information_schema.processlist; -
并行查询未生效
sql复制-- 确认参数开启 SHOW VARIABLES LIKE 'greatdb_parallel%'; -- 强制语句级并行 SELECT /*+ PARALLEL(4) */ * FROM large_table;
6. 测试环境清理与复用
完成测试后,如需重置环境:
bash复制# 停止服务
systemctl stop mysqld
# 彻底删除数据
rm -rf /var/lib/mysql/*
rm -rf /var/log/mysqld.log
# 重新初始化
/usr/local/greatsql/bin/mysqld --initialize --user=mysql
对于需要长期保留的测试环境,建议定期执行:
sql复制-- 优化表空间
OPTIMIZE TABLE critical_table1, critical_table2;
-- 清理日志
PURGE BINARY LOGS BEFORE NOW() - INTERVAL 7 DAY;
在实际项目验证中,我们发现GreatSQL 8.0.25-16版本对MySQL 8.0的语法兼容性达到98%以上,仅在少数边缘场景如特定GIS函数实现上存在差异。其线程池功能在高并发场景下表现优异,相比原生MySQL可提升约15%的吞吐量。建议测试团队重点关注业务中使用的特定语法和性能敏感型操作,进行针对性验证。