CentOS 7 安装 MySQL 8 保姆级教程

CentOS 7 安装 MySQL 8 保姆级教程(含初始化、远程连接、避坑)

在 CentOS 7 上搭 MySQL 8,看似一条 yum install 的事,实际新手 90% 会卡在三个地方:临时密码找不到、改密码被策略拦、远程连不上。本文从环境检查到远程连接打通,全程实测,把每个坑都填平。

测试环境说明

本文操作基于以下环境测试通过:

复制代码
CentOS Linux release 7.6.1810 (Core)
Linux localhost 3.10.0-957.el7.x86_64
MySQL 8.0.x

Ubuntu / Debian 用户思路一致,只是安装命令换成 apt,仓库源不同,本文以 CentOS 7 为主。

一、检查系统是否已安装 MySQL / MariaDB

CentOS 7 默认会带 MariaDB(MySQL 的社区分支),如果直接装 MySQL 可能冲突。先查一下:

bash 复制代码
rpm -qa | grep -i mysql
rpm -qa | grep -i mariadb
  • 有输出说明已安装相关包,需要走第二节卸载
  • 无输出说明是干净的,可直接跳到第三节

二、卸载已安装的版本(如有)

bash 复制代码
# 逐个卸载(替换成上一步查到的包名)
yum remove -y mysql mysql-server mariadb mariadb-server

# 清理残留数据目录(重要!否则新装会沿用旧数据/配置)
rm -rf /var/lib/mysql
rm -rf /etc/my.cnf

⚠️ 生产环境删数据目录前务必确认已备份,这一步不可逆。

三、安装 MySQL 8

3.1 添加 MySQL 官方 Yum 仓库

bash 复制代码
# 下载 MySQL 8.0 的 Yum 仓库包(社区版,免费)
wget https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm

# 安装仓库
rpm -ivh mysql80-community-release-el7-11.noarch.rpm

如果服务器无法访问外网,也可以在能上网的机器下载好 rpm 再 scp 传上去。

3.2 安装 MySQL 服务端

bash 复制代码
yum install -y mysql-community-server

安装完成后,可执行文件在 /usr/sbin/mysqld,数据目录默认 /var/lib/mysql。

3.3 启动并设置开机自启

bash 复制代码
# 启动
systemctl start mysqld

# 查看状态
systemctl status mysqld

# 设置开机自启
systemctl enable mysqld

看到 active (running) 说明启动成功。

四、获取初始临时密码

MySQL 8 首次启动会为 root 生成一个临时密码,存在日志里:

bash 复制代码
grep 'temporary password' /var/log/mysqld.log

输出类似:

复制代码
[Note] A temporary password is generated for root@localhost: aB3&kPq9Xy!m

记下这个密码,下一步登录要用。

五、登录并修改 root 密码

bash 复制代码
mysql -u root -p
# 输入刚才的临时密码

登录后第一件事就是改密码,否则什么都做不了:

sql 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass#2026';

⚠️ MySQL 8 默认开启 validate_password 策略,密码必须包含大小写字母 + 数字 + 特殊字符 ,且长度≥8。太简单会报 ERROR 1819。

如果只想本地测试、想要简单密码,可先降低策略再改:

sql 复制代码
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 6;

六、配置远程连接

默认 root 只允许 localhost 登录,外网/其他机器连不上。两种方式:

方式一:授权 root 远程登录(测试环境可用)

sql 复制代码
-- MySQL 8 必须先建用户再授权,不能直接 GRANT 创建用户
CREATE USER 'root'@'%' IDENTIFIED BY 'NewPass#2026';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

方式二:新建专用远程账号(生产推荐)

sql 复制代码
CREATE USER 'remote'@'%' IDENTIFIED BY 'Remote#2026';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'remote'@'%';
FLUSH PRIVILEGES;

放行防火墙端口

bash 复制代码
# firewalld 放行 3306
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

# 确认
firewall-cmd --list-ports

云服务器还要在安全组里放行 3306 入方向,否则防火墙放了也没用。

七、常见问题排查

1. 远程连接报 2059 - authentication plugin

MySQL 8 默认用 caching_sha2_password,老版本的 Navicat / 驱动不认。改为旧插件:

sql 复制代码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'NewPass#2026';
FLUSH PRIVILEGES;

2. 忘记 root 密码

bash 复制代码
# 停止服务
systemctl stop mysqld

# 免密启动
mysqld_safe --skip-grant-tables &

# 直接登录(无需密码)
mysql -u root

登录后刷新权限再改密码:

sql 复制代码
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass#2026';

改完 kill 掉 mysqld_safe 进程,正常 systemctl start mysqld 即可。

3. 启动失败,日志提示端口/目录权限

bash 复制代码
# 确认数据目录属主
chown -R mysql:mysql /var/lib/mysql

# 查看错误日志定位
cat /var/log/mysqld.log | tail -50

4. 客户端连不上但本地能进

按优先级检查:① 防火墙 3306 是否放行 → ② 云安全组 → ③ 用户是否 '%' 而非 localhost → ④ 认证插件是否为 mysql_native_password。

写在最后

到这一步,你已经拥有一台可远程访问的 MySQL 8 实例,可以接着部署 Spring Boot、Tomcat 等 Java 应用了。

核心记住三件事:临时密码在日志里、密码策略默认很严、远程连不上先查防火墙和安全组 。觉得本文有帮助,别忘了 点赞 👍 + 收藏 ⭐,你的支持是我持续输出的动力!

相关推荐
syagain_zsx22 分钟前
spdlog实战:日志分级、滚动与性能调优
linux·c++·日志库·二次开发日志库
这个DBA有点耶12 小时前
从症状到根因:数据库监控指标的分层方法与静态/动态阈值策略
数据库·mysql·代码规范
GeW13 小时前
新质生产力路线图Linux、数据库、国产化替代一次讲透
linux
ProcessOn14 小时前
纯干货!MySql实战02:一条SQL更新语句执行流程大探索!
sql·mysql·sql server
aningx15 小时前
cachyos 从 GRUB 切换到 rEFInd
linux
这个DBA有点耶15 小时前
DELETE没删多少数据,表却越来越大——InnoDB删除空洞与页合并失效的根因
数据库·mysql·代码规范
第404号工位16 小时前
40块钱二手瘦客户端,如何跑满家庭物联网中枢?(拒绝Docker爆盘实录)
linux·架构·node.js
骑着蜗牛撵大象32718 小时前
Linux 进程间通信之管道:从 pipe() 的内核语义到 FIFO 落地排错
android·java·linux·系统编程·fifo·管道·进程间通信
..Dauntless..18 小时前
【Linux】一切皆文件和缓冲区
linux·运维·服务器
QMCY_jason18 小时前
x86 ubuntu2204 无gui 安装 openeuler 2203 aarch64版本
linux·运维·服务器