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 make
其他请自行搜索。
3.2 编译安装
若不想用包管理器安装,可以使用编译安装的方式。注意请到官网获取最新的版本,此处仅示例撰写博客时所用的版本。
3.2.1 安装cmake
tar -zxvf cmake-3.17.2.tar.gz
cd cmake-3.17.2
./bootstrap --prefix=/usr/local/cmake
make clean
make -j 6 #6为CPU核数,自定义修改,若失败请使用make
make test
sudo make install
3.2.2 安装make
没有编译器的情况下无法编译安装,使用软件包安装即可,笔者的Debian
系,直接apt
:
sudo apt install make
3.2.3 安装GCC
tar -xvf gcc-9.3.0.tar.xz
cd gcc-9.3.0
./contrib/download_prerequisites
mkdir build
cd build
../configure --prefix=/usr/local/gcc -enable-checking=release -disable-multilib
make clean
make -j 6
make test
sudo make install
sudo ln -sv /usr/local/gcc/include /usr/include/gcc
#/etc/ld.so.conf.d/gcc.conf加入以下内容
/usr/local/gcc/lib
/usr/local/gcc/lib64
3.2.4 安装OpenSSL
tar -zxvf openssl-1.1.1g.tar.gz
cd openssl-1.1.1g
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl/ssl
#prefix为安装位置,默认/usr/local
#openssldir为配置文件位置,同时存放证书与密钥对
make clean
make -j 6
make test
sudo make install
sudo ln -sv /usr/local/openssl/include /usr/include/openssl
#/etc/ld.so.conf.d/openssl.conf加上以下内容
/usr/local/openssl/lib
3.2.5 下载boost
官网此处。
需要的版本为1.70.0
。目前最新的版本为1.73.0
,理论上来说更新的版本应该可以,这里下载的是1.70.0
。如果不手动下载boost库的话可以在使用cmake
生成Makefile
时设置DDOWNLOAD_BOOST
为1
进行下载。
下载后解压即可。
tar -xvf boost_1_70_0.tar.bz2
3.2.6 安装ncurses
tar -zxvf ncurses-6.2.tar.gz
cd ncurses-6.2
./configure --prefix=/usr/local/ncurses
make -j 6
sudo make install
sudo ln -sv /usr/local/ncurses/include /usr/include/ncurses
#/etc/ld.so.conf.d/ncurses.conf加入
/usr/local/ncurses/lib
3.2.7 安装bison
tar -xvf bison-3.4.tar.xz
cd bison-3.4
./configure --prefix=/usr/local/bison
make -j 6
sudo make install
#/etc/ld.so.conf.d/bison.conf加入
/usr/local/bison/lib
3.2.8 安装git
tar -xvf git-2.26.2.tar.xz
cd git-2.26.2
./configure --prefix=/usr/local/git \
--with-openssl=/usr/local/openssl \
--with-libpcre2=/usr/local/pcre2 \
--with-curl=/usr/local/curl \
--with-expat=/usr/local/expat \
--with-iconv=/usr/local/iconv \
--with-editor=/usr/bin/vim \
--with-zlib=/usr/local/zlib \
--with-tcltk=/usr/local/tcl
make all doc info
sudo make install install-doc install-html install-info
3.2.9 后续处理
修改$PATH
:
#在~/.bash_profile 或 ~/.bashrc加入
export PATH=$PATH:\
/usr/local/cmake/bin:\
/usr/local/gcc/bin:\
/usr/local/openssl/bin:\
/usr/local/bison/bin:\
/usr/local/ncurses/bin:\
/usr/local/git/bin:\
使动态库生效:
ldconfig
权限不足请加sudo
。
3.3 下载MySQL
社区版
这里不知道第一个与第二个有什么区别,因为笔者两个都试过都能编译安装成功。虽然上面写着第二个带Boost头,但是貌似没什么用。这里用的是第一个。
校验(可选):
md5sum mysql-boost-8.0.20.tar.gz
3.4 生成Makefile
sudo cmake .. \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \ #
-DENABLED_LOCAL_INFILE=ON \
-DWITH_SSL=system \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql/server \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DMYSQL_TCP_PORT=3306 \
-DDOWNLOAD_BOOST=0 \
-DWITH_BOOST=~/Desktop/boost
-
DDEFAULT_CHARSET
:指定默认字符集为utf8mb4
-
DDEFAULT_COLLATION
:排序规则,默认为utf8mb4_0900_ai_ci
,属于utf8mb4_unicode_ci
的一种。0900
指的是Unicode
校对算法版本,ai
是指口音不敏感(as
表示敏感),ci
指不区分大小写(cs
表示区分)。utf8mb4_unicode_ci
表示基于标准的的Unicode
来排序和比较,能够在各种语言之间精确排序,而utf8mb4_general_ci
遇到某些特殊的字符集时排序结果可能不一致,准确性较差,但是性能较好,比较和排序时候更快 -
DENABLED_LOCAL_INFILE
:表示能否使用load data
命令 -
DWITH_SSL
:表示使用系统的SSL
库,若不使用系统的请自定义路径 -
DCMAKE_INSTALL_PREFIX
:MySQL
安装目录 -
DMYSQL_DATADIR
:MySQL
数据目录,初始时为空 -
DMYSQL_TCP_PORT
:端口,默认3306
-
DDOWNLOAD_BOOST
:取值0
或1
,是否下载Boost
库 -
DWITH_BOOST
:若不下载Boost
库的话,是本地Boost
库的位置,若下载Boost
表示下载位置
其他更多参数请使用
sudo cmake .. -LH
查看。
3.5 编译与安装
sudo make
或
sudo make -j n
笔者试过了make -j 6
,失败,无奈换成了make
。
make
的速度和make -j
还是很大差距的。
编译好之后,建议测试一下:
make test
然后安装:
sudo make install
3.6 后续配置
3.6.1 用户组与用户
新建用户组与用户,同时修改用户数据目录权限:
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo chown mysql:mysql /usr/local/mysql/data
sudo chmod 750 /usr/local/mysql/data
数据目录根据需要修改,若后面出现不可写错误请把权限改为777
。
3.6.2 配置文件
配置文件为my.cnf
,可以放在
/etc/
/etc/mysql/
安装目录/etc/
~/
下,读取顺序从上到下。笔者安装后默认在/etc/mysql/my.cnf
,这个是全局配置,~/.my.cnf
是用户特定配置,这里直接修改/etc/mysql/my.cnf
:
[client-server]
# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
[mysqld]
port=3306
basedir=/usr/local/mysql/server
datadir=/usr/local/mysql/data
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
[client]
port=3306
default-character-set=utf8mb4
其中[mysqld]
下面是新添加的字段,数据目录自行修改。
建议字符集改为utf8mb4
,因为utf8
在MySQL
中指的是utf8mb3
,支持的utf8
编码最大字符长度为3字节,如果遇到4字节的宽字符就会插入异常。三字节的utf8
最大能编码的Unicode
字符为0xffffff
,也就是基本多文种平面,Emoji和很多不常用的汉字都不能存储。而utf8mb4
是5.5.3
之后才支持的,为了兼容性考虑应该统一使用utf8mb4
。
3.7 初始化
修改环境变量:
#.bashrc或.bash_profile加上
export PATH=$PATH:/usr/local/mysql/server/bin
使用
mysqld --initialize --user=mysql
或
mysqld --initialize-insecure --user=mysql
然后开启ssl与rsa支持(可选):
mysql_ssl_rsa_setup
最后开启服务:
mysqld_safe --user=mysql &
3.8 修改密码
使用root
登录,如果使用insecure
初始化:
mysql -u --skip-password
使用initialize
初始化:
mysql -u root -p
输入初始化出现的密码即可。
然后修改密码:
alter user root@localhost identified by 'xxx';
3.9 测试
使用自带的mysqlshow
与mysqladmin
:
mysqladmin -u root -p version
mysqlshow -u root -p
3.10 收尾工作
3.10.1 别名
alias md='mysqld -u mysql &'
这样输入md
就可以启动MySQL
服务了。
3.10.2 安装mycli
mycli
是一个MySQL
命令行客户端工具,具有自动补全和语法高亮的功能。
使用pip
安装即可:
pip install mycli
找不到pip
请安装:
sudo apt install python3-pip
然后使用mycli
进入数据库:
mycli -u root
愉快地使用补全吧!