CentOS/RedHat下RPM方式安装MySQL 5.7

849 阅读3分钟

「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」。

摘要
本文详细记录了Linux下MySQL 5.7的安装步骤,基于CentOS 7.2与中标麒麟7两个版本的操作系统下的实践总结而成(大多数图片截取自中标麒麟7)。

引子

我所在的人力资源和社会保障行业线,项目的业务数据库绝大多数是Oracle,其实很少见到MySQL。近几年有从Oracle向国产数据库(OceanBase、达梦、GBase等)过渡的趋势。

虽然业务库很少选择MySQL,但MySQL依然有其用武之地:

  • 支撑服务注册与配置中心Nacos的运行
  • 支撑分布式系统监控服务Zabbix的运行

1 安装包准备

MySQL安装包官方下载地址:downloads.mysql.com/archives/co…

选择MySQL与操作系统的版本,下载对应的软件安装包(本文选取的是5.7.10-1.el7.x86_64版本)。

我们只需要下载、安装以下四个软件包就可以了:

  • mysql-community-server-5.7.10-1.el7.x86_64.rpm:服务端和相关工具
  • mysql-community-client-5.7.10-1.el7.x86_64.rpm:客户端
  • mysql-community-common-5.7.10-1.el7.x86_64.rpm:服务端和客户端常用库文件
  • mysql-community-libs-5.7.10-1.el7.x86_64.rpm:客户端共享库

另:mysql-5.7.10-1.el7.x86_64.rpm-bundle.tar可以理解为集成包,集成包在解压后可以得到当前版本相关的所有rpm安装包。

2 卸载MariaDB

以前的Linux系统中的数据库大部分是MySQL,但自从MySQL被Sun收购之后,就没有再集成到CentOS这些开源的Linux系统中了,因此Linux内部集成了MariaDB,而安装MySQL会和MariaDB的文件冲突,所以需要先卸载MariaDB。

查看已经安装的MariaDB相关软件:

rpm -qa|grep mariadb

注:实践中,中标麒麟7(上)与CentOS 7.2(下)所安装的mariadb软件包有些不同,不必纠结,有什么卸载什么就可以了。

卸载MariaDB:

rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
rpm -e --nodeps mariadb-5.5.60-1.el7_5.x86_64
rpm -e --nodeps mariadb-server-5.5.60-1.el7_5.x86_64

--nodeps指定在安装或卸载时,不检查依赖关系。如果没有使用--nodeps,卸载会出现如下错误:

3 安装MySQL

MySQL的软件包在安装时是存在依赖顺序的,需要按照common --> libs --> clients --> server的顺序依次安装。

或者也可以通过一条安装命令同时安装所有软件包:

rpm -ivh mysql*

注:截图中多安装了一个mysql-community-devel-5.7.10-1.el7.x86_64.rpm开发库,实际上可以不装。

安装完成后,MySQL的默认配置文件所在位置:/etc/my.conf

4 启动MySQL服务

service mysqld start

查看MySQL服务运行状态:

service mysqld status

5 修改MySQL密码

MySQL启动后,查询root用户的临时密码:

cat /var/log/mysqld.log | grep password

使用临时密码登录MySQL:

mysql -uroot -p

修改root用户的密码:

alter user 'root'@'localhost' identified by '新密码';

修改密码时,可能会因为不符合安全策略而修改失败:

查看当前的密码策略:

show variables like 'validate_password%';


(注:使用相同的MySQL安装包,在CentOS7.2下执行此命令,要求必须先完成首次的root密码修改,而中标麒麟7下则不需要,可以在临时密码的状态下查看当前密码策略)

如有需要,可以将密码策略调整为“LOW”、降低密码最低长度,这样就可以将root的密码修改为较简单的密码了:

set global validate_password_policy=LOW;
set global validate_password_length=4;

6 开放3306端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent

重启防火墙:

service firewalld restart

查看防火墙已开放端口:

firewall-cmd --list-ports

7 设置MySQL自启动

systemctl enable mysqld
systemctl daemon-reload

CentOS7.x之前的版本,系统在启动时第一支呼叫的程序是init,然后init会去唤起所有的系统所需要的服务,这些服务的启动脚本都放置于/etc/init.d下面,它们基本上都是使用bash、shell-script所写成的脚本程序。
CentOS7.x以后,RedHat放弃了通过init启动脚本的方法,改用systemd这个启动服务管理机制。