Linux 安装 MySQL 与远程连接排障(yum 方案)


1. 这篇文章你能学到什么

  • yum 在 Linux 上安装 MySQL(以常见的 CentOS 7/8 生态为例)
  • 启动/停止/设置开机自启
  • 初始化 root 密码、创建数据库与账号
  • (可选)开放远程连接:安全组/防火墙/MySQL 权限与绑定地址
  • 常见报错的排障思路

目录

  • 先确认系统与安装路线
  • 再完成 MySQL 安装、初始化和授权
  • 最后处理远程连接与常见报错排障

2. 安装前确认系统与包管理器

先确认系统版本(不同发行版命令略有差异):

bash 复制代码
cat /etc/os-release

确认 yum 可用:

bash 复制代码
yum --version

3. 安装 MySQL(两条路线)

3.1 路线一:安装 MariaDB(最省事,适合入门)

说明:在不少发行版里,mysql 实际会被 MariaDB 替代。

bash 复制代码
yum install -y mariadb mariadb-server

启动并设置开机自启:

bash 复制代码
systemctl start mariadb
systemctl enable mariadb
systemctl status mariadb

3.2 路线二:安装 MySQL Community(更贴近真实 MySQL)

通常需要先添加 MySQL 官方仓库(不同系统略有不同),然后再安装:

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

启动并设置开机自启:

bash 复制代码
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld

4. 初始化与安全加固(强烈建议做)

4.1 初始化安全脚本(推荐)

MariaDB:

bash 复制代码
mysql_secure_installation

MySQL:

bash 复制代码
mysql_secure_installation

你需要按提示完成:

  • 设置 root 密码
  • 删除匿名用户
  • 禁止 root 远程登录(如只是学习阶段也可按需选择)
  • 删除 test 库
  • 刷新权限表

4.2 登录验证

bash 复制代码
mysql -uroot -p

5. 创建数据库、用户与授权(最常用)

进入 MySQL 后:

sql 复制代码
-- 1) 建库
CREATE DATABASE demo DEFAULT CHARACTER SET utf8mb4;

-- 2) 创建用户('%' 表示允许任意 IP;更安全的是写固定 IP 或网段)
CREATE USER 'app'@'%' IDENTIFIED BY 'StrongPassword_123';

-- 3) 授权
GRANT ALL PRIVILEGES ON demo.* TO 'app'@'%';

-- 4) 刷新权限
FLUSH PRIVILEGES;

如果你只是想走一遍最小安装链路,可以按这个顺序做:

  1. yum install
  2. systemctl start mysqldsystemctl start mariadb
  3. mysql_secure_installation
  4. mysql -uroot -p
  5. 建库、建用户、授权
  6. 需要远程连时,再处理安全组、防火墙和 bind-address

6. 远程连接(可选,学习阶段常用,上线谨慎)

6.1 云服务器安全组

需要放行:

  • 3306(MySQL)

建议:

  • 只放行你本机公网 IP(白名单),不要全网开放。

6.2 系统防火墙(不同系统不同)

如果是 firewalld:

bash 复制代码
firewall-cmd --list-ports
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload

6.3 MySQL 绑定地址(关键坑)

如果 MySQL 只监听 127.0.0.1,外网一定连不上。

  • 找到配置文件(常见路径之一):
    • /etc/my.cnf
    • /etc/mysql/my.cnf
    • /etc/my.cnf.d/*.cnf

grep 查:

bash 复制代码
grep -R "bind-address" -n /etc 2>/dev/null | head

如果存在:

  • bind-address=127.0.0.1 只允许本机
  • 改成 0.0.0.0 表示监听所有网卡(学习阶段可用,上线谨慎)

修改后重启:

bash 复制代码
systemctl restart mysqld
# 或 systemctl restart mariadb

7. 快速排障清单(最常见)

7.1 本机能连,外网连不上

按顺序排:

  • MySQL 是否真的在运行:
bash 复制代码
ps -ef | grep mysql
  • 端口是否监听:
bash 复制代码
ss -lntp | grep 3306
  • 安全组是否放行 3306
  • 系统防火墙是否放行 3306
  • MySQL 用户授权是否允许远程('user'@'%'
  • bind-address 是否限制了本机

7.2 报错:Access denied for user

常见原因:

  • 用户名/密码不对
  • 授权 host 不对(比如只授权了 'app'@'localhost'
  • 忘了 FLUSH PRIVILEGES

7.3 报错:Can't connect to MySQL server / Connection timed out

常见原因:

  • 端口没放行(安全组/防火墙)
  • MySQL 没监听公网(bind-address
  • 服务没启动

8. 建议的上线姿势(安全提醒)

  • 不要把 3306 对公网全开放
  • 用内网访问(同 VPC)或 VPN / 堡垒机
  • 强密码 + 最小权限账号
  • 定期备份(mysqldump 或定时快照)

9. 小结

MySQL 安装看起来命令不多,但真正容易出问题的是"远程连接链路":

  • 服务是否启动
  • 3306 是否监听
  • 安全组/防火墙是否放行
  • 用户授权 host 是否正确
  • bind-address 是否限制本机

只要你按这条链排查,大多数"本机能连、远程连不上"的问题都能快速定位。

相关推荐
我星期八休息5 小时前
网络编程—应用层HTTP协议
linux·运维·开发语言·前端·网络·网络协议·http
一个天蝎座 白勺 程序猿6 小时前
从电网改造踩坑说起:深度拆解时序大模型TimechoAI的自主可控与安全合规底气
大数据·运维·服务器·大模型·timechoai
ShineWinsu6 小时前
对于Linux:UDPsocket编程基础的解析
linux·运维·网络协议·udp·ip·端口号·进程间通信
hehelm6 小时前
AI大模型接入SDK—通用模块设计
linux·开发语言·c++
宠友信息7 小时前
消息序号如何保证即时通讯源码聊天记录稳定加载
java·spring boot·redis·python·mysql·uni-app
Spider Cat 蜘蛛猫7 小时前
Anthropic的skill-creator使用分享
运维·服务器
Ai拆代码的曹操9 小时前
K8s Pod Pending 逐层排查:从 FailedScheduling 到 PVC StorageClass 不存在的实战记录
java·linux·kubernetes
笨蛋不要掉眼泪10 小时前
MySQL架构揭秘:慢查询日志详解
数据库·mysql·架构
Yang961110 小时前
探索无线新视界:鼎讯信通DXMP系列频谱仪模块深度剖析
运维·网络
wangbing112510 小时前
JPA下自定义主键
java·linux·服务器