CentOS编译安装mysql5.7.16

说在前面的话:因为MySQL5.7版本和之前的版本安装过程会有一定的不同,因此专门整理了一下整个流程。

安装前准备工作

因MySQL我们通常采用跨平台编译cmake,而不是make编译,因此需要下载cmake包,另外从MySQL 5.7.5开始Boost库是必需的,因此也需要下载boost包:
cmake:wget https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz
boost:wget https://jaist.dl.sourceforge.net/project/boost/boost/1.64.0/boost_1_64_0.tar.gz
mysql5.7:wget https://dev.mysql.com/get/archives/mysql-5.7/mysql-boost-5.7.16.tar.gz

编译安装 cmake

如果之前已经安装过cmake的可以跳过这步

1
2
3
4
5
$ tar -zxf cmake-3.5.2.tar.gz
$ cd cmake-3.5.2
$ yum install -y make gcc gcc-c++ ncurses-devel
$ ./bootstrap
$ gmake && gmake install

编译安装 mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ tar -zxf boost_1_64_0.tar.gz
$ tar -zxf mysql-boost-5.7.16.tar.gz
$ cd mysql-boost-5.7.16
$ yum install -y openssl openssl-devel
$ cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/mnt/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_LIBWRAP=0 \
-DMYSQL_UNIX_ADDR=/var/mysql/mysql.sock \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_BOOST=/usr/local/boost_1_64_0 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_c
$ make && make install
  • -DCMAKE_INSTALL_PREFIX : 表示MySQL的安装目录,可自定义
  • -DMYSQL_DATADIR : MySQL 数据存储目录,可自定义,如果不存在需要先创建
  • -DMYSQL_UNIX_ADDR:sock文件存放路径,最好是/var/mysql/mysql.sock,其他定义路径,启动如出现找不到mysl.sock,则需要创建软连接指向这个路径
  • -DWITH_BOOST:boots解压路径

初始化MySQL

1
2
3
4
5
6
7
8
9
10
11
$ cd /usr/local/mysql
$ cp ./support-files/mysql.server /etc/init.d/mysqld
$ chmod +x /etc/init.d/mysqld
$ chkconfig --add mysqld
$ chkconfig mysqld on
$ usermod -d /home/mysql -p mysql -s /bin/bash mysql
$ mkdir mysql-files
$ chmod 750 mysql-files
$ chown -R mysql.mysql /usr/local/mysql
$ ./bin/mysql_ssl_rsa_setup
$ ./bin/mysqld --initialize --user=mysql
  • 注意:记住日志输出的初始化密码,下面登录root需要

启动MySQL并授权用户

1
2
3
4
5
6
7
8
9
10
11
12
13
$ /usr/local/mysql/bin/mysqld_safe --skip-grant-tables --skip-networking &
$ mysql -u root -p
mysql> update mysql.user set password_expired='N' where user='root';
mysql> exit
$ service mysqld start
$ mysql -u root -p
mysql> create user work identified by '123456';
mysql> create database mydb;
mysql> grant all on mydb.* to work
mysql> flush privileges;
mysql> exit
$ mysql -u work -p
mysql> show databases;
  • MySQL5.7安装后,初始化启动不能使用service mysqld start ,因为MySQL5.7默认开启了root密码过期功能,需要先使用 –skip-grant-tables –skip-networking 启动后MySQL后修改password_expired字段值为N(No),后方可使用服务进行启动,同时如果–skip-grant-tables –skip-networking 启动窗口下也无法创建用户,需要退出使用服务登录后创建。

(The End)

坚持原创技术分享,您的支持将鼓励我继续创作!