Centos7.4源码包安装Mysql8.0.15及遇到的坑

全新以最小化包安装了64位的CentOS7.6系统,作为本地的Web服务器使用,现记录全过程

第二步,安装mysql8数据库v8.0.15,无法用yum源安装的相关依赖有cmake-3.14.5、gcc6.3

 

※ 知悉

源码安装mysql,其中两个版本对编译环境有要求

1. mysql从5.5版本开始,不再使用./configure编译,而是使用cmake编译器。

2. mysql从8.0.16版本开始,要求cmake的版本是cmake3以上

3. centos7.6默认安装的是cmake2.8.12.2和gcc4.8.5,这是为考虑向下兼容centos6.2及稳定性,但对编辑安装mysql8.0.16会形成阻碍,所以安装前建议升级cmake到cmake3以上(最新为3.14),并以scl软件集(Software Collections)的方式临时切换为高版本的gcc6.3完成mysql编辑(本文会分别讲述此两项)

4. 请仔细查看mysql的cmake预编译参数以及正确正确的mysql源码包,很多同学在这里乱来

mysql8.0官方编译参数:

https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html

mysql-8.0.15.tar.gz源码包下载地址:

https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.15.tar.gz

 

准备工作1,安装wget,用wget下载相应安装包,卸载centos自带的mariadb

[root@localhost ~]# yum remove mariadb
[root@localhost ~]# yum install -y wget
[root@localhost ~]# wget https://github.com/Kitware/CMake/releases/download/v3.14.5/cmake-3.14.5.tar.gz
[root@localhost ~]# wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.15.tar.gz


 

准备工作2:安装基本依赖包,先用yum安装cmake、automake 、autoconf ,另MySQL 8.x需要最少安装的包有:bison,gcc、gcc-c++、ncurses-devel、openssl-devel

[root@localhost ~]# yum install cmake make -y
[root@localhost ~]# yum install gcc gcc-c++ autoconf bison automake \
openssl openssl-devel zlib* fiex* libxml* \
ncurses-devel libmcrypt* libtool-ltdl-devel* -y

 

准备工作3:安装环境要求:gcc5.3及以上版本,cmake3.75以上版本(本文用gcc6.3和cmake3.14)

https://dev.mysql.com/doc/refman/8.0/en/source-installation.html

查看当前 gcc 版本,显示yum默认安装的是gcc4.8.5,由于旧版本gcc对各种c语言特性不支持

[root@localhost ~]# gcc -v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
目标:x86_64-redhat-linux
配置为:

../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
线程模型:posix
gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
安装gcc6.3,这里介绍使用scl软件集(Software Collections)实现多个gcc版本之间的灵活切换

1. 安装scl源

[root@localhost ~]# yum install centos-release-scl -y
2.列出scl有哪些源可以用,下面只截图部分版本

[root@localhost ~]# yum list|grep gcc
devtoolset-3-gcc.x86_64                   4.9.2-6.el7           centos-sclo-rh  
devtoolset-3-gcc-c++.x86_64               4.9.2-6.el7           centos-sclo-rh  
devtoolset-3-gcc-gfortran.x86_64          4.9.2-6.el7           centos-sclo-rh  
devtoolset-3-gcc-plugin-devel.x86_64      4.9.2-6.el7           centos-sclo-rh  
devtoolset-4-gcc.x86_64                   5.3.1-6.1.el7         centos-sclo-rh  
devtoolset-4-gcc-c++.x86_64               5.3.1-6.1.el7         centos-sclo-rh  
devtoolset-4-gcc-gdb-plugin.x86_64        5.3.1-6.1.el7         centos-sclo-rh  
devtoolset-4-gcc-gfortran.x86_64          5.3.1-6.1.el7         centos-sclo-rh  
devtoolset-4-gcc-plugin-devel.x86_64      5.3.1-6.1.el7         centos-sclo-rh  
devtoolset-4-libgccjit.x86_64             5.3.1-6.1.el7         centos-sclo-rh  
devtoolset-4-libgccjit-devel.x86_64       5.3.1-6.1.el7         centos-sclo-rh  
devtoolset-4-libgccjit-docs.x86_64        5.3.1-6.1.el7         centos-sclo-rh  
devtoolset-7-gcc.x86_64                   7.3.1-5.15.el7        centos-sclo-rh  
devtoolset-7-gcc-c++.x86_64               7.3.1-5.15.el7        centos-sclo-rh  
devtoolset-7-gcc-gdb-plugin.x86_64        7.3.1-5.15.el7        centos-sclo-rh  
devtoolset-7-gcc-gfortran.x86_64          7.3.1-5.15.el7        centos-sclo-rh  
devtoolset-7-gcc-plugin-devel.x86_64      7.3.1-5.15.el7        centos-sclo-rh  
devtoolset-7-libgccjit.x86_64             7.3.1-5.15.el7        centos-sclo-rh  
devtoolset-7-libgccjit-devel.x86_64       7.3.1-5.15.el7        centos-sclo-rh  
devtoolset-7-libgccjit-docs.x86_64        7.3.1-5.15.el7        centos-sclo-rh  
devtoolset-8-gcc.x86_64                   8.2.1-3.el7           centos-sclo-rh  
devtoolset-8-gcc-c++.x86_64               8.2.1-3.el7           centos-sclo-rh  
devtoolset-8-gcc-gdb-plugin.x86_64        8.2.1-3.el7           centos-sclo-rh  
devtoolset-8-gcc-gfortran.x86_64          8.2.1-3.el7           centos-sclo-rh  
devtoolset-8-gcc-plugin-devel.x86_64      8.2.1-3.el7           centos-sclo-rh  
devtoolset-8-libgccjit.x86_64             8.2.1-3.el7           centos-sclo-rh  
devtoolset-8-libgccjit-devel.x86_64       8.2.1-3.el7           centos-sclo-rh  
devtoolset-8-libgccjit-docs.x86_64        8.2.1-3.el7           centos-sclo-rh 
3.安装5.3版本的gcc、gcc-c++、gdb,当前CentOS7支持3,4,6,7,8五个版本,分别对应GCC4.9,GCC5.3,GCC6.3,GCC7.3,,GCC8.2,用户可以根据自己的需要选择安装哪一个版本,本文安装GCC8.2

[root@localhost ~]# yum install devtoolset-8-gcc* -y
4.临时切换gcc为新版本有两个命令(source /opt/rh/devtoolset-8/enable或scl enable devtoolset-8 bash)

[root@localhost ~]# source /opt/rh/devtoolset-8/enable
 
[root@localhost ~]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-8/root/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-8/root/usr --mandir=/opt/rh/devtoolset-8/root/usr/share/man --infodir=/opt/rh/devtoolset-8/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --with-default-libstdcxx-abi=gcc4-compatible --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-8.2.1-20180905/obj-x86_64-redhat-linux/isl-install --disable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 8.2.1 20180905 (Red Hat 8.2.1-3) (GCC) 
至此,gcc已显示为6.3版本,若要在启动的时候就生效,可以放置到~/.bashrc之中即可

只要make编译通不过,请检查当前的gcc版本(命令:gcc -v),版本要求5.3以上(※ 非常重要)

 

准备工作4:升级cmake2为cmake3以上

yum默认安装2.8.12.2,编译mysql8.0.16会提示以下错误:

-- Running cmake version 2.8.12.2
CMake Warning at CMakeLists.txt:43 (MESSAGE):
  Please use cmake3 rather than cmake on this platform
-- Please install cmake3 (yum install cmake3)
CMake Error at CMakeLists.txt:55 (CMAKE_MINIMUM_REQUIRED):
  CMake 3.4.3 or higher is required.  You are running version 2.8.12.2
-- Configuring incomplete, errors occurred!
更新cmake,先用yum移除原cmake

[root@localhost ~]# yum -remove cmake -y
[root@localhost ~]# tar zxvf cmake-3.14.5.tar.gz
[root@localhost ~]# cd cmake-3.14.5
[root@localhost cmake-3.14.5]# ./bootstrap
[root@localhost cmake-3.14.5]# gmake && gmake install
[root@localhost cmake-3.14.5]# /usr/local/bin/cmake  --version
cmake version 3.14.5
CMake suite maintained and supported by Kitware (kitware.com/cmake).

显示的版本号为cmake version 3.14.5,再建立软连接[cmake更新完毕]

[root@localhost cmake-3.14.5]# ln -s /usr/local/bin/cmake /usr/bin/
 

下面开始正式进入mysql的安装步骤:

我的mysql目录配置如下:

安装路径:/usr/local/mysql

数据库路径:/data/mysql

源码包存放位置:/root/

[root@localhost ~]# tar zxvf mysql-8.0.15.tar.gz
[root@localhost ~]# mkdir /data
[root@localhost ~]# mkdir /data/mysql
[root@localhost ~]# cd mysql-8.0.15
[root@localhost mysql-8.0.15]# mkdir -p build
[root@localhost mysql-8.0.15]# cd build
[root@localhost build]# /usr/local/bin/cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \
-DWITH_SSL=system \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_INNODB_MEMCACHED=ON \
-DENABLED_LOCAL_INFILE=ON \
-DMYSQL_TCP_PORT=3306 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/tmp \
-DFORCE_INSOURCE_BUILD=1 \
-DMYSQL_DATADIR=/data/mysql
 
[root@localhost build]# make -j 8  && make install


执行多任务并发编译安装,make -j x(x为任务数)

※ 部分编译参数特别说明

-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/tmp 

若mysql编译时未加入上述参数,会报错如下:

报错:CMake Error at cmake/boost.cmake:101 (MESSAGE): You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=

-DDOWNLOAD_BOOST=1,表示系统会自动下载解压boost,若已下载,请将该参数置0

 

 

下面开始正式进入mysql的配置步骤:

1. 创建mysql用户组(查看mysql.mysql的用户及组是否存在,不存在就创建)

[root@localhost ~]# cat /etc/passwd |grep mysql
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd mysql -g mysql -s /sbin/nologin
[root@localhost ~]# cat /etc/passwd |grep mysql
mysql:x:1000:1000::/home/mysql:/sbin/nologin
2. 将mysql目录赋予mysql用户的执行权限

[root@localhost ~]# chown mysql.mysql -R /usr/local/mysql
[root@localhost ~]# chown mysql.mysql -R /data/mysql

特别需要注意的是,检查服务器上是否有如下目录和文件,如果没有请自己手动创建一下,否则在初始化的时候会失败!!!

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

3. 初始化mysql,会生成root初始化密码,注意保存

[root@localhost ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql
※ 临时密码:[Server] A temporary password is generated for root@localhost: G!K+EPYn0=Oe

 

4. 启动mysql

[root@localhost ~]# /usr/local/mysql/bin/mysqld_safe --user=mysql &
用secureCRT开启新会话,进入数据库(G!K+EPYn0=Oe是刚才生成的临时密码)

后面必须要修改一下密码才可以进行数据库的操作,否则8版本以上不让操作了

[root@localhost ~]# /usr/local/mysql/bin/mysql -uroot -p'G!K+EPYn0=Oe'
# 修改root 密码为 888888

mysql> alter user 'root'@'localhost' identified by "888888";
mysql> show databases;
 
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
 
4 rows in set (0.01 sec)
# 添加mysql远程登录账号

mysql> create user root@'%' identified by '888888';
Query OK, 0 rows affected (0.02 sec)
 
mysql> grant all privileges on *.* to root@'%';
Query OK, 0 rows affected (0.00 sec)
 
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
# 查看目前的帐号,有%的root账号表示远程登录账号配置成功

mysql> select user,host from mysql.user;
 
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)
 
mysql> quit
5. 配置为系统服务并加入开机启动

[root@localhost ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost ~]# chmod 755 /etc/init.d/mysqld
[root@localhost ~]# chkconfig --list|grep mysqld
[root@localhost ~]# chkconfig mysqld on
[root@localhost ~]# chkconfig --list|grep mysqld
mysqld          0:关    1:关    2:开    3:开    4:开    5:开    6:关
 

mysqld已加入系统服务,设置为开机自启动,至此,mysql安装配置讲解结束!

 

在防火墙中开启mysql的3306的远程访问,这样就可以使用navicat等工具连上mysql

[root@localhost ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
 

附录:
centos7默认的防火墙为firewalld,基本命令如下:

开启3306端口,(--permanent永久生效,没有此参数重启后失效)

[root@localhost ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent   
重新载入,使修改立即生效(每次修改都执行该命令)

[root@localhost ~]# firewall-cmd --reload
查看所有打开的端口

[root@localhost ~]# firewall-cmd --zone=public --list-ports
查看指定的端口是否打开

[root@localhost ~]# firewall-cmd --zone= public --query-port=3306/tcp
删除指定的端口

[root@localhost ~]# firewall-cmd --zone= public --remove-port=3306/tcp --permanent
 

mysql8.0官方编译参数的英文文档简单翻译说明一下:

https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html

The InnoDB, MyISAM, MERGE, MEMORY, and CSV engines are mandatory (always compiled into the server) and need not be installed explicitly. (说明:mysql默认支持的数据库引擎有InnoDB,MyISAM, MERGE, MEMORY, CSV,无需在编译时再声明)

所以上面的编译条件省掉了如下行

-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
 

相关错误处理

1. CMake Error: The source directory "/xxx/mysql-8.0.15" does not appear to contain CMakeLists.txt

解决:下载的mysql版本有问题。应下载:选择Source Code

2. mysql8源码编译运行CMake,提示Please do not build in-source.  Out-of source builds are highly   recommended,提示不要在源文档中cmake

解决:在源文档中建个子目录来执行cmake即可(本例中建立了build目录),不在源目录中cmake是良好的习惯。

3. CMake Error at cmake/ssl.cmake:68 (MESSAGE): Please install the appropriate openssl developer package

解决:yum install ncurses-devel 和 yum install openssl-devel
 

你可能感兴趣的:(PHP,运维)