Linux(CentOS/Ubuntu)下使用yum/apt安装MySQL指南
针对CentOS与Ubuntu两大主流Linux发行版,详解使用yum与apt包管理器安装MySQL 8.0的完整流程,涵盖软件源配置、服务启动、初始凭证获取、安全加固及常用管理命令。
在 Linux 服务器环境中,MySQL 数据库的安装主要通过各发行版自带的包管理器完成。由于 RedHat/CentOS 体系与 Debian/Ubuntu 体系在底层软件包结构、软件源策略及默认初始认证机制上存在显著区别,许多初学者在跨发行版操作时容易产生混淆。本文针对 CentOS(基于 yum/dnf)和 Ubuntu(基于 apt)两大主流环境,分别给出从配置软件源、执行安装、服务管理到执行安全初始化向导的标准落地步骤,帮助读者平稳完成 MySQL 8.0 的部署并掌握排查关键凭据的准确方法。
一、系统差异与仓库体系对比
在着手敲击安装命令之前,首先需要明确目标系统的软件仓库分发机制。Ubuntu 官方仓库对 MySQL 维护良好,其 main 仓库直接提供了名为 mysql-server 的元软件包;而 CentOS(特别是 CentOS 7/8 及兼容衍生版)官方源中默认优先推荐并集成了 MariaDB。若要在 CentOS 上安装原厂 MySQL,通常需要先导入官方提供的 RPM 仓库配置包(MySQL Community Yum Repository)。
二、Ubuntu 环境下使用 apt 安装 MySQL
在 Ubuntu 20.04 或 22.04 LTS 环境中,由于系统默认仓库已维护官方 MySQL 8.0 系列,安装过程相对直接。整个过程分为更新索引、安装服务包、启动服务以及初始化四个阶段。
1. 更新本地包索引并安装
在执行安装前,务必先同步软件源元数据,防止因本地索引过期导致依赖包校验失败:
# 1. 更新 apt 软件包索引
sudo apt update
# 2. 安装 MySQL 服务端组件
sudo apt install -y mysql-server
2. 启动服务与开机自启
安装完成后,Ubuntu 会自动启动守护进程并将服务注册为系统开机自启。可通过以下命令进行状态核对:
# 检查服务运行状态
sudo systemctl status mysql
# 确保开机自动启动处于激活状态
sudo systemctl enable mysql
正常情况下,控制台输出中应包含 Active: active (running) 绿色字样,表示守护进程 mysqld 已成功监听并进入工作状态。
三、CentOS 环境下使用 yum 安装 MySQL
在 CentOS 7、CentOS Stream 或基于 RHEL 的同构发行版中,直接运行 yum install mysql-server 要么提示找不到包,要么可能会安装 MariaDB。因此必须按规范走完“清理旧冲突、注册官方源、安装社区版”的标准路径。
1. 检查并移除系统自带的 MariaDB 冲突
如果之前系统安装过 MariaDB,其保留的 mariadb-libs 可能会在安装 MySQL 时产生依赖冲突,建议先查询并清理:
# 检查当前环境是否残留 mariadb 相关包
rpm -qa | grep -i mariadb
# 若存在,使用 rpm 或 yum 卸载(以实际列出的包名为准)
sudo rpm -e --nodeps mariadb-libs
2. 注册官方 MySQL Yum 软件仓库
前往 MySQL 官方源镜像地址获取 RPM 仓库配置文件。以适用于 CentOS 7/EL7 的源为例(若是 EL8/EL9 相应替换对应大版本包):
# 下载并安装官方 yum repo 描述包
sudo rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-7.noarch.rpm
# 验证源是否成功添加
yum repolist enabled | grep "mysql.*-community"
在 CentOS 8 或 Rocky Linux 8 中,系统默认将内部的 mysql 模块启用,这会导致 yum 忽略官方源直接报错。此时需要预先执行重置命令:sudo dnf module disable mysql,解除系统内置模块绑定后再执行安装。
3. 执行安装与启动守护进程
# 安装 MySQL 8.0 核心社区版
sudo yum install -y mysql-community-server
# 启动服务
sudo systemctl start mysqld
# 设置系统开机常驻自启
sudo systemctl enable mysqld
四、获取初始密码与执行安全加固
安装并首次启动服务后,MySQL 会完成数据目录 /var/lib/mysql 的初始化,但此时两个系统的超级管理员(root)访问权限有着不同的处理逻辑,必须针对性处置。
1. 两大系统的初次进入差异
- Ubuntu (auth_socket 机制):Ubuntu 8.0 默认将
root@localhost配置为使用操作系统的auth_socket插件。只要在系统层面拥有sudo权限,直接输入sudo mysql即可登录控制台,无需输入密码。如果需要兼容常规密码登录,可在进入数据库后执行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的强密码'; - CentOS (随机临时密码):CentOS 服务首次启动时,会在日志中生成一个仅供单次使用的临时随机密码。需要使用
grep命令从日志文件中提取该密码:
# 提取初始临时密码
sudo grep 'temporary password' /var/log/mysqld.log
# 预期输出类似如下格式(最后一段即为密码):
# [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 3Xq!pL9#a?zK
2. 运行 mysql_secure_installation 安全向导
MySQL 随包提供了一个自动化加固脚本 mysql_secure_installation。无论在 Ubuntu 还是 CentOS 环境,强烈建议在生产或测试环境中完整运行该向导,依次完成四大关键安全决策:
执行加固脚本的具体交互指令如下:
sudo mysql_secure_installation
根据终端提示,首先输入前面提取的临时密码(或在 Ubuntu 下直接设置新密码),然后依次回答 Y 启用验证、选择密码策略强度、确认新管理员密码,并依次对删除匿名用户、禁止远程 root 登录、删除 test 库并重载权限表回复 Y 完成整套强化。
五、登录验证与日常运维管理
加固完成后,可以通过本地 MySQL 客户端执行连接测试,并核对版本与连接身份:
# 使用 root 账号登录
mysql -u root -p
# 输入刚才设定的密码后进入交互环境,执行测试 SQL:
mysql> SELECT VERSION(), CURRENT_USER();
+-----------+----------------+
| VERSION() | CURRENT_USER() |
+-----------+----------------+
| 8.0.36 | root@localhost |
+-----------+----------------+
1 row in set (0.00 sec)
mysql> EXIT;
关键配置路径与日志文件对照
| 配置/资源类型 | Ubuntu (apt) 默认路径 | CentOS (yum) 默认路径 |
|---|---|---|
| 主配置文件 | /etc/mysql/mysql.conf.d/mysqld.cnf |
/etc/my.cnf |
| 数据存储目录 | /var/lib/mysql |
/var/lib/mysql |
| 服务错误日志 | /var/log/mysql/error.log |
/var/log/mysqld.log |
| 运行 Socket 文件 | /var/run/mysqld/mysqld.sock |
/var/lib/mysql/mysql.sock |
| Systemd 服务标识 | mysql.service |
mysqld.service |
六、总结
在 Linux 环境中安装 MySQL,核心不在于敲击几条安装命令,而在于理解两大系统体系背后的软件包分发逻辑:
- 在 Ubuntu / Debian 环境下,官方源开箱即用,通过
apt install mysql-server即可完成部署,其主要特性是初始采用auth_socket认证,本地可通过sudo mysql平滑接管。 - 在 CentOS / RHEL 环境下,必须先清理潜在冲突的
mariadb-libs,并通过官方提供的 RPM 安装包注册 MySQL 官方 Yum 源,安装mysql-community-server,初次启动后须在/var/log/mysqld.log中寻觅随机初始密码。
无论采用何种包管理器,部署完成后运行 mysql_secure_installation 剔除匿名账户、禁用 root 远程登录、清理测试数据库,都是确保数据库实例安全合规不可或缺的标准动作。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









