张彤
张彤
Published on 2025-09-08 / 6 Visits
1
0

Rocky Linux 8 安装 MySQL 5.7(仓库安装)SOP

Rocky Linux 8 安装 MySQL 5.7(仓库安装)SOP

说明:MySQL 5.7 已 EOL,仅在确有兼容需求时短期使用。官方 EL8 仓库已不再提供 5.7,我们采用创建 repo,指向官方 EL7 的 5.7 仓库的方式在 Rocky 8 安装(依旧属于“仓库安装”)。 本 SOP 默认你以 rootsudo 执行。


0. 环境确认与准备

# 查看系统版本(确保是 Rocky Linux 8)
cat /etc/os-release
uname -r
​
# 基础更新与工具(含 repo 管理插件)
dnf -y update
dnf -y install dnf-plugins-core
​
# Rocky8 某些依赖在 CRB/PowerTools
dnf config-manager --set-enabled crb || true
dnf config-manager --set-enabled powertools || true
​
# 如系统中已安装 MariaDB/MySQL,请先备份数据!

1. 关闭系统自带 mysql 模块(避免遮蔽)

dnf -y module reset mysql
dnf -y module disable mysql

2. 创建 MySQL 5.7 仓库文件(指向官方 EL7 仓库)

tee /etc/yum.repos.d/mysql57-community.repo >/dev/null <<'EOF'
[mysql57-community]
name=MySQL 5.7 Community Server (EL7 packages)
baseurl=https://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=1
# 同时声明多把官方公钥,避免“钥匙不匹配”
gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
# 避免被模块化遮蔽
module_hotfixes=1
EOF
​
# 导入官方 GPG Key(含旧钥匙与 2022/2023 新钥匙)
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
​
# 刷新缓存
dnf clean all
rm -rf /var/cache/dnf
dnf -y makecache

3. 预装依赖(解决 .so.5 兼容、网络工具等)

# Rocky8 提供 ncurses-compat-libs(提供 libncurses.so.5 / libtinfo.so.5)
dnf -y install ncurses-compat-libs net-tools libaio numactl-libs perl perl-Data-Dumper

若提示找不到 ncurses-compat-libs,请先确认 crb/powertools 已启用;仍无则 dnf provides '*/libtinfo.so.5' 查看何者提供。


4. 安装 MySQL 5.7(仓库安装)

# 直接从我们新建的 mysql57-community 仓库安装
dnf -y install --enablerepo=mysql57-community mysql-community-server

如遇 GPG check FAILED

  1. 确认已导入三把 key(见第 2 步);

  2. 极少数镜像/策略导致签名算法受限,可暂时放宽系统加密策略以通过旧包签名(装完记得恢复):

update-crypto-policies --show               # 一般为 DEFAULT
update-crypto-policies --set DEFAULT:SHA1   # 或不足时用 LEGACY
dnf clean all && rm -rf /var/cache/dnf
dnf -y install --enablerepo=mysql57-community mysql-community-server
update-crypto-policies --set DEFAULT        # 安装完成后立刻恢复

5. 启动与初始化 root 密码

# 启动并设为开机自启
systemctl enable --now mysqld
​
# 取初始化临时密码(复制最后一条)
grep 'temporary password' /var/log/mysqld.log | tail -1
# 仅取口令字段
awk '/temporary password/ {print $NF}' /var/log/mysqld.log | tail -1
​
# 使用“单引号 + 过期口令”的方式登录并立即改强口令
mysql --connect-expired-password -uroot -p'【把上面的临时口令原样粘贴】' <<'SQL'
-- 如复杂度太严可临时放宽一次(可选)
SET GLOBAL validate_password_policy = LOW;
SET GLOBAL validate_password_length = 8;
​
ALTER USER 'root'@'localhost' IDENTIFIED BY 'My57!Root#2025';
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
SQL

若仍报 1045 进不去,可用一次性 init-file 方式强制改密(更安全):

systemctl stop mysqld
cat >/root/mysql-init.sql <<'SQL'
ALTER USER 'root'@'localhost' IDENTIFIED BY 'My57!Root#2025';
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
SQL
chmod 600 /root/mysql-init.sql
/usr/sbin/mysqld --user=mysql --init-file=/root/mysql-init.sql & sleep 8
pkill -f -- "--init-file=/root/mysql-init.sql" || true
rm -f /root/mysql-init.sql
systemctl start mysqld
mysql -uroot -p'My57!Root#2025' -e "SELECT VERSION();"

6.(可选)开启远程访问(两种方式)

6.1 放开监听 + 防火墙

# 确认 3306 监听
ss -lntp | grep :3306 || true
​
# 如仅 127.0.0.1,编辑 /etc/my.cnf 或 /etc/my.cnf.d/server.cnf,在 [mysqld] 段:
#   bind-address=0.0.0.0    (或直接注释 bind-address)
# 可选择加速名解析:
#   skip-name-resolve
# 保存后重启
systemctl restart mysqld
​
# 防火墙放行 3306
firewall-cmd --add-service=mysql --permanent || firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload

6.2 账号授权(建议“远程用新管理员账号”,root 仅限本机)

更安全做法(推荐):

mysql -uroot -p'My57!Root#2025' <<'SQL'
CREATE USER IF NOT EXISTS 'dba'@'10.20.30.%' IDENTIFIED BY 'Str0ng!Pass#2025';
GRANT ALL PRIVILEGES ON *.* TO 'dba'@'10.20.30.%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
SQL

若确需 root 远程:

mysql -uroot -p'My57!Root#2025' <<'SQL'
CREATE USER IF NOT EXISTS 'root'@'10.20.30.%' IDENTIFIED BY 'My57!Root#2025';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.20.30.%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
SQL

(可选)强制加密传输:

# 生成 SSL 证书(首次)
mysql_ssl_rsa_setup
systemctl restart mysqld
​
# 要求远程必须使用 SSL(示例对 root@%)
mysql -uroot -p'My57!Root#2025' -e "ALTER USER 'root'@'%' REQUIRE SSL;"

7. 基本调优与开箱即用建议(可按需落盘到 /etc/my.cnf)

cp -a /etc/my.cnf /etc/my.cnf.bak.$(date +%F)
​
cat >/etc/my.cnf.d/10-basic.cnf <<'CFG'
[mysqld]
# 生产机器记得按内存大小调整
innodb_buffer_pool_size = 2G
innodb_log_file_size    = 512M
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
​
# 慢日志(便于排障)
slow_query_log = ON
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 1
​
#(可选)监听与解析
#bind-address = 0.0.0.0
#skip-name-resolve
CFG
​
systemctl restart mysqld

8. 验证

mysql -uroot -p'My57!Root#2025' -e "SELECT VERSION();"
ss -lntp | grep :3306
systemctl status mysqld --no-pager

9. 常见报错与处理

  • 找不到 mysql-community-server / 总是拉到 8.x 已执行:dnf module disable mysql;确认 /etc/yum.repos.d/mysql57-community.repobaseurl 正确、enabled=1module_hotfixes=1dnf repolist --enabled | egrep -i 'mysql|baseos|appstream|crb|powertools'

  • libtinfo.so.5/libncurses.so.5 dnf -y install ncurses-compat-libs

  • GPG check FAILED 先导入三把 key(见第 2 步);仍失败则临时 update-crypto-policies --set DEFAULT:SHA1 安装,完成后立刻 --set DEFAULT 恢复。

  • 与 MariaDB 冲突

    dnf -y remove mariadb-connector-c mariadb-libs mariadb-*
    dnf -y install mysql-community-libs-compat
    dnf -y install --enablerepo=mysql57-community mysql-community-server
  • root 无法登录 / 初始口令含特殊符号 使用 mysql --connect-expired-password -uroot -p'临时口令'(单引号);或按第 5 步的 init-file 方案强制改密。


10. 卸载(如需回滚)

systemctl stop mysqld
dnf -y remove mysql-community-server mysql-community-client mysql-community-libs mysql-community-common
rm -rf /var/lib/mysql /var/log/mysqld.log /var/log/mysql-slow.log
rm -f  /etc/yum.repos.d/mysql57-community.repo

⚠️ 卸载会删除数据目录(上面命令包含 rm -rf /var/lib/mysql),务必先备份



Comment