header-bg.jpg
CentOS 7 源码编译安装 MySQL 5.7.18
发表于 2017-04-18 13:46
|
分类于 Linux
|
评论次数 0
|
阅读次数 2872

下载 MySQL

新建用户和用户组

创建一个名为 mysql 且没有登录权限的用户和一个名为 mysql 的用户组:

groupadd -r mysql && useradd -r -g mysql -s /bin/false -M mysql

从官网下载 5.7.18 版本

MySQL 官网下载地址

可以选择先下载到本地,再上传至服务器,或者直接在服务器下载:

wget -c http://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.18.tar.gz

若速度很慢或者链接失效,可以选择从我的 GitHub 备份地址下载

wget -c https://github.com/SpanishOnion/MyLNMP/raw/master/package/MySQL/mysql-5.7.18.tar.gz

# md5校验
md5sum mysql-5.7.18.tar.gz

# 9fb9aeff41d36ccb9be0820afe4b2d8a  mysql-5.7.18.tar.gz

解压 MySQL

tar -zxf mysql-5.7.18.tar.gz && cd mysql-5.7.18

下载编译工具

根据官方文档提示,由于从 MySQL 5.5 版本开始弃用了常规的 configure 编译方法,所以需要下载 CMake 编译器Boost 库ncurses 库GNU 分析器生成器 Bisongmock 框架共 5 种工具。从 MySQL 5.7 版本开始,安装 MySQL 需要依赖 Boost 的 C++ 扩展,而且只能是 1.59.0 版本。

下载 gmock

Google 的 c++ mock 框架,从 MySQL 5.6 开始支持

wget -c https://github.com/SpanishOnion/MyLNMP/raw/master/package/MySQL/googlemock-master.zip

解压 gmock

安装 unzip, 并将 gmock 解压到 MySQL5.7.18 的 source_downloads 目录下

yum list | grep zip/unzip

yum install zip

yum install unzip

# 在 mysql-5.7.18 目录下进行解压
unzip googlemock-master.zip -d source_downloads

安装 CMake 编译工具

可以直接 yum 安装

yum -y install cmake

或者选择编译安装,此工具安装过程大约耗时10分钟

wget -c https://github.com/SpanishOnion/MyLNMP/raw/master/package/MySQL/cmake-3.8.2.tar.gz

tar -zxf cmake-3.8.2.tar.gz && cd cmake-3.8.2

./configure

# 默认安装路径是/usr/local/bin
make && make install

# 查看cmake版本
cmake --version

安装 Ncurses

Ncurses 提供功能键定义(快捷键),屏幕绘制以及基于文本终端的图形互动功能的动态库,直接 yum 安装即可:

yum -y install ncurses-devel

安装 Bison

这是一个 GNU 分析器生成器,使用编译安装:

wget -c https://github.com/SpanishOnion/MyLNMP/raw/master/package/MySQL/bison-3.0.tar.gz

tar -zxf bison-3.0.tar.gz && cd bison-3.0/ && ./configure

make && make install

安装 Boost 库

这是一个开源可移植的 C++ 库,是 C++ 标准化进程的开发引擎之一,使用编译安装:

wget -c https://github.com/SpanishOnion/MyLNMP/raw/master/package/MySQL/boost_1_59_0.tar.bz2

yum install bzip2

tar -jxf boost_1_59_0.tar.bz2 && cd boost_1_59_0/

./bootstrap.sh

./b2 stage threading=multi link=shared

./b2 install threading=multi link=shared

编译前的准备工作

进入 Mysql-5.7.18 目录后,输入 cmake \ 并回车,然后直接复制以下配置再次回车,开始设置 MySQL 的编译配置。

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql  \
-DMYSQL_DATADIR=/mydata/mysql/data  \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1  \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_DEBUG=0 \
-DMYSQL_MAINTAINER_MODE=0 \
-DWITH_SSL:STRING=bundled \
-DWITH_ZLIB:STRING=bundled

以上配置对应的注释如下:

[root@leo mysql-5.7.18]# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql  \                # [MySQL安装的根目录]
-DMYSQL_DATADIR=/mydata/mysql/data  \                     # [MySQL数据库文件存放目录]
-DSYSCONFDIR=/etc \                                       # [MySQL配置文件所在目录]
-DMYSQL_USER=mysql \                                      # [MySQL用户名]      
-DWITH_MYISAM_STORAGE_ENGINE=1 \                        # [MySQL的数据库引擎]
-DWITH_INNOBASE_STORAGE_ENGINE=1 \                      # [MySQL的数据库引擎]
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \                       # [MySQL的数据库引擎]
-DWITH_MEMORY_STORAGE_ENGINE=1 \                        # [MySQL的数据库引擎]
-DWITH_READLINE=1 \                                               # [MySQL的readline library]
-DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock \           # [MySQL的通讯目录]
-DMYSQL_TCP_PORT=3306 \                                      # [MySQL的监听端口]
-DENABLED_LOCAL_INFILE=1 \                                 # [启用加载本地数据]
-DENABLE_DOWNLOADS=1 \                                     # [编译时允许自主下载相关文件]
-DWITH_PARTITION_STORAGE_ENGINE=1  \
-DEXTRA_CHARSETS=all \                                        # [使MySQL支持所有的扩展字符]
-DDEFAULT_CHARSET=utf8 \                                   # [设置默认字符集为utf8]
-DDEFAULT_COLLATION=utf8_general_ci \                   # [设置默认字符校对]
-DWITH_DEBUG=0 \                                                # [禁用调试模式]
-DMYSQL_MAINTAINER_MODE=0 \
-DWITH_SSL:STRING=bundled \                             # [通讯时支持ssl协议]
-DWITH_ZLIB:STRING=bundled                              # [允许使用zlib library]

创建交换分区

这是为了避免 MySQL 编译过程中出现内存不足而导致编译失败,4 G 及以上内存的主机直接跳过此步即可。

(1)创建分区文件, 大小 2 G

dd if=/dev/zero of=/swapfile bs=1k count=2048000

(2)生成 swap 文件系统

mkswap /swapfile

(3)激活 swap 文件

swapon /swapfile

如果你想以后开机自动启动交换分区,可以进行下面这部操作:

vi /etc/fstab

# 在文件中新增如下代码,然后使用 wq 命令保存并退出
/swapfile  swap  swap    defaults 0 0

编译安装及安装后的配置工作

使用 make 命令编译时,会比较吃 CPU 与内存,我的主机配置是单核 2 G,并且增加了 2 G 的交换分区,编译过程大约花费 1 个小时,所以如果主机内存为 1 G,并且不增加交换分区的情况下,并不建议直接编译安装 5.7 版本的 MySQL!

编译

进入 MySQL 目录直接开始编译:

cd mysql-5.7.18

make

编译成功后出现如下图提示:

20170419181918_62248.png

安装

接下来开始安装 MySQL:

make intall

安装成功出现如下图提示:

20170419181936_21813.png

查看安装成功后的 MySQL 安装目录

使用命令查看 MySQL 的安装目录 /usr/local/mysql/ 下面是否生成了相关目录文件(最重要的当然是 binsbinlib 目录)。

ls -lrt /usr/local/mysql/lib/

如果 lib 目录下面没有生成如下图所示的 .so 动态库文件和 .a 静态库文件,那么说明安装不成功(即使成功了也可能会导致 php 进程无法找到 mysql 的相关库文件)。

20170419181957_26383.png

设置配置文件 my.cnf

先把编译生成的 my.cnf 文件备份,然后从我的 GitHub 上获取配置文件,再上传到服务器的 /etc/ 目录下即可。

wget -c https://github.com/SpanishOnion/MyLNMP/raw/master/config/MySQL/my.cnf

mv /etc/my.cnf /etc/my.cnfbak

mv  ~/my.cnf  /etc/my.cnf 

添加环境变量并创建日志存放目录

将 MySQL 编译生成的 bin 目录添加到当前 Linux 系统的环境变量中:

echo -e '\n\nexport PATH=/usr/local/mysql/bin:$PATH\n' >> /etc/profile && source /etc/profile

创建一个目录 /mydata/mysql/data,用于存放 MySQL 的数据库文件。同时设置其用户和用户组为之前创建的 mysql,权限为 777。这样其它用户是无法进行读写的,尽量保证数据库的安全。

mkdir -p /mydata/mysql/data && chown -R root:mysql /usr/local/mysql

chown -R mysql:mysql /mydata/mysql/data

chmod -R go-rwx /mydata/mysql/data

下面配置的 MySQL 日志存放目录以及权限都是根据前面 my.cnf 文件写的,也就是说两者需要保持一致。

mkdir -p /var/run/mysql && mkdir -p /var/log/mysql

chown -R mysql:mysql /var/log/mysql && chown -R mysql:mysql /var/run/mysql

配置开机自启动

cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld

# 增加可执行权限
chmod +x /etc/init.d/mysqld

# 添加到sysV服务
chkconfig --add mysqld                               

chkconfig mysqld on

初始化 MySQL 自身的数据库并启动服务

/usr/local/mysql/bin 文件夹中,执行 mysqld 命令,初始化 MySQL 自身的数据库。

cd /usr/local/mysql/bin

mysqld \

--initialize-insecure --user=mysql \

--basedir=/usr/local/mysql \

--datadir=/mydata/mysql/data

# 输入完以上命令后,回车

参数 user 表示用户,参数 basedir 表示 MySQL 的安装路径,参数 datadir 表示数据库文件存放路径

查看是否生成了 MySQL 自身的数据库文件

ls /mydata/mysql/data

如已生成,则如下图所示:

20170419182011_94583.png

在完成上面的操作后,就可以正式使用 MySQL 服务了,启动 MySQL 进程服务的命令如下:

mysqld_safe --user=mysql --datadir=/mydata/mysql/data --log-error=/var/log/mysql/error.log &

# 运行命令后会出现如下提示
[1] 10274
150513 21:28:16 mysqld_safe Logging to '/var/log/mysql/error.log'.
150513 21:28:16 mysqld_safe Starting mysqld daemon with databases from /mydata/mysql/data

上面这条命令会在后台继续执行,所以直接回车即可。接着启动 MySQL:

service mysqld start

# 启动成功,出现以下提示:
Starting MySQL.[  OK  ]                 [启动成功]

查看 MySQL 服务

# 查看进程
ps -ef | grep mysql

# 查看端口监听情况
netstat -tunpl | grep 3306

初始化 MySQL 的 root 用户密码

和 Oracle 数据库一样,MySQL 数据库也默认自带了一个 root 用户(这个和当前 Linux 系统中的 root 用户是完全不搭边的),我们在设置好 MySQL 数据库的安全配置后初始化 root 用户的密码。

mysql_secure_installation

配置过程中,一路输入 y 就行了。这里说明下 MySQL 5.7 版本中,用户密码策略分成低级 LOW中等 MEDIUM超强 STRONG 三种,推荐使用 中等 MEDIUM 级别!

20170419182055_85621.png

将 MySQL 的动态链接库共享至系统链接库

一般 MySQL 还会被类似于 PHP 等服务调用,所以我们需要将 MySQL 编译后的 lib 库文件添加至当前 Linux 系统的链接库 /etc/ld.so.conf.d/ 下,这样 MySQL 服务就可以被其它服务调用了。

echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf

# 使其生效
ldconfig

# 查看效果
ldconfig -v |grep mysql

# 运行完以下命令上会出现如下提示
ldconfig: Path `/usr/lib' given more than once
ldconfig: Path `/usr/lib64' given more than once
ldconfig: Can't stat /usr/libx32: No such file or directory
/usr/lib64/mysql:
        libmysqlclient.so.18 -> libmysqlclient.so.18.0.0
/usr/local/mysql/lib:
        libmysqlclient.so.20 -> libmysqlclient_r.so.20.3.5

创建其它 MySQL 数据库用户

使用 MySQL 的 root 用户登录后,可以管理数据库的其他用户了。

mysql -uroot -p

登录进 MySQL 后创建数据库:

use mysql;

create database c78_licong DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

创建名为 licong 的用户,并让它拥有 blog 数据库中每个表的全部权限,密码为 lcgod666.com

grant all privileges on blog.* to licong@'%' identified by 'lcgod666.com' with grant option;

# 查看用户表
select host,user from mysql.user; 

# 更改root用户远程登录权限
update user set host = '%' where user = 'root';

# 刷新权限
flush privileges;

# 退出
exit; 

以上,编译安装 MySQL 就大功告成了,快去动手尝试吧。

后续重启可能会遇到的问题

检查 MySQL 服务的状态:

systemctl status mysqld.service

出现如下提示:

● mysqld.service - LSB: start and stop MySQL
   Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)
   Active: failed (Result: exit-code) since Wed 2022-04-13 15:34:57 CST; 18s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 10355 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=1/FAILURE)

按提示启动 MySQL 服务:

/etc/rc.d/init.d/mysqld start

出现如下报错:

Starting MySQL.2022-04-13T07:35:35.848445Z mysqld_safe Directory '/var/run/mysql' for UNIX socket file don't exists.
 ERROR! The server quit without updating PID file (/var/log/mysql/mysql.pid).

修复:

mkdir -p /var/run/mysql
chown -R mysql:mysql /var/run/mysql

重新启动:

/etc/rc.d/init.d/mysqld start

Starting MySQL..... SUCCESS! 

发布评论
还没有评论,快来抢沙发吧!