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

添加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