Linux(CentOS/Ubuntu)使用yum或apt源安装MySQL及初始化设置
在 Linux 服务器上运行数据库系统,直接使用官方包管理器(yum/dnf 或 apt)进行安装是最符合运维规范的方式。通过引入官方软件源,我们不仅能准确锁定所需的 MySQL 主版本(如 8.0),还能享受到系统级的依赖管理和自动服务注册。本文以主流的 CentOS 7/8/Stream (基于 RHEL 系列) 与 Ubuntu 20.04/22.04 LTS (基于 Debian 系列) 为基准,详细梳理从仓库配置、软件包安装、服务启动到安全初始化设置的完整流程。
一、准备工作与冲突排查
在开始配置之前,必须确保系统没有遗留的数据库服务。无论是 CentOS 还是 Ubuntu,系统默认的软件源中通常提供 MariaDB 作为默认替代品。若系统中已存在 MariaDB 相关的库文件,在安装 MySQL 官方包时容易触发符号冲突或端口争用。
1. 检查并清理旧环境
在 CentOS 系统中,使用 rpm 查询是否存在预装的 MariaDB 或 MySQL 组件:
# CentOS 执行查询
rpm -qa | grep -i -E "mariadb|mysql"
# 若存在关联包,执行卸载(保留配置可不加参数,强制卸载加 -e --nodeps)
sudo rpm -e --nodeps mariadb-libs
在 Ubuntu 系统中,通常不需要手动处理残留包,但建议确认 3306 端口未被占用,并刷新本地缓存:
# Ubuntu 检查 3306 端口
sudo ss -tulpn | grep :3306
sudo apt-get update
二、CentOS 系统:使用 yum 源安装 MySQL
由于 CentOS 官方源不默认包含最新的 MySQL 社区版,需要先下载安装由 MySQL 官方维护的 mysql-community-release RPM 配置包。
1. 添加官方 yum 源
访问官方镜像仓库下载对应发行版的源配置包(以 EL7 / EL8 通用源配置为例):
# 下载官方 RPM 仓库安装包
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
# 使用 rpm 安装该源定义
sudo rpm -ivh mysql80-community-release-el7-7.noarch.rpm
注意:如果使用的是 CentOS 8 或 CentOS Stream,系统自带的 mysql 模块流可能会屏蔽官方源中的包。遇到此情况需在安装前运行以下命令重置模块:
sudo dnf module disable mysql
2. 执行安装与依赖处理
配置生效后,直接使用 yum 安装完整服务端套件:
sudo yum install -y mysql-community-server
安装过程会自动拉取 mysql-community-server, mysql-community-client, mysql-community-common 以及 mysql-community-libs。完成时终端会显示“Complete!”。
三、Ubuntu 系统:使用 apt 源安装 MySQL
在 Ubuntu 下,官方提供了轻量级的 mysql-apt-config 工具,以交互方式写入 /etc/apt/sources.list.d/mysql.list。
1. 下载并安装仓库配置文件
# 下载 deb 引导包
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
# 使用 dpkg 安装
sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb
执行该命令后,终端会弹出一个基于 ncurses 的文本选择界面。默认第一项即为“MySQL 8.0 & 8.4 Server”。若无需调整为旧版本(如 5.7),直接方向键移动至最下方的 Ok,按回车保存即可退出。
2. 刷新索引并完成安装
# 更新 apt 缓存
sudo apt-get update
# 安装服务端核心包
sudo apt-get install -y mysql-server
Ubuntu 的安装过程中,系统会弹窗提示直接输入 root 用户的初始密码(如果留空,部分版本会默认启用 auth_socket 插件验证)。根据提示输入两遍并妥善记录。
四、服务生命周期与密码检索机制
两套系统的初始化逻辑存在一个核心分水岭:CentOS 的 RPM 包默认会随机生成一个高强度的临时密码并写入日志文件;而 Ubuntu 在安装步骤中通常直接通过交互式命令行完成设置,或者依赖操作系统的本地 root socket 登录。
1. 启动服务与开机自启
无论是哪个发行版,在 systemd 下对服务的管理命令是一致的:
# 启动服务 (Ubuntu 安装后通常已自动启动,CentOS 需显式启动)
sudo systemctl start mysqld # CentOS
sudo systemctl start mysql # Ubuntu
# 设置开机自动启动
sudo systemctl enable mysqld # CentOS
sudo systemctl enable mysql # Ubuntu
# 检查运行状态
sudo systemctl status mysqld # 或 mysql
2. 提取 CentOS 首次运行的临时密码
对于 CentOS 用户,必须先从 /var/log/mysqld.log 中检索初始生成的密码:
sudo grep 'temporary password' /var/log/mysqld.log
终端会输出类似如下的记录:
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: W#x_8qKsL!oP
末尾的 W#x_8qKsL!oP 即为登录所需的临时凭据。
五、安全初始化与环境加固
MySQL 官方提供了一套非常成熟的向导脚本 mysql_secure_installation,用于移除安装时的安全风险项。
sudo mysql_secure_installation
在执行该向导时,系统将依序提出五个核心安全确认项,下表列出了推荐设置及对应背后的原因:
| 向导提示环节 | 推荐选择 | 作用与原因 |
|---|---|---|
| VALIDATE PASSWORD COMPONENT | Y 或 N (建议生产选 Y) | 密码强度校验插件。开启后会强制要求密码包含大小写字母、数字和特殊符号,长度通常不低于 8 位。 |
| New password / Re-enter | 输入新强密码 | 设置数据库管理员 root 的长期密码(在 CentOS 下必须先输入刚才日志中的临时密码)。 |
| Remove anonymous users? | Y | 删除匿名用户。匿名账户允许无密码直接登录测试库,生产环境必须彻底删除。 |
| Disallow root login remotely? | Y | 禁止 root 远程直接登录。保障数据库管理权只能从本地环回地址(localhost)发起,避免暴力破解。 |
| Remove test database and access to it? | Y | 移除默认的 test 数据库。清理掉谁都可以读写的开放空间。 |
| Reload privilege tables now? | Y | 立刻重新加载权限表,使刚刚做出的所有配置立即在内存中生效。 |
六、日常账户体系与远程访问配置
在实际业务中,不应该直接将 root@localhost 开放给远程应用。标准的做法是保持 root 的本地特权,并针对实际业务创建专属的独立账号和库。
1. 登录数据库客户端
# 本地终端登录
mysql -u root -p
# 输入刚才设定的新密码
2. 创建专用应用账号并授权
MySQL 8.0 已经废弃了通过 GRANT 命令隐式创建用户的语法,必须分两步执行:先显式创建用户,再赋予权限。
-- 1. 创建专用的应用数据库
CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 2. 创建一个允许从任意网络地址('%')登录的独立用户
CREATE USER 'app_user'@'%' IDENTIFIED WITH caching_sha2_password BY 'Strong_App_P@ssw0rd!2026';
-- 3. 将对应库的所有读写权限授予该用户
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'%';
-- 4. 刷新权限
FLUSH PRIVILEGES;
注意:如果部分老版本的客户端连接程序(如旧版 PHP PDO 或旧版数据库客户端软件)无法解析 MySQL 8.0 默认的 caching_sha2_password 认证插件,可将认证方式切换为传统兼容插件:
ALTER USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'Strong_App_P@ssw0rd!2026';
3. 检查监听地址与防火墙设置
如果在外部应用连接时遇到 Connection refused 错误,通常由两个因素造成:
- MySQL 配置文件绑定了本地 IP:在 Ubuntu 中,检查
/etc/mysql/mysql.conf.d/mysqld.cnf;在 CentOS 中检查/etc/my.cnf。确认bind-address没有被锁定为127.0.0.1,若需允许外网访问,应设为0.0.0.0。 - 系统防火墙拦截了 3306 端口:需在宿主机上按对应系统放行流量:
# CentOS (firewalld) 放行 3306 端口
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
# Ubuntu (UFW) 放行 3306 端口
sudo ufw allow 3306/tcp
sudo ufw status
七、部署架构与目录对照总结
完成上述流程后,MySQL 8.0 已经在 Linux 实例上稳固运行。掌握关键文件在不同系统发行版下的分布路径,是日常运维、排查日志与做数据备份的基础。
遵循官方包管理器的安装模式,不仅避免了源码编译过程中的繁重工具链依赖,还能直接融入系统的定期安全更新队列中。在完成上述步骤后,整个数据库服务便具备了清晰的权限分级、经过验证的网络策略以及健康的服务状态。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













