0

0

mysql源码编译安装环境准备与依赖说明

P粉602998670

P粉602998670

发布时间:2026-01-23 09:40:03

|

800人浏览过

|

来源于php中文网

原创

需安装gcc/g++≥9.3、cmake≥3.21、make、openssl-devel(或libssl-dev)、ncurses-devel、zlib-devel、perl≥5.14、bison≥3.0、flex≥2.6.0等系统依赖。

mysql源码编译安装环境准备与依赖说明

需要哪些系统级依赖才能顺利编译 MySQL 源码

MySQL 8.0+ 源码编译对系统环境要求较严格,缺一个关键依赖就卡在 cmake 阶段或链接失败。CentOS/RHEL 7/8、Ubuntu 20.04+ 是主流支持平台,但默认系统几乎都不满足条件。

必须安装的底层工具链和库:

  • gccg++(建议 ≥ 9.3,MySQL 8.0.33+ 明确要求 GCC 9+)
  • cmake(≥ 3.21,旧版 cmake 会报 CMAKE_CXX_STANDARD not supported
  • make(或 ninja ,但 MySQL 官方构建脚本默认走 make)
  • openssl-devel(RHEL/CentOS)或 libssl-dev(Debian/Ubuntu),否则 SSL library not found
  • ncurses-devel(终端交互组件,缺失导致 libtinfo 链接错误)
  • zlib-devel(压缩支持,影响 myisampack 等工具编译)
  • perl(≥ 5.14,用于生成部分头文件和测试脚本)

特别注意:bison 必须 ≥ 3.0(语法解析器,低于此版本在 sql/sql_yacc.cc 编译时报错),flex ≥ 2.6.0;二者常被忽略,但直接导致 make 中途退出。

cmake 配置时最关键的几个选项不能漏

MySQL 不再支持 ./configure,所有定制靠 cmake 参数控制。漏掉某个开关,可能编译出不含 InnoDB、无 SSL、甚至无法启动的二进制。

最小可行配置示例(假设源码在 /path/to/mysql-server,安装到 /usr/local/mysql):

cd /path/to/mysql-server
mkdir build && cd build
cmake .. \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DENABLED_LOCAL_INFILE=1 \
  -DMYSQL_TCP_PORT=3306 \
  -DWITH_SYSTEMD=OFF

说明:

Asksia
Asksia

Asksia AI - 最好的AI老师,可靠的作业助手

下载
  • -DWITH_SSL=system:强制用系统 OpenSSL(比内置 yaSSL 兼容性好,且避免证书验证异常)
  • -DWITH_INNOBASE_STORAGE_ENGINE=1:InnoDB 不再默认启用,不加这句编译完 mysqld 启动会报 Unknown storage engine 'InnoDB'
  • -DWITH_SYSTEMD=OFF:除非你明确要 systemd 集成,否则关掉,避免生成 mysql@.service 冲突已有部署
  • -DENABLED_LOCAL_INFILE=1:控制 LOAD DATA LOCAL INFILE,不设则默认禁用(安全策略变化)

常见误配:-DWITH_SSL=bundled 在某些 OpenSSL 3.x 系统上会导致 TLS 握手失败;-DWITH_ZLIB=bundled 可能引发压缩函数符号冲突。

编译过程容易卡住的三个典型现象及对策

不是编译慢,而是卡在特定环节——多数是资源或路径问题,不是代码缺陷。

  • 卡在 [ 12%] Building CXX object libbinlogevents/CMakeFiles/binlogevents.dir/src/buffer.cpp.o:通常是内存不足(MySQL 编译峰值内存 ≥ 4GB),关闭其他进程,或加 -j$(nproc) 控制并发数(如 make -j2
  • make install 报错 Permission denied: '/usr/local/mysql':别用 sudo make install,先 sudo mkdir -p /usr/local/mysql && sudo chown $USER:$USER /usr/local/mysql,再普通用户执行
  • 编译成功但 mysqld --initialize 失败,提示 Can't find error-message file:说明 cmake 时没指定 -DINSTALL_MYSQLSHAREDIR=share,或 make installshare/english/errmsg.sys 路径不对;检查 /usr/local/mysql/share/ 下是否存在 english/ 子目录

编译后首次初始化与权限目录的硬性要求

MySQL 8.0+ 的 mysqld --initialize 对数据目录权限极其敏感,不是“建个空目录就能跑”。

必须满足:

  • 数据目录(如 /usr/local/mysql/data)必须为空,且属主为运行 mysqld 的用户(非 root)
  • 若用普通用户初始化,需提前 chown -R mysql:mysql /usr/local/mysql/data(假设用户为 mysql
  • --initialize 会生成临时 root 密码,输出在 error log(默认 hostname.err),不在终端显示;务必查日志,别等它静默失败
  • 若要用 --initialize-insecure(无密码),必须显式加 --user=mysql,否则因权限不足写入失败

初始化完成后,mysqld 仍可能拒绝启动,常见原因是 /etc/my.cnf/usr/local/mysql/my.cnf 中指定了不存在的 socket 路径或 pid-file 目录不可写——这些路径必须手工创建并授权。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

685

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

323

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

348

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1117

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

359

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

717

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

577

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

419

2024.04.29

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.9万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 805人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号