运行环境为centos7,以下操作,全部使用root用户。假设所有操作都在/opt目录下执行。
一 安装cmake环境
root进入/opt目录,执行:
wget http://www.cmake.org/files/v3.7/cmake-3.7.0-rc1.tar.gz
在当前目录下载cmake-3.7.0的源码,安装编译MySQL8.x的版本,cmake3.7够用,如果需要更高版本,可以直接到cmake网站的下载页找,然后使用wget的方式下载到本地。
本地tar解压,进入该目录。
直接执行 ./bootstrap
gmake
gmake install
顺序执行即可,若执行时出现异常,检查install_manifest.txt文件,按里面的描述,删除所有对应位置的文件即可。
二 升级安装GCC环境
centos7中默认的gcc是4.9.*,编译安装MySQL8.*的版本至少需要gcc5.4以上,所以需要升级gcc。
同样在/opt目录下使用wget下载需要的gcc源码,wget https://ftp.gnu.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.bz2
tar解压并进入gcc目录,在联网的状态下执行:./contrib/download_prerequisites 下载需要的内容。
在gcc这个解压目或任意位置创建一个目录,用来存放执行是的编译文件,例如在gcc这个目录里创建一个bld目录,进入该目录执行上级目录中的configure文件:{srcdir}/configure --prefix={destdir} [其它选项]
{srcdir}为源码解压目录,{destdir}为安装的目标目录,
例如,如果想将GCC 5.4.0安装到/opt/gcc-5.4.0目录下在我的机器上,我是这样配置的:
{srcdir}/configure --prefix=/opt/gcc-5.4.0 --disable-checking --enable-languages=c,c++ --disable-multilib 将GCC安装在/opt/gcc-5.4.0目录下,不检测,支持C/C++语言,不编译32位操作系统。
make j4
make install
修改/etc/profile
增加 export PATH=/opt/gcc-5.4.0/bin:$PATH 就是--prefix的目录的bin
注意,执行完安装升级后,需要将/usr/lib64中原有的库文件替换成最新版本:
首先找到新安装的GCC的位置,例如使用源码安装到了:--prefix=/opt/gcc-5.4.0
在这个目录里查找:find / -name "libstdc++.so*"
找到最新的动态库文件:/opt/gcc-5.4.0/lib64/libstdc++.so.6.0.21
首先需要把这个libstdc++.so.6.0.21 复制到 /usr/lib64中,从/usr/lib64中可以看到当前肯定有比他版本低的文件,且有软连接指向他。
切换到/usr/lib64,查看libstdc++.so.6,可以看到当前是旧文件在指向他,删除这个软连接,rm -rf libstdc++.so.6
重新给新的so文件建立软连接即可
ln -s libstdc++.so.6.0.27 libstdc++.so.6
三 编译安装MySQL
以上环境准备好后,下载MySQL的源码版本到指定目录,例如/opt下。
解压tar包,进入该目录,同样为了避免configure时的文件和源文件混杂,新建一个临时目录,在该目录里执行configure等操作。
根据需要,使用yum安装openssl:yum install –y openssl openssl-devel ncurses ncurses-devel
同时在本地下载一个boost_1_73_0,cmake的时候指定一下,否则会报错。
然后在临时目录里执行 cmake .. boost_1_73_0。顺利的话后续就算make && make install,默认会把编译的内容安装在/usr/local/mysql 目录。
四 初始化MySQL并连接服务器
- 创建启动的cnf文件:start.cnf,此文件仅能保障最基本的启动,需要其他功能需要再编辑添加。
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/mysql_data
user=mysql
port=3306
socket=/usr/local/mysql/mysql_data/mysql.socket
log_error=/usr/local/mysql/mysql_data/mysql.log
log_bin=/usr/local/mysql/mysql_data/binlog
skip_name_resolve
skip-grant-tables
~
* 注意相关目录要有mysql用户的权限。
- 执行目录初始化:
./mysqld --defaults-file=../start.cnf --initialize --user=mysql
- 启动服务进程:
./mysqld_safe --defaults-file=../start.cnf &
- 客户端连接服务器:本地连接使用-Ssocket,不使用-h参数。
./mysql -P3306 -ugreatdb -pgreatdb -S/usr/local/mysql/mysql_data/mysql.socket