本教程适用于CentOS7.3(1611)安装MySQL5.7.x版本,在操作过程中将省略一些检查步骤。
安装环境:(x64): CentOS7.3(1611)、MySQL5.7.16
教程内容:
在 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
注:
groupadd
和useradd
的语法或名称在不同版本的Unix系统上可能略有不同,但在CentOS6.5中应进行如上操作。上述操作只是为了获得系统的所有权,而不是以登录为目的;使用useradd
命令和-r
和-s /bin/false
选项来创建一个没有登录权限的用户。
(2)查看系统旧版MySQL
rpm -qa | grep mariadb
将会输出系统中的MySQL及其组件,如:
rpm -qa | grep mysql
将会输出系统中的MySQL及其组件,如:
注: 以上列表中的文件可能并不全,但是列表中的文件将会按顺序被逐个移除。
(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
(1)解压源文件
您可以将下载好的源文件(rpm-bundle.tar)解压至一个目录中,从而为安装做准备。
使用以下命令解压源文件到当前目录:
tar -xvf mysql-5.7.18-1.el6.x86_64.rpm-bundle.tar
将会得到以下文件列表:不一定需要全安装
(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
环境等问题,按提示百度就行。
一般情况下 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】。
具体可以参考网上的一些资料去查询如何配置,这里仅作一些操作说明。
在安装或者配置过程中,如果修改启动连接端口(默认 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。