☰
安装 MySQL 5.7.20和安装 MySQL 8.0 YUM安装---企业场景训练
2026/10/23 3:04:12 网站建设 项目流程

一、企业要求

1、环境准备:

1. 准备 3 台 Linux 服务器 并且编译安装mysql,完成基础环境检查以及mysql操作(不用提交文档)。

2.安装 MySQL 5.7.20: 使用 YUM 方式安装并验证版本。

3.安装 MySQL 8.0: 使用 YUM 方式安装并验证版本。

4.编写部署实施手册:

①服务器环境及 IP 规划

②详细安装步骤及命令

③关键操作截图及验证结果

④常见故障及解决方法

⑤MySQL 5.7.20 与 8.0 的区别

二、提交要求

1.提交完整的部署实施手册。

2.提供关键操作截图及验证结果。

3.确保数据库安装成功、能够正常连接。

4.要求: 独立完成部署,文档规范(以群里发的标准文档为主),步骤清晰,达到企业实施交付标准。

一、安装 MySQL 5.7.20

1、服务器环境及 IP 规划

项目

参数

操作系统

CentOS 7.x(推荐 CentOS7.9)

主机名

node04

IP 地址

10.8.0.13(你按需改成自己虚拟机 IP)

数据库版本

MySQL 5.7.20

数据库端口

3306

数据目录

/var/lib/mysql

配置文件

/etc/my.cnf

日志文件

/var/log/mysqld.log

运行用户

mysql(系统内置)

防火墙

firewalld

规划说明:单实例部署,用于业务测试,关闭 SELinux、放行 3306 端口方便远程连接。

【ip a 查看 IP、hostname 查看主机名】

2、前置准备工作

重要:CentOS7 自带 mariadb,必须先卸载,否则和 MySQL5.7 冲突

2.1 关闭 SELinux(永久)

# 临时关闭 setenforce 0 # 永久关闭 sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 查看状态 getenforce

Permissive :临时已经关闭(宽容模式,只告警不拦截)

setenforce 0:只是临时生效,重启后失效;

sed 那条是修改配置文件,重启机器之后才会变成 disabled(彻底关闭)

2.2 关闭防火墙(或者放行 3306,二选一,生产建议放行端口)

# 方案A:关闭防火墙(测试机使用) systemctl stop firewalld systemctl disable firewalld # 方案B:放行3306(企业推荐) firewall-cmd --add-port=3306/tcp --permanent firewall-cmd --reload firewall-cmd --list-all

2.3 卸载自带 mariadb 相关包

# 查询mariadb rpm -qa | grep mariadb # 卸载(查到什么删什么) rpm -e --nodeps mariadb-libs

如果没有输出代表没有安装,直接跳过卸载

2.4 添加 MySQL 官方 YUM 源 rpm 包

MySQL5.7.20 yum 源包名称:mysql57-community-release-el7-11.noarch.rpm

下载 MySQL 5.7 的 Yum 源安装包:wget http://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm

# 安装这个源,将其添加到系统的仓库列表中

sudo rpm -ivh mysql57-community-release-el7-11.noarch.rpm

⚠️注意:mysql57-community-release-el7-11 这个源里面包含 5.7.20 版本,安装前锁定版本避免自动升到 5.7 高版本

2. 检查并确认 MySQL 5.7 源已启用

(可选操作)为确保接下来安装的是 5.7 版本,可以检查一下仓库配置。默认情况下,MySQL 5.7 的源应该是启用的。

你可以用以下命令确认:

yum repolist enabled | grep mysql

如果列表里出现了mysql57-community,就说明源配置正确。

如果不放心,也可以手动编辑配置文件确认:

vim /etc/yum.repos.d/mysql-community.repo

在文件中找到[mysql57-community]这一节,确保enabled=1。如果系统预装了其他版本的 MySQL(比如 MariaDB),建议先在文件中将其对应的源禁用(enabled=0),以避免冲突。

3. 安装 MySQL 5.7 服务器

源配置好后,安装就非常简单了。执行以下命令即可安装 MySQL 服务器及所需的客户端、共享库等组件。

sudo yum install mysql-community-server

安装过程中,系统会提示你确认下载,输入y并回车即可。

4. 启动 MySQL 并设置开机自启

安装完成后,需要启动 MySQL 服务。

# 启动 MySQL 服务

sudo systemctl start mysqld

# 设置 MySQL 服务开机自启动

sudo systemctl enable mysqld

# 查看 MySQL 服务状态

5. 获取初始密码并登录

对于 MySQL 5.7,安装后的第一次启动会为root用户生成一个临时密码,我们需要在日志文件中找到它。

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

命令执行后会返回类似下面的信息,其中 dr%&neCgu52U 就是临时密码。

A temporary password is generated for root@localhost: MkarQyrS6v/U

接下来,使用这个临时密码登录 MySQL:

mysql -u root -p

系统提示输入密码时,粘贴刚才查到的临时密码即可。

6. 修改 Root 密码

出于安全策略,首次登录后 MySQL 会强制要求你修改 root 密码。在 MySQL 命令行中执行:

第一步:刷新权限,加载user表

flush privileges;

ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';

ALTER USER 'root'@'localhost' IDENTIFIED BY '1qaz@WSX' PASSWORD EXPIRE NEVER;

ALTER USER 'root'@'localhost' IDENTIFIED BY '12345678';

#查看当前的密码策略(可选)

SHOW VARIABLES LIKE 'validate_password%';

-- 关闭对大小写字母的要求

SET GLOBAL validate_password_mixed_case_count = 0;

-- 关闭对数字的要求

SET GLOBAL validate_password_number_count = 0;

-- 关闭对特殊字符的要求

SET GLOBAL validate_password_special_char_count = 0;

#如果你只关心密码长度,不关心复杂度,可以执行:

SET GLOBAL validate_password_policy = 'LOW';

#密码仍然必须满足最小长度要求(默认是 8 位),如果你想设置更短的密码 如下

SET GLOBAL validate_password_length = 6;

MySQL 5.7 有默认的密码强度要求(需包含大小写字母、数字和特殊字符),如果不想设置复杂密码,可以先调整密码验证策略,再执行修改命令。

7. 额外说明

关于版本:你提到的 `5.7.20` 是一个较旧的版本。通过上述官方 Yum 源安装的,会是 MySQL 5.7 系列中最新的 GA(General Availability)稳定版,其核心功能和操作与 `5.7.20` 是一致的。

安装路径:通过 yum 安装的 MySQL,文件会分布在系统默认目录,例如配置文件在 `/etc/my.cnf`,数据文件在 `/var/lib/mysql`,日志文件在 `/var/log/mysqld.log`。

备用方案:除了 yum,MySQL 5.7.20 也可以通过源码编译或下载通用二进制包(glibc版)进行安装,但过程会更繁琐,涉及手动配置和依赖处理,适合对定制化有极高要求的场景。

8.开启远程连接(Navicat/DBeaver 远程连接测试)

# 重新登录mysql mysql -uroot -pRoot@123456 # 创建允许任意IP访问的root用户(企业测试环境使用) GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Root@123456'; FLUSH PRIVILEGES;

生产环境不要用 root@%,单独创建业务账号

CREATE USER 'root'@'%' IDENTIFIED BY 'Root@123456'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; flush privileges;

9.远程连接验证

使用 Navicat、DBeaver 连接:

  • IP:10.8.0.13
  • 端口:3306
  • 用户:root
  • 密码:Root@123456 连接成功即为交付达标。

启动mysql

10、常见故障及解决方法

故障现象

原因

解决方案

yum 安装 mysql 报 GPG 密钥校验失败

MySQL 旧密钥失效

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

systemctl start mysqld 启动失败

1. selinux 未关;2. 数据目录权限异常;3. 端口占用

1. setenforce 0;2. chown mysql:mysql /var/lib/mysql -R;3. netstat -lntp

grep 抓不到临时密码

之前初始化过 mysql,日志没有临时密码

删除数据目录,重新初始化:rm -rf /var/lib/mysql/* && systemctl restart mysqld

远程 Navicat 连不上

防火墙没放行 3306、授权是 root@localhost

、IP 不通

firewall 放行端口 + 执行 grant root@% 授权

修改密码提示密码策略不通过

5.7 密码策略默认 MEDIUM,要求长度 + 符号大小写

设置符合复杂度密码;测试环境可临时降低策略:set global validate_password_policy=LOW;

yum 安装自动装成 5.7.44 不是 5.7.20

仓库默认最新小版本,没有锁定版本

使用yum install mysql-community-server-5.7.20

指定完整版本安装

mysql 命令找不到

包没有安装成功,或者环境变量

重新 yum 安装,安装成功后自动生成 mysql 命令

二、安装 MySQL 8.0

1、服务器环境及 IP 规划

项目

参数

操作系统

CentOS 7.x(推荐 CentOS7.9)

主机名

node04

IP 地址

10.8.0.13(你按需改成自己虚拟机 IP)

数据库版本

MySQL 5.7.20

数据库端口

3306

数据目录

/var/lib/mysql

配置文件

/etc/my.cnf

日志文件

/var/log/mysqld.log

运行用户

mysql(系统内置)

防火墙

firewalld

规划说明:单实例部署,用于业务测试,关闭 SELinux、放行 3306 端口方便远程连接。

【ip a 查看 IP、hostname 查看主机名】

2、前置准备工作

重要:CentOS7 自带 mariadb,必须先卸载,否则和 MySQL5.7 冲突

2.1 关闭 SELinux(永久)

# 临时关闭 setenforce 0 # 永久关闭 sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 查看状态 getenforce

Permissive :临时已经关闭(宽容模式,只告警不拦截)

setenforce 0:只是临时生效,重启后失效;

sed 那条是修改配置文件,重启机器之后才会变成 disabled(彻底关闭)

2.2 关闭防火墙(或者放行 3306,二选一,生产建议放行端口)

# 方案A:关闭防火墙(测试机使用) systemctl stop firewalld systemctl disable firewalld # 方案B:放行3306(企业推荐) firewall-cmd --add-port=3306/tcp --permanent firewall-cmd --reload firewall-cmd --list-all

2.3 卸载自带 mariadb 相关包

# 查询mariadb rpm -qa | grep mariadb # 卸载(查到什么删什么) rpm -e --nodeps mariadb-libs

如果没有输出代表没有安装,直接跳过卸载

2.4 配置 MySQL 8.0 Yum源

下载 MySQL 8.0 官方 Yum 源:

cd /opt

wget https://repo.mysql.com/mysql80-community-release-el7-11.noarch.rpm

安装:

rpm -ivh mysql80-community-release-el7-11.noarch.rpm

查看仓库:

yum repolist all | grep mysql

2.5、指定 MySQL 8.0版本 8.0.36

查看可用版本:

yum list mysql-community-server --showduplicates

选择:

mysql-community-server-8.0.36

安装指定版本:

yum install -y \

mysql-community-server-8.0.36 \

mysql-community-client-8.0.36 \

mysql-community-common-8.0.36

3、启动 MySQL服务

启动:

systemctl start mysqld

设置开机启动:

systemctl enable mysqld

查看状态:

systemctl status mysqld

4、查看 MySQL版本

mysql --version

显示:mysql Ver 8.0.36 for Linux on x86_64

5、获取初始化密码

MySQL 8.0.36 第一次启动会生成临时密码:

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

6、修改root密码

6.1 登录:

mysql -uroot -p

输入临时密码登录。

密码如果乱了,重新走一遍重置 root 密码流程(MySQL8.0)

①修改 my.cnf,加上跳过权限参数
vim /etc/my.cnf

在[mysqld]段下面添加一行:(测试远程连接需要再删除)

skip-grant-tables

保存退出。

②重启 mysql
systemctl restart mysqld
③免密登录 mysql(这次不用密码)
mysql -uroot

6.2 修改密码策略:

set global validate_password.policy=0;

set global validate_password.length=6;

6.3 修改root密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

开启了 skip-grant-tables 时,不能直接执行 ALTER USER,必须先执行flush privileges;加载权限表!

在当前 mysql 窗口,按顺序敲:

flush privileges;

执行成功后,再执行改密码语句(MySQL5.7 用这条):

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('Root123456'); SET PASSWORD FOR 'root'@'%' = PASSWORD('Root123456'); flush privileges;

7、开启远程访问

7.1 创建远程root用户:

CREATE USER 'root'@'%' IDENTIFIED BY '123456';

7.2 授权:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

7.3 刷新权限:

FLUSH PRIVILEGES;

8、防火墙开放3306

firewall-cmd \ --add-port=3306/tcp \ --permanent

firewall-cmd --reload

9、测试登录

9.1 本机测试:

mysql -uroot -p123456

9.2 查看数据库:

show databases;

10、验证安装

10.1 查看版本:

mysql -V

10.2 查看监听:

ss -ntl | grep 3306

结果:

LISTEN 0 128 *:3306

10.3 登录测试:

mysql -uroot -p123456 -e "select version();"

输出:

+-----------+
| version() |
+-----------+
| 8.0.36 |
+-----------+

11、常见故障及解决方法

故障现象

故障原因

解决方案

yum 安装报 GPG 密钥校验失败

MySQL 旧 GPG 密钥过期

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

mysqld 启动失败

1.SELinux 未关闭;2. 数据目录权限异常;3. 端口占用

1.setenforce 0;2.chown mysql:mysql /var/lib/mysql -R

;3.`netstat -lntp

grep 3306`

grep 抓不到临时密码

数据目录残留旧初始化文件

rm -rf /var/lib/mysql/* && systemctl restart mysqld

Navicat 远程连不上,报认证插件错误

8.0 默认 caching_sha2_password,客户端不兼容

创建用户指定mysql_native_password

修改密码提示不符合密码策略

8.0 默认密码策略 MEDIUM,复杂度高

设置大小写 + 数字 + 符号;测试环境临时降低策略:set global validate_password.policy=LOW;

远程连接超时

防火墙 3306 端口未放行

firewall-cmd 放行端口并重载

mysql 命令找不到

安装未完成

重新执行 yum install mysql-community-server

登录报错 Access denied

密码输错、授权主机不对

核对密码;检查 root@% 授权语句

三、MySQL 5.7.20 vs MySQL 8.0 核心区别

重点:你现在踩坑的密码认证插件就是二者最经典差异,也是Navicat连不上的根源

1. 用户密码认证(最高频考点、排错重点⭐)

  • MySQL 5.7:默认mysql_native_password
    Navicat、旧客户端直接连,无兼容问题
  • MySQL 8.0:默认caching_sha2_password
    老版本Navicat不支持,直接报1045访问拒绝,需要手动改成mysql_native_password
-- 8.0兼容Navicat写法 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';

2. 数据字典 & 架构

  • 5.7:数据字典存放在独立的frm、ibd文件,元数据是文件形式
  • 8.0:数据字典内置在InnoDB系统表,不再有frm文件;DDL是原子化(崩溃安全)
    5.7执行alter表容易锁表、元数据锁阻塞,8.0 DDL稳定性更好

3. 字符集默认值

  • 5.7 默认:latin1
  • 8.0 默认:utf8mb4(真正完整utf8,支持emoji表情),排序规则utf8mb4_0900_ai_ci

4. 窗口函数(面试常考)

  • 5.7:没有窗口函数(row_number()、rank()、dense_rank() 都不能用)
  • 8.0:原生支持窗口函数、CTE(WITH递归公共表达式),分析查询非常方便

5. 索引 & 优化器

  • 8.0新增:降序索引、隐藏索引、不可见索引、函数索引;
    5.7只有普通索引,不支持这些

6. 权限管理

  • 5.7:grant可以隐式创建用户
grant all on *.* to root@'%' identified by 'xxx'; --5.7合法
  • 8.0:grant不再创建用户,必须先create user,再grant授权,分开两步!

很多人8.0写5.7的授权语句直接报错

7. 自增主键持久化

  • 5.7:重启MySQL,自增值会重置(最大值+1,有坑)
  • 8.0:自增值持久化写入redo log,重启不丢失,业务更稳

8. JSON支持

  • 5.7:有JSON类型,但函数少、性能弱
  • 8.0:JSON增强,支持JSON路径表达式、JSON索引

9. 配置参数差异(你重置密码会碰到)

  • 5.7密码插件参数:default_authentication_plugin=mysql_native_password
  • 8.0默认:default_authentication_plugin=caching_sha2_password

10. 并发、锁、事务

  • 8.0 改进InnoDB,支持原子DDL、锁机制优化、ReadView复用,高并发表现更好

✅ 一句话给你排坑总结(贴合你现在Navicat 1045问题)

  • 如果是MySQL5.7:默认native密码,Navicat基本直接连,不用改认证插件;授权可以一条grant创建用户
  • 如果是MySQL8.0:默认sha2密码,老Navicat必报错,必须改mysql_native_password;授权要先create user

11.简单对比表

项目

MySQL5.7.20

MySQL8.0

默认认证插件

mysql_native_password

caching_sha2_password

默认字符集

latin1

utf8mb4

窗口函数

❌不支持

✅支持

CTE递归

❌

✅

grant建用户

✅支持

❌禁止,必须分开

自增持久化

❌重启重置

✅持久化

frm文件

有

取消

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询