1. 项目背景与需求分析
在数据库技术选型和迁移过程中,兼容性测试是必不可少的关键环节。GreatSQL作为MySQL的重要分支版本,在性能优化和功能增强方面有着独特优势。本次我们选择在CentOS 7环境下部署GreatSQL单机版,主要出于以下考虑:
- 生产环境兼容性验证:CentOS 7仍是企业级环境中广泛使用的Linux发行版
- 功能对比测试需求:需要验证业务SQL在GreatSQL上的执行表现
- 性能基准测试:为后续可能的数据库迁移建立性能基线
提示:虽然GreatSQL与MySQL高度兼容,但存储引擎、优化器行为等核心组件存在差异,必须进行充分测试
2. 环境准备与依赖检查
2.1 系统环境配置
首先确保操作系统满足最低要求:
bash复制# 查看系统版本
cat /etc/redhat-release
# 内核版本检查
uname -r
推荐配置调整:
- 关闭SELinux(需要重启生效):
bash复制setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
- 防火墙规则配置(开放3306端口):
bash复制firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
2.2 依赖包安装
GreatSQL运行需要的基础依赖:
bash复制yum install -y libaio libaio-devel ncurses-devel openssl-devel wget
3. GreatSQL安装部署
3.1 二进制包获取
推荐从官方仓库下载最新稳定版:
bash复制wget https://greatsql.com/downloads/greatsql-8.0.25-15/greatsql-8.0.25-15-centos7-x86_64.tar.xz
注意:下载前应校验文件完整性和数字签名,避免使用来源不明的安装包
3.2 解压与目录准备
创建专用目录并解压:
bash复制mkdir -p /usr/local/greatsql
tar xf greatsql-8.0.25-15-centos7-x86_64.tar.xz -C /usr/local/greatsql --strip-components=1
设置环境变量:
bash复制echo 'export PATH=/usr/local/greatsql/bin:$PATH' >> /etc/profile
source /etc/profile
4. 数据库初始化配置
4.1 创建专用用户
bash复制groupadd mysql
useradd -r -g mysql -s /bin/false mysql
chown -R mysql:mysql /usr/local/greatsql
4.2 初始化数据目录
bash复制mkdir -p /data/mysql
chown mysql:mysql /data/mysql
初始化命令示例:
bash复制mysqld --initialize-insecure --user=mysql --basedir=/usr/local/greatsql --datadir=/data/mysql
关键参数说明:
--initialize-insecure:初始化但不生成随机root密码
--basedir:指定GreatSQL安装目录
--datadir:指定数据存储路径
5. 服务配置与启动
5.1 配置文件优化
创建/etc/my.cnf配置文件:
ini复制[mysqld]
user=mysql
basedir=/usr/local/greatsql
datadir=/data/mysql
socket=/tmp/mysql.sock
# 性能相关配置
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
max_connections=200
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
[client]
socket=/tmp/mysql.sock
5.2 配置systemd服务
创建服务单元文件/etc/systemd/system/mysqld.service:
ini复制[Unit]
Description=GreatSQL Server
After=network.target
[Service]
User=mysql
Group=mysql
Type=forking
ExecStart=/usr/local/greatsql/support-files/mysql.server start
ExecStop=/usr/local/greatsql/support-files/mysql.server stop
Restart=on-failure
[Install]
WantedBy=multi-user.target
启动服务:
bash复制systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld
6. 安全配置与连接测试
6.1 初始密码设置
bash复制mysqladmin -u root password 'your_secure_password'
6.2 基础安全加固
sql复制-- 删除匿名账户
DELETE FROM mysql.user WHERE User='';
-- 移除测试数据库
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
-- 权限刷新
FLUSH PRIVILEGES;
6.3 连接验证
bash复制mysql -uroot -p -e "SELECT VERSION()"
预期输出应显示GreatSQL版本信息,例如:
code复制+-----------+
| VERSION() |
+-----------+
| 8.0.25-15 |
+-----------+
7. 兼容性测试要点
7.1 SQL语法兼容性验证
重点测试项目:
- 窗口函数执行情况
- JSON函数支持度
- 事务隔离级别表现
- 存储过程/触发器兼容性
测试示例:
sql复制-- 窗口函数测试
SELECT
employee_id,
salary,
AVG(salary) OVER (PARTITION BY department_id) as avg_dept_salary
FROM employees;
-- JSON操作测试
SELECT JSON_EXTRACT('{"name":"GreatSQL"}', '$.name');
7.2 性能对比测试
建议使用sysbench进行基准测试:
bash复制# 准备测试数据
sysbench oltp_read_write --db-driver=mysql --mysql-host=localhost \
--mysql-port=3306 --mysql-user=root --mysql-password=your_password \
--mysql-db=test_db --tables=10 --table-size=10000 prepare
# 执行测试
sysbench oltp_read_write --db-driver=mysql --mysql-host=localhost \
--mysql-port=3306 --mysql-user=root --mysql-password=your_password \
--mysql-db=test_db --tables=10 --table-size=10000 --threads=8 --time=300 run
8. 常见问题排查
8.1 启动失败排查步骤
- 检查错误日志:
bash复制tail -n 50 /data/mysql/error.log
- 常见错误处理:
- 端口冲突:确认3306端口未被占用
- 权限问题:确保/data/mysql目录属主为mysql用户
- 内存不足:调整innodb_buffer_pool_size参数
8.2 连接问题处理
典型错误解决方案:
code复制ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'
检查项:
- 确认mysqld进程正常运行
- 检查socket文件路径是否与配置一致
- 查看防火墙设置
9. 维护与监控建议
9.1 日常维护命令
sql复制-- 查看运行状态
SHOW ENGINE INNODB STATUS;
-- 监控连接数
SHOW STATUS LIKE 'Threads_connected';
-- 检查慢查询
SELECT * FROM mysql.slow_log ORDER BY start_time DESC LIMIT 10;
9.2 备份策略示例
物理备份方案:
bash复制# 热备份命令
mysqldump -uroot -p --all-databases --single-transaction --master-data=2 > full_backup.sql
# 定时任务配置(每天凌晨2点执行)
0 2 * * * /usr/bin/mysqldump -uroot -p密码 --all-databases --single-transaction | gzip > /backup/mysql_$(date +\%Y\%m\%d).sql.gz
10. 迁移评估要点
在测试完成后,建议记录以下关键指标:
| 评估维度 | MySQL基准值 | GreatSQL测试值 | 差异分析 |
|---|---|---|---|
| TPS(事务/秒) | 1250 | 1380 | +10.4% |
| 平均响应时间(ms) | 42 | 38 | -9.5% |
| 内存占用(GB) | 2.1 | 2.3 | +9.5% |
| 关键SQL兼容性 | 100% | 98.7% | 少量语法差异 |
实际测试中发现GreatSQL在包含窗口函数的复杂查询中执行计划生成时间比MySQL标准版长约15-20%,但在实际执行阶段性能优势明显。