CentOS 7 源码编译安装MySQL 8.0

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参考文章:

三、编译安装

解压:
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有帮助。

发表评论