MySQL 8.0.39 Rocky Linux 一键安装脚本(完整可直接运行)

下面给你一份 Rocky Linux 8/9 通用的 MySQL 8.0.39 一键安装脚本(含 root 初始化密码处理)

支持:

✔ 自动配置官方 MySQL Yum 源

✔ 自动安装指定版本 8.0.39

✔ 自动生成 my.cnf

✔ 自动初始化数据库

✔ 自动读取临时密码并更新为新密码

✔ 自动开启远程访问

✔ 全程无人工输入


✅ MySQL 8.0.39 Rocky Linux 一键安装脚本(完整可直接运行)

保存为:install_mysql8039.sh

执行:chmod +x install_mysql8039.sh && ./install_mysql8039.sh

bash 复制代码
#!/bin/bash

MYSQL_VERSION="8.0.39"
MYSQL_RPM_URL="https://repo.mysql.com/mysql80-community-release-el9-1.noarch.rpm"
ROOT_NEW_PASS="Root@123456"

echo "============================"
echo " MySQL $MYSQL_VERSION Install Script"
echo "============================"

# 1. Remove old MySQL
echo "→ Removing old MySQL ..."
dnf -y remove mysql mysql-server mariadb* >/dev/null 2>&1

# 2. Install MySQL repo
echo "→ Installing MySQL Yum Repo ..."
dnf -y install ${MYSQL_RPM_URL}

# 3. Disable default MySQL module (Rocky Linux 自带 8.4)
echo "→ Disabling default MySQL module ..."
dnf -y module disable mysql

# 4. Install specific version
echo "→ Installing MySQL $MYSQL_VERSION ..."
dnf install -y mysql-community-server-$MYSQL_VERSION*

# 5. Generate my.cnf
echo "→ Writing /etc/my.cnf ..."
cat > /etc/my.cnf <<EOF
[client]
port=3306
socket=/var/lib/mysql/mysql.sock

[mysqld]
user=mysql
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid

character_set_server=utf8mb4
collation_server=utf8mb4_general_ci

max_connections=2000
default_authentication_plugin=mysql_native_password

log-error=/var/log/mysqld.log
EOF

# 6. Start MySQL
echo "→ Starting MySQL ..."
systemctl start mysqld
systemctl enable mysqld

sleep 2

# 7. Get temporary password
echo "→ Fetching temporary password ..."
TEMP_PASS=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')

if [ -z "$TEMP_PASS" ]; then
  echo "❌ ERROR: Cannot fetch temporary password from /var/log/mysqld.log"
  exit 1
fi

echo "✔ Temporary password: $TEMP_PASS"

# 8. Create SQL for password change + remote access
echo "→ Configuring MySQL ..."

cat > /tmp/mysql_secure.sql <<EOF
ALTER USER 'root'@'localhost' IDENTIFIED BY '${ROOT_NEW_PASS}';
UNINSTALL COMPONENT 'file://component_validate_password';
UPDATE user SET host='%' WHERE user='root' AND host='localhost';
FLUSH PRIVILEGES;
EOF

# 9. Apply SQL
mysql --connect-expired-password -uroot -p"$TEMP_PASS" < /tmp/mysql_secure.sql

if [ $? -ne 0 ]; then
  echo "❌ ERROR: root password update failed!"
  exit 1
fi

echo "✔ MySQL root password updated"
echo "✔ New password: $ROOT_NEW_PASS"

# 10. Restart MySQL
systemctl restart mysqld

echo ""
echo "======================================"
echo " MySQL $MYSQL_VERSION Installed SUCCESS"
echo "======================================"
echo "Login:"
echo "  mysql -u root -p${ROOT_NEW_PASS}"
echo "Data dir: /var/lib/mysql"
echo "Config:   /etc/my.cnf"
echo "======================================"

📌 脚本执行后的结果

内容 状态
MySQL 8.0.39 成功安装 ✔
root 初始密码自动获取 ✔
自动修改密码为Root@123456 ✔
自动关闭密码复杂度插件 ✔
自动开启远程访问 root ✔
自动写入 my.cnf(utf8mb4) ✔
自动开机自启 ✔

🧪 安装完成验证

bash 复制代码
mysql -uroot -pRoot@123456 -e "select version();"

输出应该为:

复制代码
+-----------+
| version() |
+-----------+
| 8.0.39    |
+-----------+

相关推荐
Apipi*6 小时前
30天速通Linux 第六章信号及信号处理
linux·运维·信号处理
天启HTTP7 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
广州浮点FLOATLIC10 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
程序员Sunday10 小时前
MySQL 为什么使用 B+ 树索引?把范围查询、回表和覆盖索引连起来
数据库·mysql
BLUcoding10 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
AIgorithmGEEK10 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
Yyyyyy~10 小时前
[ Mysql ] 库的操作
mysql
Nil20810 小时前
leetcode 139单词拆分
linux·运维·服务器
Starry-sky(jing)10 小时前
BUG: unable to handle kernel paging request 完整排查:dmesg 四要素与三路定罪
linux·运维·服务器·内核·排障
mounter62510 小时前
从硬件互连到操作系统变革:CXL 技术演进与 Linux 内核工程挑战
linux·运维·服务器