首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
银河麒麟V10部署GreatSQL:二进制包安装全流程与排障指南
📅 2026/10/21 15:23:46
✍️ 爱科研究院
👁 阅读 3,247
KylinV10装GreatSQL这几年国产化项目里越来越常见。我最近刚好在一套银河麒麟V10服务器上部署了一次业务要求把现有数据库切换到GreatSQL。因为原系统是MySQL生态迁移成本低而且GreatSQL在MySQL 8.0的基础上做了不少优化尤其在并行复制和MGR组复制方面更适合国产化场景。安装方式我直接选了二进制包没有用源码编译也没有用RPM。源码编译在Kylin上依赖链时容易出问题RPM则往往跟系统的包管理版本绑定不够灵活。二进制包解压就能用路径自己可控正好适合这类定制化部署。这次实测下来整体流程不复杂但中间有几个坑比较冷门比如依赖库缺失、SELinux上下文、systemd服务启动时的目录权限等。这篇就把从环境确认、依赖安装、目录初始化、服务配置到常见问题排查的完整过程整理出来给后面要上手的人一个参考。1. 安装方式选型与KylinV10环境确认1.1 三种安装方式对比在Linux上装MySQL系数据库常见无非三种系统包管理器安装、源码编译、二进制包解压。RPM/DNF方式安装最省事但目录跟随发行版约束想调整数据目录或配置路径时比较拧巴源码编译可以深度定制但耗时长而且对编译器、CMake版本有要求在KylinV10这类系统上万一缺某个依赖排查起来非常痛苦。二进制包是我在这种场景下的优先选择。它本质上是官方或发行版预先编译好的可执行文件集合自带mysqld、mysql、mysqladmin等工具解压后经过简单配置就能跑起来。好处有三个目录结构完全可控方便做数据目录与程序目录分离升级时直接替换整个目录回滚也容易不受系统包管理仓库版本限制想用哪个版本就用哪个版本。我这次用的GreatSQL二进制包版本是8.0.x系列压缩包大概几百MB里面自带lib目录下所需的运行库。它针对glibc有版本要求所以安装前先确认系统环境。1.2 检查系统版本与内核先确认系统是不是KylinV10以及CPU架构。命令很简单cat /etc/os-release uname -m我这边输出是Kylin Linux V10架构x86_64。官方二进制包一般提供x86_64和aarch64两种确认架构后别下载错包。接着看内核版本和glibc版本因为二进制包编译时依赖特定glibc版本太低会直接报version GLIBC_2.XX not founduname -r ldd --version | head -n1KylinV10基于OpenEuler或CentOS的技术路线演进glibc版本通常比较新一般都能满足要求。如果后面启动时报GLIBC缺失那就需要检查是不是下载成了其他发行版编译的包。依赖库方面MySQL系数据库需要libaio、numactl-libs这些。先查一下rpm -qa | grep libaio rpm -qa | grep numactl缺了就用dnf install -y libaio numactl-libs补上。这个在KylinV10上直接装即可不要跳过我就遇到过少装libaio导致mysqld启动后立刻退出日志里只有error while loading shared libraries之类的报错。2. 二进制包解压部署与运行目录规划2.1 获取安装包并校验完整性从GreatSQL官方或镜像站下载二进制包然后一定要做校验。我习惯先用sha256sum对比官方提供的校验值防止下载损坏或被篡改sha256sum greatsql-8.0.32-25-linux-glibc2.17-x86_64.tar.xz官方页面会给一个sha256值两边一致再解压。这一步别偷懒我的经验是至少出现过一次下载文件损坏解压能成功但启动时段错误。解压到规划好的目录。我习惯把程序目录放在/opt下然后做一个软链这样以后升级可以直接替换软链指向路径不用变tar -xf greatsql-8.0.32-25-linux-glibc2.17-x86_64.tar.xz -C /opt mv /opt/greatsql-8.0.32-25-linux-glibc2.17-x86_64 /opt/greatsql这里有个细节官方压缩包解压后的目录名很长重命名成简短的/opt/greatsql后续配置路径清爽很多。如果目录名带版本号将来版本升级还要改配置不划算。2.2 创建专用用户与数据目录数据库运行不能直接使用root账号这是安全底线。创建专用用户并规划数据目录groupadd mysql useradd -r -g mysql -s /bin/false mysql mkdir -p /data/mysql/data mkdir -p /data/mysql/logs chown -R mysql:mysql /data/mysql数据目录单独放一块盘不要和系统盘混在一起。这是我在生产环境被教育过的事系统盘空间一旦被日志占满整个服务器都可能卡死。数据盘挂载点可能是/data也可能是根据业务规划的其他路径但一定要单独分区别用根目录。程序目录和数据目录分离之后还需要给/opt/greatsql设置权限chown -R root:root /opt/greatsql程序目录归root所有普通用户无写权限防止启动用户篡改二进制文件。但数据目录、日志目录归mysql用户。2.3 配置环境变量与基础脚本GreatSQL二进制包里自带bin和support-files目录。我通常把/opt/greatsql/bin加入PATH方便直接执行mysql命令echo export PATH/opt/greatsql/bin:$PATH /etc/profile.d/greatsql.sh source /etc/profile.d/greatsql.shsupport-files里有mysql.server脚本可以用来启停服务。不过我更推荐后面用systemd管理后面会细说。在这之前先检查一下mysqld的版本mysqld --version能正常输出版本号说明二进制文件在当前系统上可以运行依赖问题基本解决。如果这里报libaio缺失或者GLIBC错误趁早补依赖不要等到初始化再排错。3. 配置文件编写与数据目录初始化3.1 关键配置说明GreatSQL的配置文件默认路径是/etc/my.cnf。对于二进制包官方会使用编译时的默认路径所以自己写一个/etc/my.cnf即可。我的基础配置如下[mysqld] user mysql basedir /opt/greatsql datadir /data/mysql/data socket /data/mysql/mysql.sock pid-file /data/mysql/mysql.pid log-error /data/mysql/logs/error.log port 3306 server-id 1 character-set-server utf8mb4 collation-server utf8mb4_0900_ai_ci # 连接与并发 max_connections 300 back_log 128 # InnoDB innodb_buffer_pool_size 2G innodb_log_file_size 512M innodb_flush_log_at_trx_commit 2 sync_binlog 1 # binlog log-bin /data/mysql/logs/binlog binlog_format ROW max_binlog_size 256M expire_logs_days 15解释几个需要特别注意的点socket放在datadir下不要放到/tmp。有些场景/tmp有清理策略socket文件没了客户端就连不上到时候排查很绕。innodb_buffer_pool_size一般为物理内存的60%-70%我这里机器内存在8G左右所以给2G可以根据实际调整。innodb_flush_log_at_trx_commit 2配合sync_binlog 1是常见组合兼顾性能与安全如果对数据安全要求极高可以改成innodb_flush_log_at_trx_commit 1但性能会降低。expire_logs_days在MySQL 8.0中已标记为废弃应该使用binlog_expire_logs_seconds但GreatSQL的8.0.32版本仍兼容旧参数我习惯用binlog_expire_logs_seconds 129600015天。配置文件写好后可以用mysqld --validate-config校验一下/opt/greatsql/bin/mysqld --defaults-file/etc/my.cnf --validate-config这个命令只检查配置语法不启动服务。有错误会直接输出省得初始化时才发现问题。3.2 初始化数据目录初始化方式有两种mysqld --initialize和mysqld --initialize-insecure。前者会生成一个随机临时密码在error log里后者不生成密码root账号是空密码。我推荐用--initialize-insecure因为初始化后可以直接登录再设密码不用去日志里翻临时密码。命令如下/opt/greatsql/bin/mysqld --defaults-file/etc/my.cnf --initialize-insecure --usermysql执行完检查error logtail -n 50 /data/mysql/logs/error.log正常情况下能看到类似[Note] Execution of init_connect_server_authentication completed之类的提示没有ERROR。注意初始化只能执行一次如果目录里已经有数据再执行会报错Data dictionary initialization failed所以初始化前确保数据目录是空的。3.3 配置systemd服务用systemd管理比直接跑mysqld_safe更符合现代运维方式能查看状态、设置开机自启、崩溃自动拉起。在/etc/systemd/system下创建greatsql.service[Unit] DescriptionGreatSQL Server Afternetwork.target [Service] Usermysql Groupmysql Typesimple ExecStart/opt/greatsql/bin/mysqld --defaults-file/etc/my.cnf LimitNOFILE65535 Restarton-failure RestartSec5s TimeoutSec300 [Install] WantedBymulti-user.target这里注意Typesimple不要写成Typeforking。mysqld_safe是forking风格但直接执行mysqld就是simplePID由systemd跟踪。重启策略用on-failure不要用always否则遇到配置错误反复重启反而麻烦。然后加载并启动systemctl daemon-reload systemctl start greatsql systemctl status greatsql启动后检查进程ps -ef | grep mysqld端口监听确认ss -lnt | grep 3306接着设置开机自启systemctl enable greatsql到这一步数据库基本跑起来了。4. 安全配置与远程访问设置4.1 root账号初始化与安全加固初始化时选了--initialize-insecureroot目前是空密码必须设置强密码。进入数据库mysql -uroot -S /data/mysql/mysql.sock执行ALTER USER rootlocalhost IDENTIFIED BY 你的强密码; FLUSH PRIVILEGES;注意MySQL 8.0默认还在mysql.user表里保留了空密码账号必须处理SELECT user, host FROM mysql.user;如果有多余的匿名账号删掉DROP USER IF EXISTS localhost; DROP USER IF EXISTS root127.0.0.1;只保留rootlocalhost和必要的账号即可。这里有个坑rootlocalhost只允许本机通过socket连接如果你还想本机用TCP连可以创建root127.0.0.1。不过更稳妥的做法是创建指定业务的专用账号而不是开放root远程登录。4.2 创建业务账号与授权给业务系统建一个最小权限账号是生产环境的基本礼貌。比如CREATE USER app_user10.0.0.% IDENTIFIED BY App_Password#123; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, REFERENCES ON business_db.* TO app_user10.0.0.%; FLUSH PRIVILEGES;授予权限要按需给不要动不动就ALL PRIVILEGES。遇到过开发同学拿到的账号有超级权限误删整表之后还在binlog里找不到因为连DROP都被允许了。最小权限原则既能防止误操作也便于事后审计。4.3 防火墙端口放行KylinV10默认可能启用了firewalld。远程连不上多半是防火墙挡了3306端口。先查看systemctl status firewalld如果启用状态放行端口firewall-cmd --permanent --add-port3306/tcp firewall-cmd --reload严谨一点的话最好限定来源IP段而不是对全网放开firewall-cmd --permanent --add-rich-rulerule familyipv4 source address10.0.0.0/8 port protocoltcp port3306 accept firewall-cmd --reload如果公司内部有堡垒机或安全组防火墙不一定需要开但本地firewalld还是查一下这是最容易踩的坑。曾经有个部署案例数据库启动正常端口也在监听但业务端就是连不上折腾半天才发现是firewalld默认zone阻止了宿主机外部访问放行后立好。4.4 SELinux影响说明KylinV10默认SELinux可能是enforcing状态。如果mysqld进程绑定端口被拒绝或者读写数据目录被拒绝即便文件权限正确也可能出问题。可以先查看SELinux状态getenforce如果返回Enforcing再看mysqld进程是否被限制。比较省事的做法是直接对MySQL相关目录设置正确上下文semanage fcontext -a -t mysqld_db_t /data/mysql(/.*)? restorecon -Rv /data/mysqlrestorecon后在ls -Z里能看到文件上下文变成mysqld_db_t。这样SELinux就不会拦程序读写数据目录了。另一个方案是直接设置SELinux布尔值比如setsebool -P mysqld_connect_all 1这类布尔值需要根据具体策略调整。如果实在搞不定可以临时setenforce 0排查但生产环境不建议关闭SELinux保持默认开启更重要。我在项目中遇到过SELinux启用时mysqld无法创建socket文件确认权限无误一查上下文是默认的var_t改成mysqld_var_run_t后重启即可。5. 常见故障与排查实录5.1 启动失败找不到共享库启动时systemctl status提示进程退出先看日志journalctl -u greatsql -n 50如果出现error while loading shared libraries: libaio.so.1: cannot open shared object file说明依赖库缺失。安装即可dnf install -y libaio如果装完之后还是提示找不到可能是64位系统下库路径问题可以用ldconfig刷新缓存或者把/usr/lib64加入/etc/ld.so.conf。也有一种情况下载的GreatSQL二进制包是aarch64的但系统是x86_64也会报这类错误所以下载前一定要确认架构。5.2 初始化时报目录不可写初始化时如果出现Cant create/write to file /data/mysql/data/xxx优先检查目录属主ls -ld /data/mysql/data正常应该是mysql:mysql。如果属主是root就chown -R mysql:mysql /data/mysql。还有一种隐蔽情况数据目录所在分区上加了nosuid之类的挂载选项虽然不常见但KylinV10部分环境下/data挂载参数可能限制文件创建。可以用touch /data/mysql/testfile实测一下。另外一个容易忽略的是/etc/my.cnf里配置的socket、pid-file、log-error路径。如果这些路径的父目录不存在mysqld也会初始化失败。我习惯先创建好日志目录再启动。5.3 服务启动后端口不监听启动成功后ss -lnt看不到3306但进程还在。这种情况多半是配置了bind-address比如默认bind-address127.0.0.1只监听回环地址。检查配置grep bind-address /etc/my.cnf如果是想允许远程访问设置bind-address 0.0.0.0或者指定业务网卡的IP。这里提醒一下bind-address0.0.0.0表示监听所有网卡配合防火墙限制来源IP更安全。另一个可能是validate_password插件导致初始化时创建密码策略不符那不会导致端口不监听。端口不监听还是集中在网络配置。5.4 客户端连接时报Access denied用mysql -h 服务器IP -P 3306 -u账号 -p连接时报Access denied for user xxxx分几种情况账号确实不存在需要在数据库里创建并授权。host匹配问题MySQL按user表中的host精确匹配比如创建的是app_user10.0.0.%但客户端IP是192.168.1.10那就匹配不上会拒绝连接。核查客户端实际IP然后创建对应host。root默认只允许localhost所以不要用root远程连接。很多初学者习惯直接用root在配置里改成remote root这是不推荐的。5.5 数据目录损坏恢复思路数据目录有时因为掉电、磁盘异常导致InnoDB文件损坏启动日志里能看到Database page corruption或者InnoDB: Corruption of a page。这种情况先别着急删数据尝试备份数据目录然后从近期全量备份恢复。如果配置了主从复制也可以从从库提升。在没有备份的情况下可以尝试innodb_force_recovery模式启动配置[mysqld] innodb_force_recovery 1从1到6逐级尝试级别越高越激进启动后尽快把数据导出来然后重建实例。注意用了innodb_force_recovery后只能读不能正常写是救急手段不是日常配置。5.6 常见问题速查表现象可能原因快速处理启动后进程消失libaio缺失、配置路径错误journalctl查日志补依赖、修正路径初始化失败数据目录非空、目录权限清空目录、chown mysql远程连接超时防火墙拦截、服务未监听firewall-cmd放行端口、检查bind-addressAccess deniedhost不匹配、账号权限核查mysql.user调整账号host或授权MySQL CPU高慢查询、全表扫描开慢查询日志、EXPLAIN分析SQL磁盘占用高binlog积压确认binlog过期时间清理历史日志6. 一点个人经验补充最后分享几个部署之外的小心得都是实际项目中总结出来的。第一个是初始化之前一定要先确认磁盘空间。df -h看数据盘剩余空间如果日志盘和数据盘独立那日志文件大小也要提前规划。我之前遇到过一次数据盘只有20G结果加载全量业务数据时直接撑满数据库进入只读模式业务全面告警。所以部署前预留30%以上空余空间是底线。第二个是建议把mysql和mysqldump客户端的配置文件也维护好。比如在/etc/my.cnf里增加client配置段[client] socket /data/mysql/mysql.sock这样本机执行mysql命令就不用每次指定socket也更不容易搞混。第三个是关于升级。GreatSQL版本更新较快二进制包的升级流程其实就是新包解压、停服务、替换软链、启动。替换前停服务是必须的同时备份老版本目录不要图省事直接覆盖。我在演示环境里试过直接覆盖结果新旧数据字典不兼容启动报错最后只能回滚。如果版本跨度大比如8.0.25升到8.0.32建议先跑mysqld --all-databases全量备份再走测试库升级演练。第三个其实多说一点GreatSQL在MGR组复制方向上做了很多优化如果你准备搭建高可用集群建议直接使用GreatSQL官方推荐的mgr相关配置这些在官方文档里有详细的参数说明。二进制包自带的数据字典兼容MySQL 8.0从MySQL原版迁移过来基本无感但要注意版本号对应比如GreatSQL 8.0.32对应MySQL 8.0.32逻辑复制等功能可以平滑使用。如果只是单机部署看到本文的位置基本已经够用了。KylinV10上跑GreatSQL并不神秘跟传统Linux装MySQL系数据库思路一致注意依赖、权限、SELinux和systemd配置这些细节不贪快按步骤来基本一次就能通过。后面如果有高可用、主从复制相关的部署经验我再单独写一篇。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/21 15:23:46
网络层设备是误区?IP转发本质在芯片与协议栈
2026/10/21 15:23:46
Linux下MySQL自动备份实战:脚本设计、定时任务与排错指南
2026/10/21 15:18:45
知识工作插件实战指南:从选型到配置,打造高效工作流
2026/10/21 20:49:06
坚果云操作审计完全指南:日志审计、文件删除通知与行为追溯
2026/10/21 20:49:06
手术显微镜研发08:摄像、ISP与图像质量,建立从物面到屏幕的指标链
2026/10/21 20:49:06
面试官:Agent Skill 和 MCP 有啥本质区别?
2026/10/21 20:49:06
AI 相关的学习网站,不要点
2026/10/21 20:49:06
一笔款,打给了假供应商
2026/10/21 20:44:05
缠魂丝落到 ABAP 里,关键不是把订单锁住,而是让风险状态持续生效
2026/10/21 0:01:44
ClickHouse实战:从列式存储到亿级数据秒级查询
2026/10/21 0:01:44
高效筛选arXiv机器学习论文:四步法实战指南
2026/10/21 0:01:44
Python爬取百度迁徙数据:接口签名、反爬与SQLite存储实战
2026/10/21 19:05:16
OpenResearch实战:Claude Code、Codex、OpenCode、Cursor 工作流搭建与故障排查
2026/10/21 14:47:26
知识管理核弹:用Obsidian构建第二大脑的工程化方案(TaoToken 统一 Key 接入版)
2026/10/21 19:05:04
金融AI落地指南:从调研报告到技术选型与工程实践
2026/10/20 2:24:03
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/20 2:23:57
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/21 19:01:08
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)