如何在CentOS 7上安装和配置MySQL?

来源:微信开发网作者:BIT程序员头衔:程序员
导读:本期聚焦于BIT程序员创作的《如何在CentOS 7上安装和配置MySQL?》,敬请观看详情。在CentOS 7服务器上部署MySQL数据库时,Yum仓库默认提供的MariaDB往往会让人困惑,而直接下载二进制包又涉及依赖和初始化步骤。这篇文章从零开始梳理在CentOS 7上安装MySQL 8.0的完整流程,包括添加官方Yum仓库、安装MySQL Community Server、启动服务、获取临时密码、运行安全初始化脚本,以及配置远程访问和字符集。同时还会说明如何设置开机自启、修改数据目录、调整绑定地址和防火墙放行3306端口。通过实际操作命令和配置片段,帮助你避开版本冲突和权限坑,快速搭建可用于开发或生产环境的MySQL实例,适合初次接触Linux下数据库部署的运维人员和对环境一致性有要求的开发者参考。

在CentOS 7上安装MySQL,最稳妥的方式是通过官方Yum仓库获取RPM包,这样可以避免系统自带MariaDB的冲突,也能方便地通过yum命令进行后续升级。CentOS 7默认的软件源中并不包含MySQL,而是提供了MariaDB作为替代,因此第一步需要添加MySQL官方仓库。本文将详细演示安装MySQL 8.0、初始化安全配置以及调整远程访问的全过程,所有命令均已在最小化安装的CentOS 7系统上验证通过。

如何在CentOS 7上安装和配置MySQL?

添加MySQL官方Yum仓库

安装之前需要先确认系统中没有已经存在的MariaDB或旧版MySQL残留,否则可能在安装过程中出现文件冲突或依赖错误。可以使用rpm -qa | grep -i maria和rpm -qa | grep -i mysql查看相关包,如果存在则先用yum remove卸载干净。这一步对于全新系统不是必须的,但如果是已经运行过一段时间的主机,强烈建议先清理环境。

接下来从MySQL官方网站下载对应的仓库安装包。CentOS 7对应的仓库包名为mysql80-community-release-el7-3.noarch.rpm,通过wget获取后使用rpm -Uvh安装。安装完成后,yum repolist enabled | grep mysql可以列出可用的MySQL仓库,确认mysql80-community源已经启用。如果希望安装其他版本,可以手动编辑/etc/yum.repos.d/mysql-community.repo文件,将对应版本的enabled改为0或1,但本文以8.0版本为主。

wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
rpm -Uvh mysql80-community-release-el7-3.noarch.rpm
yum repolist enabled | grep mysql

安装仓库包后,执行yum makecache刷新yum缓存可以加速后续安装。如果不确定系统是否已经配置了其他第三方源,最好先备份原有的/etc/yum.repos.d/目录。此外,部分云服务器镜像可能已经内置了MariaDB的源,需要手动禁用,否则yum install mysql-community-server时可能解析到MariaDB的包名,导致安装错误。

安装MySQL并启动服务

仓库配置完成后,直接使用yum install mysql-community-server安装MySQL服务端。该命令会自动处理所有依赖关系,包括客户端、公共库和共享组件。安装过程中如果出现GPG key提示,输入y确认即可。整个安装过程取决于网络速度和机器性能,通常在几分钟内完成。安装结束后,MySQL不会自动启动,需要手动执行systemctl start mysqld启动服务。

启动成功后,通过systemctl status mysqld可以查看服务状态,确保没有报错。同时建议设置开机自启,使用systemctl enable mysqld命令,这样服务器重启后MySQL也会自动拉起。首次启动时,MySQL会自动生成一个临时root密码,写入错误日志/var/log/mysqld.log中,使用grep 'temporary password' /var/log/mysqld.log即可查看。这个临时密码必须在使用前获取,否则无法登录MySQL进行后续操作。

yum install mysql-community-server -y
systemctl start mysqld
systemctl enable mysqld
grep 'temporary password' /var/log/mysqld.log

如果systemctl start mysqld失败,可以先查看/var/log/mysqld.log的完整内容,定位错误原因。常见问题包括数据目录/var/lib/mysql权限不正确、内存不足导致无法分配缓冲池、或者配置文件/etc/my.cnf中存在无效参数。根据日志提示调整后重新启动即可。

安全初始化与密码修改

拿到临时密码后,执行mysql_secure_installation脚本进行安全初始化。这个脚本会引导完成修改root密码、移除匿名用户、禁止root远程登录、删除测试数据库以及重新加载权限表等操作。按照提示输入临时密码,然后设置符合强度要求的新密码。MySQL 8.0默认启用了密码验证组件,要求密码至少8位,且包含大小写字母、数字和特殊字符,否则会拒绝设置。

如果只是个人开发环境,觉得密码策略过于严格,可以在登录MySQL后通过SQL命令调整validate_password组件的参数。例如将密码策略调整为LOW并降低长度要求。但在生产环境中不建议这样做,保持较强的密码策略有助于防止暴力破解。调整密码策略的SQL示例如下:

SHOW VARIABLES LIKE 'validate_password%';
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 6;

完成安全初始化后,使用新密码登录MySQL,确认可以正常连接。登录命令为mysql -u root -p,输入新密码即可。登录后执行SELECT VERSION();可以查看当前MySQL的具体版本号,确认8.0系列无误。接下来就可以进行库表创建和用户授权等操作。

配置远程访问和字符集

默认情况下,MySQL的root用户只允许从localhost本地登录,远程连接会被拒绝。如果需要通过Navicat、DataGrip等图形化工具远程管理数据库,需要创建允许从任意主机或指定IP访问的用户。使用CREATE USER创建用户并指定host为%表示允许所有主机,然后使用GRANT授予相应权限。注意不要直接修改root用户的host,这样做会导致本地root无法登录,建议新建专门的远程管理账号。

CREATE USER 'remote_admin'@'%' IDENTIFIED BY 'StrongPassw0rd!';
GRANT ALL PRIVILEGES ON *.* TO 'remote_admin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

除了用户权限,还需要确保MySQL监听地址和系统防火墙允许外部访问。编辑/etc/my.cnf文件,在[mysqld]段下方添加或修改bind-address = 0.0.0.0,使服务监听所有网卡。然后通过firewall-cmd放行3306端口。如果云服务器还有安全组规则,需要在云控制台同步放行3306端口,否则客户端依然无法建立TCP连接。

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
firewall-cmd --list-ports

字符集配置同样重要。为了避免中文数据出现乱码,建议将默认字符集设置为utf8mb4,排序规则设置为utf8mb4_unicode_ci。修改/etc/my.cnf的[mysqld]段,添加character-set-server=utf8mb4和collation-server=utf8mb4_unicode_ci,然后重启MySQL使配置生效。修改前最好备份原配置文件,防止误操作导致服务无法启动。

systemctl stop mysqld
cp /etc/my.cnf /etc/my.cnf.bak
vim /etc/my.cnf
# 在[mysqld]段下添加:
# character-set-server = utf8mb4
# collation-server = utf8mb4_unicode_ci
systemctl start mysqld

常见问题排查

安装配置过程中最常见的错误是服务启动失败。当systemctl start mysqld没有成功时,不要只盯着命令输出,应该立即查看/var/log/mysqld.log。日志中会明确记录错误原因,例如Data Dictionary initialization failed通常是因为数据目录残留旧版本文件,可以尝试清空/var/lib/mysql后重新初始化。如果提示端口被占用,检查是否已经运行了其他MySQL实例或MariaDB进程。

另一个高频问题是远程连接失败。排除顺序应该是:先确认服务是否监听3306端口,使用netstat -tlnp | grep 3306;再检查用户host是否为%或指定IP;然后测试系统防火墙和云安全组;最后验证客户端所在网络是否能够路由到服务器IP。很多情况下,云服务器的安全组默认不开放3306端口,导致即使防火墙放行也无法连接。

此外,如果使用mysql_secure_installation时遇到临时密码已经过期的情况,可以在登录MySQL后执行ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassw0rd!';重新设置。如果连临时密码都无法获取,可以在/etc/my.cnf中添加skip-grant-tables跳过授权表启动,重置密码后再移除该参数并重启。不过这种方式存在安全风险,仅建议在紧急情况下使用,操作完成后务必恢复配置。

CentOS7安装MySQLMySQL配置Linux MySQL修改时间:2026-10-02 14:31:25

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/1002/64706.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。