CentOS7.3 安装 MySQL5.7.18 RPM Bundle

时间:2021-06-24 17:10:21

本教程适用于CentOS7.3(1611)安装MySQL5.7.x版本,在操作过程中将省略一些检查步骤。

安装环境:(x64): CentOS7.3(1611)、MySQL5.7.16
教程内容:

  1. 卸载系统MySQL较旧版本
  2. 安装MySQL
  3. 登录并创建MySQL密码
  4. SELinux安全操作

1.卸载系统MySQL较旧版本

在 CentOS 7.3 中预装的MySQL版本为 mariadb 5.5.52-1.el7,这是 MySQL 的一个分支。在卸载较旧版本之前,如果您的系统中还没有用于运行mysqld的用户名和组,那么就需要为系统添加一个mysql用户 (并不是一定叫mysql,也可以叫其他名称,但是需要遵循语法、操作规定)。

(1)添加mysql组和mysql用户

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

注: groupadduseradd的语法或名称在不同版本的Unix系统上可能略有不同,但在CentOS6.5中应进行如上操作。上述操作只是为了获得系统的所有权,而不是以登录为目的;使用useradd命令和-r-s /bin/false选项来创建一个没有登录权限的用户。

(2)查看系统旧版MySQL

rpm -qa | grep mariadb

将会输出系统中的MySQL及其组件,如:

  • mariadb-5.5.52-1.el7.x86_64
  • mariadb-devel-5.5.52-1.el7.x86_64
  • mariadb-server-5.5.52-1.el7.x86_64
  • mariadb-libs-5.5.52-1.el7.x86_64
rpm -qa | grep mysql

将会输出系统中的MySQL及其组件,如:

  • akonadi-mysql-1.9.2-4.el7.x86_64
  • qt-mysql-4.8.5-13.el7.x86_64
  • qt5-qtbase-mysql-5.6.1-10.el7.x86_64

注: 以上列表中的文件可能并不全,但是列表中的文件将会按顺序被逐个移除。

(3)卸载MySQL及其组件的顺序

注: 此处需要按依赖顺序逐个移除,否则会出现依赖包丢失或其他异常情况。

使用命令rpm -e --nodeps {-file-name}进行移除操作:

rpm -e --nodeps mariadb-5.5.52-1.el7.x86_64
rpm -e --nodeps mariadb-devel-5.5.52-1.el7.x86_64
rpm -e --nodeps mariadb-server-5.5.52-1.el7.x86_64
rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64
rpm -e --nodeps akonadi-mysql-1.9.2-4.el7.x86_64
rpm -e --nodeps qt-mysql-4.8.5-13.el7.x86_64
rpm -e --nodeps qt5-qtbase-mysql-5.6.1-10.el7.x86_64

2.安装MySQL

(1)解压源文件
您可以将下载好的源文件(rpm-bundle.tar)解压至一个目录中,从而为安装做准备。

使用以下命令解压源文件到当前目录:

tar -xvf mysql-5.7.18-1.el6.x86_64.rpm-bundle.tar

将会得到以下文件列表:不一定需要全安装

  • mysql-community-libs-compat-5.7.18-1.el6.x86_64.rpm
  • mysql-community-test-5.7.18-1.el6.x86_64.rpm
  • mysql-community-libs-5.7.18-1.el6.x86_64.rpm
  • mysql-community-common-5.7.18-1.el6.x86_64.rpm
  • mysql-community-embedded-5.7.18-1.el6.x86_64.rpm
  • mysql-community-embedded-devel-5.7.18-1.el6.x86_64.rpm
  • mysql-community-client-5.7.18-1.el6.x86_64.rpm
  • mysql-community-devel-5.7.18-1.el6.x86_64.rpm
  • mysql-community-server-5.7.18-1.el6.x86_64.rpm

(2)安装MySQL安装顺序
使用命令rpm -ivh {-file-name}进行安装操作,推荐安装以下包:

rpm -ivh mysql-community-common-5.7.18-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.18-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.18-1.el6.x86_64.rpm
rpm -ivh mysql-community-client-5.7.18-1.el6.x86_64.rpm 
rpm -ivh mysql-community-server-5.7.18-1.el6.x86_64.rpm 
rpm -ivh mysql-community-devel-5.7.18-1.el7.x86_64.rpm

注: i-install安装;v-verbose进度条;h-hash哈希校验;安装过程中可能会出现 perl 环境等问题,按提示百度就行。

3.登录并创建MySQL密码

一般情况下 5.7.x 版MySQL 会在日志中生成一个随机密码,但在现在最新版本中这个操作需要手动初始化。运行一下语句即可在默认位置进行初始化,即 /var/lib/mysql/

mysqld --initialize --user=mysql

如果需要指定存储在其他位置,则可以添加参数,例如:

mysqld --initialize --user=mysql --datadir=/data0/data/mysqldb

这样的指定会有其他问题:如 SELinux(CentOS 7 自带的安全软件) 操作权限监控告警而操作被阻止等,稍后会说明如何解决。

初始化后,会在安装日志中生成一个随机密码。使用命令service mysqld start启动MySQL服务(此处可能受 SELinux 影响而无法进行启动或重启等操作)。

由于MySQL5.7.4之前的版本中默认是没有密码的,登录后直接回车就可以进入数据库,进而进行设置密码等操作。其后版本对密码等安全相关操作进行了一些改变,在安装过程中,会在安装日志中生成一个随机密码。

使用以下命令或者直接 cat:

grep 'temporary password' /var/log/mysqld.log

即可查询到类似于如下的一条日志记录:

2017-03-02T14:53:02.179626Z 1 [Note] A temporary password is generated for root@localhost:Jksa3Gc1dl:a

记录中的类似于最后绿色部分的字符串即为生成的随机密码。之后的过程和CentOS 6.5 上是一样的,参考【CentOS6.5 安装 MySQL5.7 RPM Bundle】。

4.SELinux安全操作

具体可以参考网上的一些资料去查询如何配置,这里仅作一些操作说明。

在安装或者配置过程中,如果修改启动连接端口(默认 3306 )、数据存储路径(默认 /var/lib/mysql )等会发现启动、重启或其他操作会被 SELinux 阻止。SELinux的告警提示中可以发现这些操作是不应该访问的操作类型,原因在于这些操作没有被配置为被允许运行的。

如果需要直接关闭这些告警即不阻止,可以这么做:

setenforce 0 

一般情况下,更多的是配置规则,而不是直接关闭;
如果有可视化界面的话,可以从 CentOS 的菜单中(应用程序 > 杂项 > SELinux 故障排除工具)查看。

在每个告警中有具体的告警问题,其中具体信息中有这么一些提示:

应该将这个情况作为 bug 报告。
可以生成本地策略模块以允许此访问。
Allow this access for now by executing:
# ausearch -c 'xxxxxx' --raw | audit2allow -M my-xxxxxx
# semodule -i my-xxxxxx.pp

文中提示这里的 bug 可以配置本地策略解除,运行这些操作就可以进行配置。

不同的配置有不同的方法:

semanage fcontext -a -t mysqld_db_t "/data0/data/mysqldb" 
restorecon -Rv "/data0/data/mysqldb"

以上可能不能解决 SELinux 的权限问题,还有很多需要在运行时才会提示的需要后期加入规则中,详细操作还需百度 SELinux 配置 MySQL。