Centos6.9安装MySQL8.0

开始搭自研项目的服务器环境,先装个MySQL,之前只在测试机上玩5.5版本,现在MySQL版本已出到8.0,号称性能提升不少,准备尝尝鲜,不知后面会有多少什么莫明问题等着解决。

一.环境准备 yum install ncurses-devel -y yum install libaio -y yum install glibc-devel.i686 glibc-devel -y yum install gcc gcc-c++ -y 另外,MySQL8.0需要用gcc的版本为 4.8以上,而centos 6.9通过yum只能安装到4.4.7,所以在安装mysql8.0之前需要手动安装更高版本的gcc,我这里下载了gcc-8.1.0。

先安装gcc-8.1.0依赖包:

然后解压GCC包,进入文件夹 运行脚本,自动下载编译需要的依赖包:

./contrib/download_prerequisites

运行脚本时,在下载gmp-6.1.0.tar.bz2,报错中止。

我打开脚本,依据脚本里的网址,手动下载了gmp,并把之前下载的软件包一并手动安装:

1.解压安装gmp tar -jxf gmp-6.1.0.tar.bz2

cd gmp-6.1.0

./configure –prefix=/usr/local/gmp-6.1.0

make

make install

2.解压安装mpfr tar -jxf mpfr-3.1.4.tar.bz2

cd mpfr-3.1.4 ./configure –prefix=/usr/local/mpfr-3.1.4 –with-gmp=/usr/local/gmp-6.1.0

make

make install

3.解压安装mpc tar -zxf mpc-1.0.3.tar.gz cd mpc-1.0.3

./configure –prefix=/usr/local/mpc-1.0.3 –with-gmp=/usr/local/gmp-6.1.0 –with-mpfr=/usr/local/mpfr-3.1.4

make

make install

4.解压安装isl-0.18.tar.bz2 tar -zxf isl-0.18.tar.bz2 cd isl-0.18

./configur –prefix=/usr/local/isl-0.18

make

make install

配置库路径:

vi /etc/profile            #向/etc/profile文件末尾添加下面的语句(root权限下):

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/gmp-6.1.0/lib: /usr/local/mpfr-3.14/lib:/usr/local/mpc-1.0.3/lib:/usr/local/isl-0.18/lib

#source /etc/profile       #使其立即生效 #echo $LD_LIBRARY_PATH     #查看配置是否成功

/usr/local/gmp-6.1.0/lib:/usr/local/mpfr-3.14/lib:/usr/local/mpc-1.0.3/lib:/usr/local/isl-0.18/lib

#显示这个表示成功

vi /etc/ld.so.conf          #编辑这个文件,添加下面路径

/usr/local/gmp-6.1.0/lib /usr/local/mpfr-3.14/lib /usr/local/mpc-1.0.3/lib /usr/local/isl-0.18/lib /usr/local/lib /usr/lib

ldconfig    #重建/etc/ld.so.cache strings /etc/ld.so.cache |grep

libisl          #查看库文件是否能被加载

开始编译安装GCC

./configure –prefix=/usr/local/gcc-8.1.0/ –enable-bootstrap –enable-threads=posix –enable-languages=c,c++,objc,obj-c++ –disable-multilib –with-gmp=/usr/local/gmp-6.1.0 –with-mpfr=/usr/local/mpfr-3.1.4 –with-mpc=/usr/local/mpc-1.0.3 –with-isl=/usr/local/isl-0.18 make

make

make install

删除旧版软件

rpm -qa |grep gcc

列出机器上已安装的旧版软件包,用rpm -e 命令删去,否则后面安装软件时可以会调用到旧的程序。

配置GCC

vi /etc/profile  #向/etc/profile文件末尾添加下面的语句(root权限下):

export PATH=$PATH:/usr/local/gcc-8.1.0

source /etc/profile   #使其立即生效

ln -sf /usr/local/gcc-8.1.0/bin/gcc /usr/bin/gcc  #使新版本建立软连接
ln -sf /usr/local/gcc-8.1.0/bin/gcc /usr/bin/cc
ln -sf /usr/local/gcc-8.1.0/bin/g++ /usr/bin/g++

ln -sf /usr/local/gcc-8.1.0/bin/c++ /usr/bin/c++

gcc –version     #查看配置是否成功

update-alternatives –install /usr/bin/gcc gcc /usr/local/gcc-8.1.0/bin/gcc –slave /usr/bin/g++ g++ /usr/local/gcc-8.1.0/bin/g++

update-alternatives –config gcc

重新安装Python3

安装 Python 之前,请确保系统中已经有了所有必要的开发依赖:

yum -y groupinstall development

yum -y install zlib-devel

yum install python-devel

解压安装包:

tar -zxf Python-3.6.5.tgz

cd Python-3.6.5

./configure –prefix=/usr/local/python3

make && make install

ln -sf /usr/local/python3/bin/python3 /usr/bin/python3

python3 -V

安装boost库:

tar -zxf boost_1_60_0.tar.gz
cd boost_1_60_0
./bootstrap.sh –with-python=python3
./b2 stage threading=multi link=shared
./b2 install threading=multi link=shared

这里会报一个错误:

./boost/python/detail/wrap_python.hpp:50:11: 致命错误:pyconfig.h No such file or directory

原因为boost的原生错误,

需要修改安装脚本python.jam:

vim /packages/boost_1_60_0/tools/build/src/tools/python.jam

在542行:

将includes ?= $(prefix)/include/python$(version);改成

includes ?= $(prefix)/include/python$(version)m;

重新安装boost:

./bootstrap.sh –with-python=python3
./b2 stage threading=multi link=shared
./b2 install threading=multi link=shared

果然不让人失望,又报出:

gcc.compile.c++ bin.v2/libs/iostreams/build/gcc-8.1.0/release/threading-multi/bzip2.o
libs/iostreams/src/bzip2.cpp:20:10: 致命错误:bzlib.h:没有那个文件或目录
#include “bzlib.h” // Julian Seward’s “bzip.h” header.
^~~~~~~~~
编译中断。

到网站:http://www.bzip.org/downloads.html

下载到bzip2-1.0.6.tar.gz

tar -zxf bzip2-1.0.6.tar.gz

cd bzip2-1.0.6

make && make install

这样就可以找到/usr/local/include/bzlib.h

重新执行:

./b2 install threading=multi link=shared

boost 安装完成。

安装mysql8.0

装到这步发现我下载的MySQL8.0包好像不对,原先是mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz,这个好像不用编译,直接解压就可以用,但我试着初始化运行,有报错,网上搜索发现还有另外编译版本mysql-boost-8.0.11.tar.gz(自带boost)和mysql-8.0.11.tar.gz,因为上面装过boost,就采用没有带boost版本,结果报错说版本要boost_1_66_0以上,之前装的版本太低,只得再换mysql-boost-8.0.11.tar.gz安装。

后面的安装也没有那么一帆风顺,先执行cmake命令:

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

-DSYSCONFDIR=/etc \

-DMYSQL_TCP_PORT=3306 \

-DWITH_BOOST=/packages/mysql-8.0.11/boost \

-DMYSQL_DATADIR=/data/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1\

-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DCOMPILATION_COMMENT=’mysql  test’ \
-DWITH_READLINE=ON \
-DSYSCONFDIR=/data/mysql \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock

再make

这时报出cc1plus: 错误:无法识别的命令行选项“-std=c++11”。

这个问题就是因为我机子上GCC旧版本没删除,但和搜索到的文章说的情况都不一样,我/usr/bin中关联的gcc,g++等都是新版,也找不到旧版的安装目录,实在找不到能解决问题的相关文章,后来是用rpm -qa|grep gcc找出安装包名称,删除掉后,重新做关联才解决。解决方法已整合到上面GCC安装部分内容中。

然后make && make install,一切正常。

先是创建MySQL账号:

useradd -s /sbin/nologin mysql

tar -zxf mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz
cp -R mysql-8.0.11-linux-glibc2.12-x86_64  /usr/local/mysql

mkdir  -p /opt/mysql/mysql3306/

chown -R mysql.mysql /opt/mysql

chown -R mysql.mysql /usr/local/mysql

vim /etc/profile

加入如下配置:

export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib

source /etc/profile

vim /etc/my.cnf
[mysqld]
user = mysql
port = 3306
socket = /opt/mysql/mysql3306/mysql.sock
basedir = /opt/mysql
datadir = /opt/mysql/mysql3306
pid-file = /opt/mysql/mysql3306/mysql.pid
relay-log = /opt/mysql/mysql3306/relay-bin
relay-log-info-file = /opt/mysql/mysql3306/relay-log.info
server-id = 1
[mysqld_safe]
log-error = /opt/mysql/mysql3306/mysql.err
pid-file = /opt/mysql/mysql3306/mysql.pid

配置文件中的参数须与编译时给的参数相同。

配置服务启动Mysql服务

cp support-files/mysql.server /etc/init.d/mysqld
chmod a+x /etc/init.d/mysqld
chkconfig –add mysqld
chkconfig mysqld on
service mysqld start

初始化数据库

# 有密码初始化
mysqld –initialize –user=mysql

# 无密码初始化
mysqld  –initialize-insecure –user=mysql

如报如下错误:

mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory

yum -y install numactl    #安装这个即可。

登录mysql:

mysql -u root -p
Enter password: (enter the random root password here)   #有生成随机密码时

mysql -u root –skip-password   #无密码初始化时

修改密码:

ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘new_password’;

初始化数据表及权限

mysql_secure_installation

 

作者: Josh Chen

技术引领潮流!