1 概述
本文章主要讲述了如何从源码编译安装MySQL 8.0.20
,首先会介绍一些编译安装的相关知识,然后开始编译安装。
2 源码编译安装的相关知识
2.1 make
与configure
make
是一个编译的命令,会在当前的目录下寻找Makefile
这个文件,Makefile
文件记录了源代码如何编译的详细信息。而configure
是由软件开发商编写的一个检测程序检测用户的开发环境,检测完毕后生成Makefile
文件。通常,configure
会检测如下内容:
- 是否具有合适的编译器
- 是否具有所需函数库以及其他依赖
- 是否兼容本系统
- 是否存在内核头文件
2.2 Tarball
文件
Tarball
文件其实就是将源代码用tar
打包后压缩的文件。通常使用gzip
进行压缩,一般扩展名为.tar.gz
或.tgz
,不过由于bzip2
以及xz
等技术压缩效果比gzip
好,因此文件名也会变成扩展名也会变成.tar.bz2
或.tar.xz
之类的。通常一个Tarball
文件有:
- 源码
- 检测文件(configure/config)
- 说明(README/INSTALL)
2.3 源码编译安装相关组件
2.3.1 编译器
需要有编译器才能进行编译操作,通常使用的是GCC
。
2.3.2 make
+autoconfig
以Tarball
形式发布的软件,为了简化编译流程,通常需要make
来根据目标文件文件的依赖性进行编译,但是由于make
需要Makefile
,因此需要autoconfig
生成Makefile
。
2.3.3 函数库
需要内核提供的库以及相关的include
文件。
2.4 静态库与动态库
函数库分为动态库与静态库两种类型,绝大部分放在/lib
与/lib64
中。
2.4.1 静态库
扩展名为.a
,编译时会直接整合到执行程序中,所以利用静态库生成的文件会比较大一些,编译后的可执行文件可以直接运行,无需依赖外部函数库。另外升级难度较大,因为是直接整合进程序中,升级了静态库的话需要重新编译。
2.4.2 动态库
扩展名为.so
,在编译时不像静态库一样,动态库在程序中只有一个指针,当可执行程序需要用到函数库的功能时,才会读取函数库来使用,生成的可执行文件会比较小一点,但是不能独立执行编译出来的程序。另外升级比较方便,不需要重新编译,因为执行文件会直接指向新的函数库文件。
2.5 编译安装的一般步骤
- (1)获取源码:一般使用
wget
/curl
/浏览器下载。 - (2)查看帮助文件:解压后查看INSTALL或README等文件相关内容
- (3)安装依赖:根据官网文档或上一步中得到的信息安装依赖
- (4)生成
Makefile
:一般使用configure
/config
进行配置,检测操作环境,指定安装位置,开启/关闭对应的功能,指定相关库位置等,确定依赖关系等,一般需要使用选项--help
获取选项帮助,指定对应选项后配置并生成Makefile
- (5)编译:实际编译步骤,一个简单的
make
命令,实际包含了头文件预编译,预处理,编译与连接步骤 - (6)安装:
make install
,这一步实际进行安装与操作系统连接两个步骤
注意,以上步骤都是有顺序的,而且前一个步骤执行失败则后一个步骤也不能执行,也就是说需要前一个步骤执行成功才能进行下一步的操作。完成以上六步就能编译安装了,一般需要进行一些后续处理,比如,添加可执行文件路径到$PATH
,添加头文件与库文件到/usr/include
与/etc/ld.so.conf.d
中,添加联机帮助文件到/etc/man_db.conf
中。
3 编译安装
3.1 安装依赖
MySQL
所需依赖如下:
cmake
make
(推荐3.75以上)- 编译器(
GCC5.3+
/Clang4.0+
/XCode9+
/Developer Studio12.6+
/Visual Studio2017
) SSL
库(默认使用系统的OpenSSL
)Boost C++
库,需要用来构建但不需要使用,无需安装,源码即可ncurses
库bison2.1+
git
3.2 包管理器安装
笔者的Debian
系,直接apt
:
sudo apt-get install -y bison git hostname libncurses-dev libssl-dev make openssl pkg-config doxygen cmake m