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 -tunlp与ps -ef双重校验- 从
/var/log/mysqld.log提取临时密码 - 修改密码策略、重置密码、开启远程访问授权
- 关键认知
rpm等价于 Windows 的.exe安装程序rpm不自动解决依赖 ,这是与yum的本质差异
rpm 包管理器
rpm 是 Red Hat Package Manager 的缩写,RPM 三个字母分别对应:
| 字母 | 全称 | 含义 |
|---|---|---|
R |
Red Hat |
红帽 |
P |
Package |
软件包 |
M |
Manager |
管理器 |
CentOS 可以视为红帽 Linux 的免费版本,因此完整支持 rpm 体系。rpm 的定位类似于 Windows 下的 .exe 安装程序:下载后直接运行即可安装,同时它维护着一套 rpm 数据库,记录系统中所有已安装的软件包,支持查询与卸载。
核心限制 :rpm 只负责安装单个包,不会自动下载并安装该包所依赖的其他包。这是理解后续安装顺序与报错处理的前提。
安装前环境检查
CentOS 7 默认自带 MariaDB(MySQL 的一个分支),它与我们要安装的 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.7 参考手册(安装与升级):https://dev.mysql.com/doc/refman/5.7/en/installing.html
- MySQL 5.7 密码校验插件:https://dev.mysql.com/doc/refman/5.7/en/validate-password.html
- RPM 官方文档:http://rpm.org/documentation.html
- yum 官方 Wiki:http://yum.baseurl.org/wiki
总结
本文完整复现了 MySQL 5.7 在 CentOS 7 上的 rpm 安装链路,核心在于三点认知:其一,rpm 只安装单个包而不解决依赖,因此必须处理 MariaDB 冲突、遵循六个包的安装顺序、并用 yum 补齐 net-tools;其二,rpm 安装会自动把 mysqld 注册为系统服务,从而统一纳入 systemctl 管理;其三,MySQL 5.7 首次启动会生成临时密码,需先从 /var/log/mysqld.log 提取,再降策略、改密码、授权并 flush privileges,任何一步遗漏都会导致远程连接失败。