Java 服务器: Linux-MySQL的rpm安装与初始化配置

Java框架上手实践之安装MySQL: rpm包依赖处理、服务注册与初始密码重置

纲要

本文以 MySQL 5.7 为载体,完整演示 rpm 安装方式的全流程,重点解决三个真实问题:与系统自带 MariaDB 的冲突、安装包之间的依赖顺序、以及首次登录的临时密码处理。

  • 安装前环境检查
    • rpm -qa | grep mysql 检测是否已安装
    • rpm -qa | grep mariadb 检测冲突软件
    • rpm -e --nodeps 强制卸载冲突包
  • rpm 包安装顺序
    • 六个 rpm 包必须按依赖顺序安装
    • net-tools 缺失导致的依赖失败与 yum 补救
  • 服务管理与连接
    • systemctl 启动 / 查看状态 / 设置开机自启
    • netstat -tunlpps -ef 双重校验
    • /var/log/mysqld.log 提取临时密码
    • 修改密码策略、重置密码、开启远程访问授权
  • 关键认知
    • rpm 等价于 Windows 的 .exe 安装程序
    • rpm 不自动解决依赖 ,这是与 yum 的本质差异

rpm 包管理器

rpmRed Hat Package Manager 的缩写,RPM 三个字母分别对应:

字母 全称 含义
R Red Hat 红帽
P Package 软件包
M Manager 管理器

CentOS 可以视为红帽 Linux 的免费版本,因此完整支持 rpm 体系。rpm 的定位类似于 Windows 下的 .exe 安装程序:下载后直接运行即可安装,同时它维护着一套 rpm 数据库,记录系统中所有已安装的软件包,支持查询与卸载。

核心限制rpm 只负责安装单个包,不会自动下载并安装该包所依赖的其他包。这是理解后续安装顺序与报错处理的前提。

安装前环境检查

CentOS 7 默认自带 MariaDBMySQL 的一个分支),它与我们要安装的 MySQL 存在文件冲突。若不先行卸载,MySQL 必然安装失败。

bash 复制代码
# 查询系统中已安装的所有软件包,并过滤 mysql
rpm -qa | grep mysql

# 查询系统中是否已安装 mariadb
rpm -qa | grep mariadb

参数说明:

参数 含义
-q query,查询模式
-a all,查询所有已安装的软件包
` `

rpm -qa 会输出成百上千行,必须用管道符配合 grep 才能定位目标。本文环境中 grep mysql 无输出(未安装),而 grep mariadb 有输出(系统自带)。

卸载冲突软件

bash 复制代码
# 查询出完整的包名
rpm -qa | grep mariadb
# 输出示例:mariadb-libs-5.5.56-2.el7.x86_64

# 强制卸载,忽略依赖关系
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

# 再次确认已卸载干净
rpm -qa | grep mariadb
参数 含义
-e erase,卸载
--nodeps 不校验依赖关系,强制卸载

注意--nodeps 会跳过依赖检查,仅用于卸载系统自带的冲突包。对业务软件的卸载应避免使用,以免破坏依赖该包的其它程序。

安装 MySQL

准备安装包

课程资料提供的是 mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar.gz(约 197 MB),内含六个 rpm 安装包。

bash 复制代码
# 1. 创建专用目录
mkdir /usr/local/mysql

# 2. 移动安装包到该目录
mv mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar.gz /usr/local/mysql/

# 3. 进入目录并解压
cd /usr/local/mysql
tar -zxvf mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar.gz

解压后得到六个 rpm 文件:

txt 复制代码
mysql-community-common-5.7.25-1.el7.x86_64.rpm
mysql-community-libs-5.7.25-1.el7.x86_64.rpm
mysql-community-devel-5.7.25-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm
mysql-community-client-5.7.25-1.el7.x86_64.rpm
mysql-community-server-5.7.25-1.el7.x86_64.rpm

按依赖顺序安装

这六个包之间存在依赖关系,必须按固定顺序安装,否则会因前置依赖缺失而失败。
#mermaid-svg-5oifXOPfsho63AmY{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5oifXOPfsho63AmY .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5oifXOPfsho63AmY .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5oifXOPfsho63AmY .error-icon{fill:#552222;}#mermaid-svg-5oifXOPfsho63AmY .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5oifXOPfsho63AmY .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5oifXOPfsho63AmY .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5oifXOPfsho63AmY .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5oifXOPfsho63AmY .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5oifXOPfsho63AmY .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5oifXOPfsho63AmY .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5oifXOPfsho63AmY .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5oifXOPfsho63AmY .marker.cross{stroke:#333333;}#mermaid-svg-5oifXOPfsho63AmY svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5oifXOPfsho63AmY p{margin:0;}#mermaid-svg-5oifXOPfsho63AmY .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-5oifXOPfsho63AmY .cluster-label text{fill:#333;}#mermaid-svg-5oifXOPfsho63AmY .cluster-label span{color:#333;}#mermaid-svg-5oifXOPfsho63AmY .cluster-label span p{background-color:transparent;}#mermaid-svg-5oifXOPfsho63AmY .label text,#mermaid-svg-5oifXOPfsho63AmY span{fill:#333;color:#333;}#mermaid-svg-5oifXOPfsho63AmY .node rect,#mermaid-svg-5oifXOPfsho63AmY .node circle,#mermaid-svg-5oifXOPfsho63AmY .node ellipse,#mermaid-svg-5oifXOPfsho63AmY .node polygon,#mermaid-svg-5oifXOPfsho63AmY .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5oifXOPfsho63AmY .rough-node .label text,#mermaid-svg-5oifXOPfsho63AmY .node .label text,#mermaid-svg-5oifXOPfsho63AmY .image-shape .label,#mermaid-svg-5oifXOPfsho63AmY .icon-shape .label{text-anchor:middle;}#mermaid-svg-5oifXOPfsho63AmY .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5oifXOPfsho63AmY .rough-node .label,#mermaid-svg-5oifXOPfsho63AmY .node .label,#mermaid-svg-5oifXOPfsho63AmY .image-shape .label,#mermaid-svg-5oifXOPfsho63AmY .icon-shape .label{text-align:center;}#mermaid-svg-5oifXOPfsho63AmY .node.clickable{cursor:pointer;}#mermaid-svg-5oifXOPfsho63AmY .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5oifXOPfsho63AmY .arrowheadPath{fill:#333333;}#mermaid-svg-5oifXOPfsho63AmY .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5oifXOPfsho63AmY .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5oifXOPfsho63AmY .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5oifXOPfsho63AmY .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5oifXOPfsho63AmY .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5oifXOPfsho63AmY .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5oifXOPfsho63AmY .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5oifXOPfsho63AmY .cluster text{fill:#333;}#mermaid-svg-5oifXOPfsho63AmY .cluster span{color:#333;}#mermaid-svg-5oifXOPfsho63AmY div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5oifXOPfsho63AmY .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5oifXOPfsho63AmY rect.text{fill:none;stroke-width:0;}#mermaid-svg-5oifXOPfsho63AmY .icon-shape,#mermaid-svg-5oifXOPfsho63AmY .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5oifXOPfsho63AmY .icon-shape p,#mermaid-svg-5oifXOPfsho63AmY .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5oifXOPfsho63AmY .icon-shape .label rect,#mermaid-svg-5oifXOPfsho63AmY .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5oifXOPfsho63AmY .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5oifXOPfsho63AmY .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5oifXOPfsho63AmY :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 缺失
已安装
common

通用组件
libs

客户端共享库
libs-compat

兼容库
client

客户端
devel

开发头文件
server

服务端
依赖 net-tools ?
报错: net-tools is needed
安装成功
yum install net-tools

bash 复制代码
cd /usr/local/mysql

# 1. 通用组件
rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm

# 2. 客户端共享库
rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm

# 3. 开发头文件
rpm -ivh mysql-community-devel-5.7.25-1.el7.x86_64.rpm

# 4. 兼容库
rpm -ivh mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm

# 5. 客户端
rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm

# 6. 服务端(最大的包,耗时最长)
rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm
参数组合 含义
-i install,安装
-v verbose,显示详细信息
-h hash,以 # 显示安装进度条

处理依赖失败

执行第 6 步安装 server 包时,典型报错如下:

复制代码
error: Failed dependencies:
    net-tools is needed by mysql-community-server-5.7.25-1.el7.x86_64

这是 rpm 不自动解决依赖的直接体现。解决方式是借助 yum 在线安装缺失的依赖包:

bash 复制代码
yum install net-tools
# 提示确认时输入 y

# 依赖补齐后重新安装 server 包
rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm

实践要点 :这个报错本身就是一个完整的教学案例------rpm 负责安装,yum 负责补依赖,二者配合使用才是真实工作流。

补充:yum update 会升级系统中已安装的软件及 Linux 内核相关组件,该操作会下载数百 MB 的 rpm 包,需要网络连通,生产环境执行前应评估风险。

启动服务并校验

通过 rpm 方式安装的 MySQL,会自动在系统中注册为名为 mysqld 的服务 ,因此可以用 systemctl 统一管理。

bash 复制代码
# 查看服务状态(未启动时显示 dead)
systemctl status mysqld

# 启动服务
systemctl start mysqld

# 再次查看状态(应显示 active (running))
systemctl status mysqld

# 设置开机自动启动,避免每次重启手工执行
systemctl enable mysqld
systemctl 子命令 作用
start 启动服务
stop 停止服务
restart 重启服务
status 查看服务状态
enable 设置开机自启
disable 取消开机自启

端口与进程双重校验

bash 复制代码
# 查看系统已启动的监听端口(-tunlp 为固定组合)
netstat -tunlp

# 只过滤 mysql 相关
netstat -tunlp | grep mysql

# 通过进程方式校验
ps -ef | grep mysql
netstat 参数 含义
-t 显示 TCP 连接
-u 显示 UDP 连接
-n 以数字形式显示地址和端口,不做域名解析
-l 仅显示处于监听状态的服务
-p 显示占用该端口的进程信息

netstat 命令由 net-tools 软件包提供,这正是上一步必须安装它的原因------装完才用得上。

登录 MySQL 与重置密码

MySQL 5.7 在首次启动时会生成一个临时密码并写入日志文件,必须先用它登录,然后才能修改密码。

提取临时密码

bash 复制代码
# 查看日志并过滤 password 关键字
cat /var/log/mysqld.log | grep password

# 等价写法
grep password /var/log/mysqld.log

输出示例:

复制代码
2023-01-01T10:24:31.123456Z 1 [Note] A temporary password is generated for root@localhost: aB3!cD7eFgHi

冒号后的 aB3!cD7eFgHi 即为临时密码。

首次登录

bash 复制代码
mysql -uroot -p
# 在提示符后粘贴临时密码(输入过程不回显)

降低密码策略并修改密码

MySQL 5.7 默认启用 validate_password 插件,要求密码具备足够长度与复杂度。练习环境可先降低策略:

sql 复制代码
-- 设置密码最小长度为 4
set global validate_password_length=4;

-- 设置密码安全等级为 LOW
set global validate_password_policy=LOW;

-- 修改 root 密码为 root
set password = password('root');

高频坑点set password = password('root'); 中的单引号、括号、分号必须是英文半角字符。若从文档或聊天窗口复制,极易混入中文全角引号,导致语法报错。报错时手工重敲一遍即可。

开启远程访问授权

sql 复制代码
-- 授权 root 用户可从任意 IP 访问(% 匹配所有地址)
grant all on *.* to 'root'@'%' identified by 'root';

-- 刷新权限,使授权立即生效
flush privileges;

授权说明:

片段 含义
all 所有权限
*.* 所有数据库的所有表
'root'@'%' 用户名为 root,来源主机为任意
identified by 'root' 远程连接使用的密码

验证

bash 复制代码
# 使用新密码登录
mysql -uroot -proot

# 查看数据库列表
show databases;

随后在 Windows 端使用数据库客户端新建连接,主机填 192.168.138.130、端口 3306、用户名 root、密码 root,测试连接成功即说明远程访问已打通。

若连接失败,检查防火墙是否放行 3306 端口:

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

完整流程时序

mysqld 服务 rpm 数据库 Linux 系统 运维人员 mysqld 服务 rpm 数据库 Linux 系统 运维人员 #mermaid-svg-78IDJEiTuz9Z7t7C{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-78IDJEiTuz9Z7t7C .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-78IDJEiTuz9Z7t7C .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-78IDJEiTuz9Z7t7C .error-icon{fill:#552222;}#mermaid-svg-78IDJEiTuz9Z7t7C .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-78IDJEiTuz9Z7t7C .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-78IDJEiTuz9Z7t7C .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-78IDJEiTuz9Z7t7C .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-78IDJEiTuz9Z7t7C .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-78IDJEiTuz9Z7t7C .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-78IDJEiTuz9Z7t7C .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-78IDJEiTuz9Z7t7C .marker{fill:#333333;stroke:#333333;}#mermaid-svg-78IDJEiTuz9Z7t7C .marker.cross{stroke:#333333;}#mermaid-svg-78IDJEiTuz9Z7t7C svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-78IDJEiTuz9Z7t7C p{margin:0;}#mermaid-svg-78IDJEiTuz9Z7t7C .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-78IDJEiTuz9Z7t7C text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-78IDJEiTuz9Z7t7C .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-78IDJEiTuz9Z7t7C .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-78IDJEiTuz9Z7t7C .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-78IDJEiTuz9Z7t7C .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-78IDJEiTuz9Z7t7C #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-78IDJEiTuz9Z7t7C .sequenceNumber{fill:white;}#mermaid-svg-78IDJEiTuz9Z7t7C #sequencenumber{fill:#333;}#mermaid-svg-78IDJEiTuz9Z7t7C #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-78IDJEiTuz9Z7t7C .messageText{fill:#333;stroke:none;}#mermaid-svg-78IDJEiTuz9Z7t7C .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-78IDJEiTuz9Z7t7C .labelText,#mermaid-svg-78IDJEiTuz9Z7t7C .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-78IDJEiTuz9Z7t7C .loopText,#mermaid-svg-78IDJEiTuz9Z7t7C .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-78IDJEiTuz9Z7t7C .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-78IDJEiTuz9Z7t7C .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-78IDJEiTuz9Z7t7C .noteText,#mermaid-svg-78IDJEiTuz9Z7t7C .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-78IDJEiTuz9Z7t7C .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-78IDJEiTuz9Z7t7C .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-78IDJEiTuz9Z7t7C .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-78IDJEiTuz9Z7t7C .actorPopupMenu{position:absolute;}#mermaid-svg-78IDJEiTuz9Z7t7C .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-78IDJEiTuz9Z7t7C .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-78IDJEiTuz9Z7t7C .actor-man circle,#mermaid-svg-78IDJEiTuz9Z7t7C line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-78IDJEiTuz9Z7t7C :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} loop 按依赖顺序 server 包报 net-tools is needed rpm -qa | grep mariadb 返回 mariadb-libs rpm -e --nodeps mariadb-libs tar -zxvf 解压六个 rpm 包 rpm -ivh xxx.rpm 成功 / 依赖缺失报错 yum install net-tools rpm -ivh server 包 systemctl start mysqld systemctl status mysqld active (running) grep password /var/log/mysqld.log 返回临时密码 mysql -uroot -p 登录 降低策略并 set password grant 授权 + flush privileges

完整可运行代码

MySQL 安装与初始化脚本

bash 复制代码
#!/bin/bash
# ============================================================
# 功能:rpm 方式安装 MySQL 5.7 并完成初始化配置
# 用法:chmod +x install_mysql.sh && ./install_mysql.sh
# 前置:mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar.gz 已上传至 /root
# ============================================================

set -e

MYSQL_DIR="/usr/local/mysql"
PKG_TAR="mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar.gz"
NEW_PASSWORD="root"

# 1. 卸载冲突的 mariadb
echo "==================== 检查并卸载 MariaDB ===================="
MARIADB_PKG=$(rpm -qa | grep mariadb || true)
if [ -n "${MARIADB_PKG}" ]; then
    echo "检测到冲突包:${MARIADB_PKG},执行强制卸载"
    rpm -e --nodeps ${MARIADB_PKG}
else
    echo "未检测到 MariaDB,跳过"
fi

# 2. 准备目录并解压
echo "==================== 准备安装包 ===================="
mkdir -p "${MYSQL_DIR}"
if [ ! -d "${MYSQL_DIR}" ]; then
    echo "目录创建失败"
    exit 1
fi

if [ -f "/root/${PKG_TAR}" ] && [ ! -f "${MYSQL_DIR}/${PKG_TAR}" ]; then
    mv "/root/${PKG_TAR}" "${MYSQL_DIR}/"
fi

cd "${MYSQL_DIR}"
tar -zxvf "${PKG_TAR}"

# 3. 预装 net-tools,避免 server 包依赖失败
echo "==================== 预装依赖 net-tools ===================="
yum install -y net-tools

# 4. 按依赖顺序安装 rpm 包
echo "==================== 按序安装 rpm 包 ===================="
rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm

# 5. 启动并设置开机自启
echo "==================== 启动 mysqld 服务 ===================="
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld

# 6. 校验端口与进程
echo "==================== 端口校验 ===================="
netstat -tunlp | grep mysql
echo "==================== 进程校验 ===================="
ps -ef | grep mysql

# 7. 提取临时密码
echo "==================== 提取初始临时密码 ===================="
TEMP_PASSWORD=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
echo "临时密码:${TEMP_PASSWORD}"

# 8. 使用临时密码登录并完成初始化
echo "==================== 初始化密码与远程授权 ===================="
mysql -uroot -p"${TEMP_PASSWORD}" --connect-expired-password <<EOF
set global validate_password_length=4;
set global validate_password_policy=LOW;
set password = password('${NEW_PASSWORD}');
grant all on *.* to 'root'@'%' identified by '${NEW_PASSWORD}';
flush privileges;
EOF

# 9. 放行防火墙端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

# 10. 验证
echo "==================== 验证新密码登录 ===================="
mysql -uroot -p"${NEW_PASSWORD}" -e "show databases;"

echo "MySQL 安装与初始化完成"

数据库环境验证 Java 程序

java 复制代码
package com.itheima.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * 验证 MySQL 服务与远程授权是否配置成功。
 * 运行前请确认:3306 端口已放行、root 用户已授予 '%' 访问权限。
 */
public class MysqlConnectionChecker {

    private static final String URL = "jdbc:mysql://192.168.138.130:3306/mysql"
            + "?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "root";

    public static void main(String[] args) {
        // JDK 6 之后可省略 Class.forName,SPI 机制会自动加载驱动
        try (Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
             Statement statement = connection.createStatement();
             ResultSet resultSet = statement.executeQuery("select version()")) {

            if (resultSet.next()) {
                System.out.println("连接成功,MySQL 版本:" + resultSet.getString(1));
            }
        } catch (Exception e) {
            System.err.println("连接失败,请检查服务状态、防火墙端口与远程授权:");
            e.printStackTrace();
        }
    }
}

API 速览

命令 / 语句 作用 关键参数
rpm -qa 查询所有已安装软件包 -q 查询、-a 全部
rpm -ivh 安装 rpm 包 -i 安装、-v 详情、-h 进度
rpm -e --nodeps 强制卸载包并忽略依赖 -e 卸载
yum install -y 在线安装并自动解决依赖 -y 自动确认
yum update 升级已安装软件与系统内核 需网络
systemctl 管理系统服务 start / stop / status / enable
netstat -tunlp 查看系统监听端口与进程 net-tools 支持
grep password 从日志中提取临时密码 后接关键字
set global validate_password_length 设置密码最小长度 数值
set global validate_password_policy 设置密码强度策略 LOW / MEDIUM / STRONG
set password = password('x') 修改当前用户密码 英文半角引号
grant all on *.* to 'u'@'%' 授予任意主机访问权限 % 匹配所有地址
flush privileges 刷新权限表使授权生效

官方文档

总结

本文完整复现了 MySQL 5.7CentOS 7 上的 rpm 安装链路,核心在于三点认知:其一,rpm 只安装单个包而不解决依赖,因此必须处理 MariaDB 冲突、遵循六个包的安装顺序、并用 yum 补齐 net-tools;其二,rpm 安装会自动把 mysqld 注册为系统服务,从而统一纳入 systemctl 管理;其三,MySQL 5.7 首次启动会生成临时密码,需先从 /var/log/mysqld.log 提取,再降策略、改密码、授权并 flush privileges,任何一步遗漏都会导致远程连接失败。

相关推荐
IT枫斗者枫哥1 小时前
Spring Boot Excel 导入实战:把“导入失败”改成逐行错误报告
java·spring boot
殷紫川1 小时前
Java 27 九大核心特性解析与实战
java
用户094248568031 小时前
第11章:OpenJDK反射、动态代理与 MethodHandle 初探
java·jvm
小蒜学长1 小时前
基于SpringBoot+Vue的游戏论坛系统的设计与实现(代码+数据库+LW)
java·后端·springboot·游戏论坛系统·社区生态
SimonKing1 小时前
文档杂乱怎么查找:用 Papra 搭一个极简文档管理系统
java·后端·程序员
captain3761 小时前
网络原理(7)-NAT(Network Address Translation)
java·网络·网络协议·java-ee
jaysee-sjc1 小时前
【苍穹外卖】Day01:从零认识企业级项目开发
java·开发语言·数据库·mysql·spring·intellij-idea·mybatis
雨辰AI1 小时前
多租户数据库资源配额管控|避免租户资源抢占雪崩(金仓 / 达梦 / 高斯 /openGauss 全库原生适配)
java·大数据·数据库·后端
AI深栈1 小时前
第 12 章 · AI智能体的结构化输出与流式响应
java·人工智能