在CentOS7环境中部署MySQL5.7,与普通的软件包安装存在明显差异。系统自带仓库默认提供的是MariaDB分支,若未清理冲突组件就直接安装,容易出现服务无法启动或端口被占用的情况。因此,整套流程应当从环境检查开始,逐步引入官方源并完成初始化。

一、清理系统自带的MariaDB相关包
CentOS7最小安装或基础安装中,可能会预置mariadb-libs这类库文件,它与MySQL5.7的客户端库存在文件冲突。在正式添加MySQL源之前,应当先查询并卸载这些包,避免后续依赖解析失败。
使用rpm命令可以列出当前系统中已安装的MariaDB组件。如果输出中存在mariadb或mariadb-libs,就需要通过yum remove将其移除以释放依赖空间。这一步虽然简单,但经常被忽略,导致后面执行mysql命令时报错提示客户端库版本不匹配。
# 查看是否已安装mariadb相关包 rpm -qa | grep mariadb # 若上述命令有输出,则执行卸载 yum remove -y mariadb-libs mariadb-common
二、添加MySQL官方YUM源
MySQL官方为RHEL/CentOS7(即el7)提供了专用的仓库配置文件。通过下载该rpm包并安装,系统就能从官方地址获取MySQL5.7的各个组件,而不是使用第三方或系统默认源。
下载时建议选择对应小版本的最新发行包,例如mysql57-community-release-el7-11.noarch.rpm。安装该release包后,会在/etc/yum.repos.d/目录下生成mysql-community.repo文件,其中默认启用了5.7系列。可通过yum repolist确认mysql57-community源已经可用。
# 下载MySQL5.7的yum源release包 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm # 安装release包以注册官方仓库 rpm -ivh mysql57-community-release-el7-11.noarch.rpm # 确认仓库已启用 yum repolist enabled | grep mysql
三、安装MySQL5.7服务端
仓库配置完成后,便可以安装mysql-community-server。该包包含了mysqld守护进程、系统表初始化工具以及基础客户端。安装过程会自动处理大部分依赖,但需要确保磁盘空间充足,因为5.7的数据目录初始化后会占用一定容量。
安装结束后,不要立即启动服务。建议先确认/etc/my.cnf中的基础配置,例如datadir与socket路径。若服务器内存较小,可适当调整innodb_buffer_pool_size,防止启动后因内存不足被系统终止。
# 安装MySQL5.7服务端 yum install -y mysql-community-server # 安装完成后查看版本信息 mysqld --version
四、启动服务与获取初始密码
MySQL5.7在首次启动时会自动生成root用户的临时密码,并写入错误日志文件(默认位于/var/log/mysqld.log)。启动服务后必须及时提取该密码,否则无法通过root登录执行后续操作。
使用systemctl启动mysqld,并设置开机自启。随后通过grep命令在日志中搜索temporary password关键字。该密码通常为随机字符串,包含大小写字母与符号,直接复制使用即可,登录后必须修改。
# 启动MySQL服务 systemctl start mysqld # 设置开机自启 systemctl enable mysqld # 从日志中提取初始root密码 grep 'temporary password' /var/log/mysqld.log
五、安全初始化与修改密码
拿到临时密码后,应使用mysql_secure_installation脚本完成安全初始化。该脚本会引导用户修改root密码、移除匿名用户、禁止root远程登录以及删除测试数据库。对于暴露在公网的服务器,这些步骤不可或缺。
若仅做本地开发环境,也可以手动登录后执行ALTER USER语句修改密码。注意MySQL5.7默认启用validate_password插件,密码需满足长度与复杂度策略,否则会拒绝修改。可通过调整策略参数降低要求,但不建议在生产环境关闭。
# 使用临时密码登录 mysql -uroot -p # 登录后修改root密码(在mysql命令行内执行) ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass@123';
六、字符集与远程访问配置
默认情况下,MySQL5.7的服务端字符集可能不是utf8mb4,这会导致存入emoji或部分生僻字时出现乱码。应在/etc/my.cnf的[mysqld]段中显式设置字符集,并重启服务生效。
如果业务需要远程连接,除了在用户表中创建允许特定IP的账号外,还要确保防火墙放行3306端口。CentOS7默认使用firewalld,可通过firewall-cmd命令添加永久规则。同时,云服务器还需在安全组中开放对应端口。
# 在/etc/my.cnf添加如下配置后重启 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci # 防火墙放行3306 firewall-cmd --permanent --add-port=3306/tcp firewall-cmd --reload
| 步骤 | 关键命令 | 易错点 |
|---|---|---|
| 清理冲突包 | yum remove mariadb-libs | 未清理导致文件冲突 |
| 添加官方源 | rpm -ivh mysql57-community-release | 误用系统默认源 |
| 安装服务端 | yum install mysql-community-server | 磁盘空间不足 |
| 获取初始密码 | grep temporary /var/log/mysqld.log | 未及时查看导致丢失 |
按照上述流程操作,即可在CentOS7上获得一个可稳定运行的MySQL5.7实例。后续可根据业务量进行主从配置或备份策略调整,但基础安装与初始化是这一切的前提。