MySQL 8.0.46 在线安装操作步骤

本文章,主要说明了Rocky Linux 9.6系统,在具备互联网连接的情况下,在线安装MySQL 8.0.46的主要步骤和可能遇到的问题。按步骤安装完毕后,MySQL数据库配置为大小写不敏感,允许数据库的root用户远程登录数据库。

适用系统:Rocky Linux 9.6
MySQL 版本:8.0.46


目录

  1. 环境准备
  2. 安装 MySQL 8.0.46
  3. 配置 MySQL
  4. 启动 MySQL 并获取临时密码
  5. 修改 root 密码
  6. 配置大小写不敏感
  7. 配置字符集与存储引擎
  8. 配置远程访问
  9. 关闭防火墙
  10. 关闭 SELinux
  11. 验证清单

1. 环境准备

1.1 检查系统版本

cat /etc/os-release

预期输出包含:Rocky Linux 9.6

1.2 更新系统包

dnf update -y

2. 安装 MySQL 8.0.46

2.1 下载 MySQL 8.0.46 RPM 包

cd /tmp
wget https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm

2.2 安装 MySQL 仓库

rpm -ivh mysql80-community-release-el9-1.noarch.rpm

2.3 安装 MySQL Server

dnf install -y mysql-server

2.4 验证安装版本

mysqld --version

预期输出:mysqld Ver 8.0.46 for Linux on x86_64


3. 配置 MySQL

3.1 编辑配置文件

vi /etc/my.cnf

3.2 添加以下配置

[mysqld] 段落下添加:

[mysqld]
# 大小写不敏感(必须在初始化前配置)
lower_case_table_names=1

# 字符集配置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

# 默认存储引擎
default-storage-engine=INNODB

# 绑定地址(允许远程连接)
bind-address=0.0.0.0

⚠️ 重要lower_case_table_names=1 必须在 MySQL 初始化之前配置,否则需要重新初始化数据目录。


4. 启动 MySQL 并获取临时密码

4.1 启动 MySQL 服务

systemctl start mysqld

4.2 设置开机自启

systemctl enable mysqld

4.3 查看服务状态

systemctl status mysqld --no-pager | cat

4.4 获取临时密码

grep 'temporary password' /var/log/mysqld.log

输出示例:

[Note] A temporary password is generated for root@localhost: o.t+-du2M1AB

📝 记录此临时密码,下一步需要使用。


5. 修改 root 密码

5.1 使用临时密码登录 MySQL

mysql -uroot -p

输入上一步获取的临时密码。

5.2 修改 root 密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root@2026!';
FLUSH PRIVILEGES;

⚠️ 密码要求:至少 8 位,包含大小写字母、数字和特殊字符。

5.3 验证新密码

mysql -uroot -p'Root@2026!' -e "SELECT 'Password changed successfully!' AS status;"

6. 配置大小写不敏感

6.1 确认配置文件

grep 'lower_case_table_names' /etc/my.cnf

预期输出:lower_case_table_names=1

6.2 验证是否生效

mysql -uroot -p'Root@2026!' -e "SHOW VARIABLES LIKE 'lower_case_table_names';"

预期输出:

+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_table_names | 1     |
+------------------------+-------+

7. 配置字符集与存储引擎

7.1 验证字符集配置

mysql -uroot -p'Root@2026!' -e "SHOW VARIABLES LIKE 'character_set_server'; SHOW VARIABLES LIKE 'collation_server';"

预期输出:

+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| character_set_server | utf8mb4            |
| collation_server     | utf8mb4_unicode_ci |
+----------------------+--------------------+

7.2 验证存储引擎

mysql -uroot -p'Root@2026!' -e "SHOW VARIABLES LIKE 'default_storage_engine';"

预期输出:

+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+

8. 配置远程访问

8.1 创建远程访问用户

mysql -uroot -p'Root@2026!' << 'SQLEOF'
CREATE USER 'root'@'%' IDENTIFIED BY 'Root@2026!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
SQLEOF

8.2 验证远程用户

mysql -uroot -p'Root@2026!' -e "SELECT user, host FROM mysql.user WHERE user='root';"

预期输出:

+------+-----------+
| user | host      |
+------+-----------+
| root | %         |
| root | localhost |
+------+-----------+

8.3 验证远程用户权限

mysql -uroot -p'Root@2026!' -e "SHOW GRANTS FOR 'root'@'%';"

预期输出包含:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION


9. 关闭防火墙

9.1 停止 firewalld

systemctl stop firewalld

9.2 禁用开机自启

systemctl disable firewalld

9.3 验证防火墙状态

systemctl status firewalld --no-pager | cat

预期输出:Active: inactive (dead)

⚠️ 安全提醒:生产环境建议仅开放 3306 端口,而非完全关闭防火墙:

systemctl start firewalld
systemctl enable firewalld
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload

10. 关闭 SELinux

10.1 查看当前状态

getenforce

10.2 永久关闭 SELinux

sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
sed -i 's/^SELINUX=permissive/SELINUX=disabled/' /etc/selinux/config

10.3 立即生效(无需重启)

setenforce 0

10.4 验证配置

getenforce
grep ^SELINUX= /etc/selinux/config

预期输出:

Permissive
SELINUX=disabled

📝 当前运行模式为 Permissive(仅记录不拦截),重启后将变为 Disabled(完全关闭)。


11. 验证清单

完成所有步骤后,请逐项验证:

序号 验证项 命令 预期结果
1 MySQL 服务状态 systemctl status mysqld active (running)
2 开机自启 systemctl is-enabled mysqld enabled
3 版本号 mysqld --version 8.0.46
4 本地登录 mysql -uroot -p'Root@2026!' -e "SELECT 1;" 成功
5 大小写不敏感 SHOW VARIABLES LIKE 'lower_case_table_names'; 1
6 字符集 SHOW VARIABLES LIKE 'character_set_server'; utf8mb4
7 存储引擎 SHOW VARIABLES LIKE 'default_storage_engine'; InnoDB
8 远程用户 SELECT user, host FROM mysql.user WHERE user='root'; root@% 存在
9 防火墙 systemctl status firewalld inactive
10 SELinux getenforce Permissive 或 Disabled

远程连接测试

从其他机器执行:

mysql -h <服务器IP地址> -uroot -p'Root@2026!'

附录:关键信息速查

项目
MySQL 版本 8.0.46
配置文件 /etc/my.cnf
数据目录 /var/lib/mysql
日志文件 /var/log/mysqld.log
root 密码 Root@2026!
远程用户 root@%
字符集 utf8mb4
排序规则 utf8mb4_unicode_ci
存储引擎 InnoDB
大小写 不敏感 (lower_case_table_names=1)
防火墙 已关闭
SELinux 已关闭

附录:常见问题

Q1: 忘记 root 密码怎么办?

# 1. 停止 MySQL
systemctl stop mysqld

# 2. 跳过权限验证启动
mysqld --skip-grant-tables --user=mysql &

# 3. 无密码登录并修改密码
mysql -uroot
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
FLUSH PRIVILEGES;

# 4. 重启 MySQL
systemctl restart mysqld

Q2: lower_case_table_names 修改后不生效?

该参数必须在 MySQL 初始化之前配置。如果已经初始化,需要:

systemctl stop mysqld
rm -rf /var/lib/mysql/*
mysqld --initialize --user=mysql --lower-case-table-names=1
systemctl start mysqld

Q3: 远程连接被拒绝?

检查以下项目:

  1. 防火墙是否已关闭或开放 3306 端口
  2. SELinux 是否已关闭
  3. bind-address 是否为 0.0.0.0*
  4. 远程用户 root@% 是否已创建
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐