CentOS 7/8/9上安装 MySQL 8.0+的方法完整指南
作者:LumenL1u
一、流程图

二、安装前的准备工作
在开始安装之前,建议你先完成以下步骤:
更新系统软件包: 更新系统,确保所有软件包都是最新状态。(对于启用 dnf 的系统,请在命令中将 yum 替换为 dnf)
yum update
检查是否已安装 MySQL:执行以下命令检查
yum list installed | grep mysql yum list installed | grep mariadb
卸载:如果存在旧版本,建议卸载以避免冲突。
yum remove 包名
清理残留文件:卸载后建议删除相关配置文件和数据目录。
# 删除配置文件 rm -rf /etc/my.cnf # 删除数据目录(注意:会删除所有数据) rm -rf /var/lib/mysql # 删除日志文件 rm -rf /var/log/localhost.log
三、使用包管理器安装(简单,易管理)
1.添加 MySQL Yum 存储库
从 MySQL Yum 存储库页面 下载它。上传到服务器后执行(对于启用 dnf 的系统,请在命令中将 yum 替换为 dnf)
yum localinstall mysql84-community-release-el9-1.noarch.rpm
您可以通过以下命令检查 MySQL Yum 存储库是否已成功添加并启用
yum repolist enabled | grep mysql.*-community
2. 禁用默认的 MySQL 模块
(仅限 EL8 系统) 基于 EL8 的系统(例如 RHEL8 和 Oracle Linux 8)包含一个默认情况下启用的 MySQL 模块。
yum module disable mysql
3. 安装 MySQL
通过以下命令安装 MySQL
yum install mysql-community-server
这将安装 MySQL 服务器软件包 (mysql-community-server),以及运行服务器所需组件的软件包,包括客户端软件包 (mysql-community-client)、客户端和服务器的通用错误消息和字符集 (mysql-community-common) 以及共享客户端库 (mysql-community-libs)。
4. 启动 MySQL 服务器
使用以下命令启动 MySQL 服务器。
systemctl start mysqld
您可以使用以下命令检查 MySQL 服务器的状态。
systemctl status mysqld
如果操作系统启用了 systemd,则应使用标准的 systemctl(或者,使用参数反转的 service)命令,例如 stop、start、status 和 restart 来管理 MySQL 服务器服务。 mysqld 服务默认情况下处于启用状态,并且在系统重启时启动。
四、手动安装二进制包(难,但更灵活)
1. MySQL Linux 通用二进制分发目录
| 目录 | 目录内容 |
|---|---|
| bin | mysqld 服务器、客户端和实用程序 |
| docs | Info 格式的 MySQL 手册 |
| man | Unix 手册页 |
| include | 包含(头)文件 |
| lib | 库 |
| share | 错误消息、字典和用于数据库安装的 SQL |
| support-files | 各种支持文件 |
2. 命令序列如下所示
yum install libaio tar -xvf /path/to/mysql-VERSION-OS.tar.xz ln -s full-path-to-mysql-VERSION-OS mysql groupadd mysql useradd -r -g mysql -s /bin/false mysql cd /etc touch my.cnf chown root:root my.cnf cd /usr/local/mysql mkdir data chmod 750 data chown mysql:mysql data bin/mysqld --defaults-file=/etc/my.cnf --initialize cat data/localhost.localdomain.err cd /usr/lib/systemd/system touch mysqld.service systemctl enable mysqld.service systemctl start mysqld
3. 安装二进制包
安装 libaio 库:MySQL 依赖于该libaio 库。如果未在本地安装此库,则数据目录初始化和后续服务器启动步骤将失败。如有必要,请使用适当的包管理器安装它。例如,在基于 Yum 的系统上:
yum search libaio # search for info yum install libaio # install library
下载和解压:从 MySQL 官网下载对应版本的二进制压缩包(如 mysql-9.4.0-linux-glibc2.28-x86_64.tar.xz),使用 tar -xzf 命令解压。
tar xvf mysql-9.4.0-linux-glibc2.28-x86_64.tar.xz -C /usr/local/ cd /usr/local/ mv mysql-9.4.0-linux-glibc2.28-x86_64 mysql #或 ln -s mysql-9.4.0-linux-glibc2.28-x86_64 mysql
创建专用用户和组:创建一个不允许登录系统的 MySQL 专用用户,提升安全性。
groupadd mysql useradd -r -g mysql -s /bin/false mysql #或 useradd -r -g mysql -s /usr/sbin/nologin mysql
-s 设置用户的登录 shell
/bin/false 一个总是返回失败的程序,这样设置后,该用户无法通过 shell 登录系统
/usr/sbin/nologin 达到类似效果,并给出友好提示
4. 安装后配置
配置环境变量:将 mysql 加入环境变量中。
vim /etc/profile.d/mysql.sh
#编辑mysql.sh内容 export MYSQL_HOME=/usr/local/mysql export PATH=$MYSQL_HOME/bin:$PATH
source /etc/profile.d/mysql.sh
创建配置文件:通过将它们放在 MySQL 配置文件中来指定 MySQL 服务器在启动时应使用的选项。如果不这样做,服务器将以其默认设置启动,要创建 MySQL 配置文件,请以 root 身份发出以下命令:
cd /etc vim my.cnf
添加以下设置到配置文件中
[client] socket=/usr/local/mysql/data/mysql.sock [mysqld] datadir=/usr/local/mysql/data socket=/usr/local/mysql/data/mysql.sock port=3306 log-error=/usr/local/mysql/data/localhost.log user=mysql secure_file_priv=NULL local_infile=OFF
初始化数据目录:进入 MySQL 目录并初始化数据目录
cd /usr/local/mysql mkdir data chmod 750 data chown mysql:mysql data bin/mysqld --defaults-file=/etc/my.cnf --initialize
初始化输出被打印到日志 ( /usr/local/mysql/data/localhost.log) 中。
5. 使用 systemd 启动服务器
添加一个 systemd 服务单元配置文件
cd /usr/lib/systemd/system vim mysqld.service
将此配置信息添加到 mysqld.service 文件中:
[Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql # Have mysqld write its state to the systemd notify socket Type=notify # Disable service start and stop timeout logic of systemd for mysqld service. TimeoutSec=0 # Start main service ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS # Use this to switch malloc implementation EnvironmentFile=-/etc/sysconfig/mysql # Sets open_files_limit LimitNOFILE = 10000 #Restart=on-failure #RestartPreventExitStatus=1 # Set environment variable MYSQLD_PARENT_PID. This is required for restart. #Environment=MYSQLD_PARENT_PID=1 #PrivateTmp=false
使用以下命令来管理 MySQL 服务。
#使mysqld服务在重新启动时自动启动。 systemctl enable mysqld.service #手动启动mysqld服务 systemctl start mysqld #检查mysqld服务的状态 systemctl status mysqld
五、重置 MySQL root 账户密码
使用客户端,使用服务器在初始化序列期间生成的随机密码 mysql连接到服务器:root@localhost
# Yum 安装 grep 'temporary password' /var/log/mysqld.log # 二进制安装 grep 'temporary password' /usr/local/mysql/data/*.err mysql -u root -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password'; mysql> exit
提示:如果启用了 validate_password 插件(默认开启),密码必须满足强度策略(大写、小写、数字、特殊字符、长度 ≥ 8)。
六、测试 MySQL 服务器
使用mysqlshow验证您是否可以从服务器检索信息。
mysqlshow -u root -p
使用mysqladmin查看 MySQL 服务器版本信息。
mysqladmin -u root -p version
七、开启远程访问权限
需要登录到 MySQL 服务器,执行下面的命令:
-- 1. 创建用户 CREATE USER 'username'@'%' IDENTIFIED BY 'password'; -- 2. 授权 GRANT ALL PRIVILEGES ON *.* TO 'username'@'%'; -- 3.刷新权限 FLUSH PRIVILEGES;
这里的 username 和 password 分别是远程用户的用户名和密码,% 表示允许任何 IP 地址的用户连接。如果需要限制特定 IP 地址,可以将 % 替换为具体的 IP 地址。
编辑 MySQL 的配置文件 my.cnf , 允许任意 IP 地址访问:
[mysqld] # 注释掉或删除这一行(如果存在): # 如果不想暴露MySQL,可以保留,通过SSH 隧道(端口转发)安全地连接,具体见常见问题 # bind-address = 127.0.0.1 # 或显式绑定到所有地址: bind-address = 0.0.0.0
修改后,保存文件并重启 MySQL 服务以使更改生效:
systemctl restart mysqld
在客户端计算机上,使用以下命令尝试连接到远程 MySQL 服务器:
mysql -h server_ip -P 3306 -u username -p #例如 mysql -h192.168.100.128 -P3306 -uroot -p123456
八、常见问题
1. MySQL 服务无法启动
可以运行 systemctl status mysql 查看服务状态,或者通过 journalctl -xe 查看系统日志来排查问题。
2. SELinux 或 AppArmor 阻止执行
临时禁用 SELinux 测试:
setenforce 0 systemctl start mysqld
如果成功,说明是 SELinux 策略问题。可恢复后添加策略:
setenforce 1 restorecon -R /usr/local/mysql # 或使用 audit2allow 生成自定义策略
3. 客户端连接失败
检查防火墙设置:确保服务器的防火墙开放了 MySQL 的默认 3306 端口。可以使用以下命令。
firewall-cmd --list-ports | grep 3306
如果没有放行(输出是空的),执行以下命令,重新检查
firewall-cmd --permanent --add-port=3306/tcp firewall-cmd --reload
检查 MySQL 绑定地址:查看 MySQL 配置文件(如 /etc/mysql/my.cnf)中的 bind-address 选项。如果希望从其他机器连接,需将其设置为服务器的 IP 地址或 0.0.0.0(注意安全风险),或者直接注释掉该行。
如果服务端只允许本机访问(127.0.0.1),则在客户端执行下面的命令:
ssh -L 3307:127.0.0.1:3306 user@your-server.com #或 ssh -fNL 3307:127.0.0.1:3306 user@your-server.com mysql -h 127.0.0.1 -P 3307 -u myuser -p
-L 3307:127.0.0.1:3306:表示将本地机器的 3307 端口 转发到远程服务器上的 127.0.0.1:3306 。
user@your-server.com:是你在远程服务器上的登录账户和主机地址。
-fNL :在后台运行,不执行远程命令,同时设置本地端口转发。
如果是后台运行,Linux/MacOS 用 ps aux | grep ssh ,Windows 用 get-process ssh* ,找到进程并 kill <PID> 。
4. 忘记 root 密码
- 停止 MySQL 服务。
- 在配置文件中(如
[mysqld]段下)添加skip-grant-tables。 - 重启 MySQL 服务,此时可以不需密码登录。
- 执行
FLUSH PRIVILEGES;后重设 root 密码。 - 移除
skip-grant-tables配置,重启 MySQL 服务。
到此这篇关于CentOS 7/8/9上安装 MySQL 8.0+的方法完整指南的文章就介绍到这了,更多相关CentOS安装 MySQL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
