部署MySQL数据库是运维和开发人员绕不开的基础任务。在Linux CentOS系统中,虽然可以通过源码编译或下载通用二进制包来安装,但最快捷且便于后期维护的方式仍然是使用官方YUM仓库。本文将以CentOS 7和CentOS 8为例,完整演示MySQL 8.0的安装、初始化、安全加固以及远程访问配置。需要注意的是,CentOS 7默认源中的MariaDB与MySQL存在包名冲突,因此必须先卸载旧版本或禁用相关包,后续步骤才能顺利进行。

安装前的准备与环境检查
在开始安装之前,建议先确认系统版本和已有数据库软件状态。使用cat /etc/redhat-release查看发行版信息,如果是CentOS 7或8,后续命令基本一致。如果系统曾经安装过MariaDB或旧版MySQL,需要先停止服务并卸载,否则安装mysql-community-server时会出现依赖冲突。执行rpm -qa | grep -i mysql和rpm -qa | grep -i mariadb可以列出所有相关包,然后通过yum remove逐个卸载。卸载后最好再运行rm -rf /var/lib/mysql清理旧数据目录,避免初始化时读取到不兼容的表结构。
另一个重要的准备步骤是添加MySQL官方YUM仓库。由于CentOS默认仓库并不包含MySQL 8.0的RPM包,我们需要下载mysql80-community-release-el7-3.noarch.rpm或者el8版本。以CentOS 7为例,使用wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm下载仓库包,然后通过rpm -ivh mysql80-community-release-el7-3.noarch.rpm安装。安装完成后,/etc/yum.repos.d/目录下会出现mysql-community.repo和mysql-community-source.repo两个文件。默认启用的就是MySQL 8.0系列,如果想要安装5.7版本,需要手动编辑repo文件切换enabled=0和enabled=1。
检查仓库是否生效可以使用yum repolist enabled | grep mysql命令。如果列表中出现mysql80-community字样,说明仓库配置成功。此时还可以通过yum list mysql-community-server查看可安装的版本号。正式安装前建议运行一次yum makecache刷新缓存,确保元数据是最新的。对于生产环境,还应该检查磁盘空间是否充足,尤其是/var/lib/mysql所在的分区,建议预留至少10GB可用空间。
使用YUM安装MySQL服务
当YUM仓库准备就绪后,安装MySQL只需要一条命令:yum install -y mysql-community-server。该命令会自动解析依赖并安装mysql-community-client、mysql-community-common、mysql-community-libs等包。安装过程可能需要下载约200MB的软件包,具体时间取决于网络速度。如果之前没有清理过MariaDB相关组件,此步骤很可能会报错,此时根据提示卸载冲突包即可。安装完成后,MySQL不会自动启动,需要手动执行systemctl start mysqld启动服务,并使用systemctl enable mysqld设置开机自启。
首次启动时,MySQL会自动执行初始化操作,包括生成数据目录、创建系统表以及为root用户设置一个临时密码。临时密码保存在/var/log/mysqld.log日志文件中,可以通过grep 'temporary password' /var/log/mysqld.log命令获取。该密码通常较长且包含特殊字符,建议复制后立即使用。如果日志中找不到临时密码,可能是初始化失败,可以尝试查看完整日志或删除数据目录后重新启动。
下面是完整的安装与启动命令示例,适合在脚本中批量执行:
# 下载并安装官方YUM仓库 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm rpm -ivh mysql80-community-release-el7-3.noarch.rpm # 刷新缓存并安装MySQL 8.0 yum makecache yum install -y mysql-community-server # 启动服务并设置开机自启 systemctl start mysqld systemctl enable mysqld # 获取临时密码 grep 'temporary password' /var/log/mysqld.log
安装完成后,MySQL的可执行文件位于/usr/bin/目录下,配置文件默认在/etc/my.cnf。数据目录则位于/var/lib/mysql/,日志文件在/var/log/mysqld.log。如果需要更改数据目录位置,建议在初始化之前修改my.cnf中的datadir参数,并将目录权限设置为mysql用户所有。对于CentOS系统,MySQL服务默认以mysql系统用户身份运行,该用户在安装时自动创建。
运行安全初始化脚本与基础配置
首次登录MySQL时,必须使用临时密码。执行mysql -uroot -p命令并粘贴临时密码即可进入MySQL命令行。但此时root账户的密码处于过期状态,无法执行任何SQL语句,必须先修改密码。可以直接在MySQL提示符下执行ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';,密码必须满足当前密码策略(默认至少8位,包含大小写字母、数字和特殊字符)。如果希望使用简单密码,可以先调整validate_password组件的策略等级,但生产环境不建议这样做。
更方便的方式是运行MySQL自带的安全脚本mysql_secure_installation。该脚本会引导用户完成一系列安全设置,包括修改root密码、移除匿名用户、禁止root远程登录、删除测试数据库以及重新加载权限表。根据提示输入y或n即可。需要注意的是,在CentOS 8中,MySQL 8.0的该脚本可能因兼容性问题而报错,此时可以手动执行各个安全步骤,或者直接使用SQL语句来完成。
以下是一段典型的手动安全配置SQL,可以替代安全脚本:
-- 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPassword123!';
-- 删除匿名用户
DELETE FROM mysql.user WHERE User='';
-- 禁止root远程登录(默认已禁止,可再次确认)
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
-- 删除测试数据库
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%';
-- 刷新权限
FLUSH PRIVILEGES;
安全配置完成后,还需要根据实际需求调整MySQL的全局参数。打开/etc/my.cnf文件,在[mysqld]区块下添加或修改配置。例如设置默认字符集为utf8mb4:character-set-server=utf8mb4和collation-server=utf8mb4_general_ci;调整InnoDB缓冲池大小:innodb_buffer_pool_size=1G;设置最大连接数:max_connections=500。修改后需要重启MySQL服务使配置生效。对于内存较小的云服务器,建议将innodb_buffer_pool_size设置为物理内存的50%左右。
配置远程访问与防火墙规则
默认情况下,MySQL只监听本机的127.0.0.1地址,外部客户端无法连接。要实现远程访问,首先需要修改绑定地址。在/etc/my.cnf的[mysqld]区块中添加bind-address=0.0.0.0或者注释掉默认的bind-address=127.0.0.1。保存后重启MySQL服务:systemctl restart mysqld。修改绑定地址后,MySQL将监听所有网络接口,但此时防火墙仍然会阻止外部连接3306端口。
对于CentOS 7和8,默认使用firewalld管理防火墙。开放3306端口的命令是firewall-cmd --zone=public --add-port=3306/tcp --permanent,然后执行firewall-cmd --reload重新加载规则。如果使用的是iptables,则需要添加相应的规则并保存。注意在公网环境中开放3306端口存在安全风险,建议配合云服务商的安全组功能,仅允许特定IP地址访问。
创建远程管理用户时,不要直接修改root账户的Host字段,而是创建一个新的专用账户。登录MySQL后执行以下SQL:
-- 创建允许从任意主机连接的远程用户 CREATE USER 'remote_admin'@'%' IDENTIFIED BY 'AnotherStrongPass456!'; -- 授予该用户对指定数据库的全部权限 GRANT ALL PRIVILEGES ON mydb.* TO 'remote_admin'@'%'; -- 刷新权限 FLUSH PRIVILEGES;
如果希望限制用户只能从特定IP连接,将'%'替换为例如'192.168.1.100'即可。同时要确保该用户使用的认证插件与客户端兼容。MySQL 8.0默认使用caching_sha2_password,部分旧版客户端可能不支持,此时可以在创建用户时指定IDENTIFIED WITH mysql_native_password BY '密码';。完成上述步骤后,从另一台机器使用mysql -h服务器IP -uremote_admin -p测试连接,如果成功则说明远程访问配置无误。
最后,如果远程连接仍然失败,可以检查/var/log/mysqld.log中的错误信息,或者使用ss -tlnp | grep 3306确认MySQL监听的地址是否为0.0.0.0。遇到权限问题时,可以临时查看mysql.user表中的Host和User列,确认是否存在匹配的记录。通过本文的步骤,你应该已经在CentOS上成功安装并配置了MySQL数据库,可以开始创建数据库、导入数据并进行日常管理了。
Linux CentOSMySQL安装数据库配置修改时间:2026-08-20 03:02:55