MySQL是一款开源的关系型数据库,目前最新的大版本为8.0,本文将介绍CentOS 7.2环境下,源码编译安装MySQL 8.0的过程以及遇到的问题。
环境:
- CentOS 7.2
- MySQL 8.0.18
一、下载MySQL 8.0 源码
MySQL官方社区版:https://github.com/mysql/mysql-server
Percona Server for MySQL版本:https://github.com/percona/percona-server
这里我们使用官方版本,下载8.0.18版本压缩包,自带boost库,如下:
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.0.18.tar.gz
当然也可以自己下载boost库,不使用mysql自带的boost库,如下:
wget https://dl.bintray.com/boostorg/release/1.70.0/source/boost_1_70_0.tar.gz
二、安装配置编译环境
yum install -y gcc gcc-c++ cmake3 gdb
yum install -y libaio bison zlib-devel openssl-devel patch ncurses-devel
注意:
MySQL 8.0.18 依赖cmake 3.5.1及以上版本,GCC 5.3及以上版本。
源码编译安装高版本cmake和gcc参考文章:
- CentOS 7 源码编译安装高版本 cmake
- CentOS 7 源码编译安装高版本GCC
三、编译安装
解压:
tar xf mysql-boost-8.0.18.tar.gz
cd mysql-8.0.18
设置高版本GCC环境变量:
由于高版本GCC安装在/usr/local目录下,设置cmake使用高版本GCC,如下:
export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++
配置编译选项:
cmake -DCMAKE_INSTALL_PREFIX=/data/mysql_8_0_18
-DWITH_MYISAM_STORAGE_ENGINE=1
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_EDITLINE=bundled
-DENABLED_LOCAL_INFILE=1
-DWITH_NDBCLUSTER_STORAGE_ENGINE=OFF
-DDOWNLOAD_BOOST=0
-DWITH_BOOST=/data/boost/boost_1_70_0
-DFORCE_INSOURCE_BUILD=1
-DWITH_PLUGIN_NDBCLUSTER=0
-DWITH_ARCHIVE_STORAGE_ENGINE=0
-DWITH_BLACKHOLE_STORAGE_ENGINE=0
-DWITH_FEDERATED_STORAGE_ENGINE=0
#编译安装
make
make install
编译过程中遇到很多问题,后面会详细描述,最终编译成功,如下:
[root@localhost mysql_8_0_18]# cd /data/mysql_8_0_18/bin/
[root@localhost bin]# ./mysqld --version
/data/mysql_8_0_18/bin/mysqld Ver 8.0.18 for Linux on x86_64 (Source distribution)
四、编译过程中的报错
报错一:
/lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found
解决方案:
使用高版本gcc动态库
ln -sf /usr/local/lib64/libstdc++.so.6 /lib64/libstdc++.so.6
报错二:
[ 56%] Building CXX object sql/CMakeFiles/sql_gis.dir/gis/srs/wkt_parser.cc.o
g++: fatal error: Killed signal terminated program cc1plus compilation terminated.
解决方案:
虚拟机内存1G太小了,调整到2G,不再报错。
报错三:
'SYS_gettid' was not declared in this scope
修改文件源码文件:
mysql-8.0.18/storage/innobase/buf/buf0buf.cc
在第一行,加上:
#include "sys/syscall.h"
报错四:
error: ‘os_compare_and_swap_thread_id’ was not declared
修改以下文件:
mysql-8.0.18/storage/innobase/lock/lock0lock.cc
mysql-8.0.18/storage/innobase/trx/trx0trx.cc
将"os_compare_and_swap_thread_id” 修改为 "os_compare_and_swap_lint"
五、最后
MySQL 8.0 的源码编译并不顺利,其中对cmake和gcc版本要求较高,编译过程中会遇到各种奇怪的问题。最后,希望本文对大家编译MySQL8.0有帮助。