0. 为什么本次选择 MySQL 8.0
这次最终选择MySQL 8.0,主要不是因为版本越旧越好,而是因为它更适合当前这台麒麟 V10 虚拟机的实际运行环境。
原因如下:
MySQL 8.0与当前系统环境兼容性更高当前系统在仓库识别上会落到
el/10但系统实际运行库版本又没有达到
MySQL 8.4 el10 RPM的依赖要求已实际出现缺少以下依赖的报错:
GLIBC_2.38libssl.so.3libcrypto.so.3
MySQL 8.0提供了更适合当前环境的通用二进制包官方提供
Linux Generic (glibc 2.17) (x86, 64-bit)安装包该包更适合麒麟 V10 这类兼容环境
避开了 RPM 安装时对系统仓库和高版本运行库的强依赖
MySQL 8.4在当前机器上通过仓库安装成本更高虽然
8.4是 LTS 版本但在本次环境里,仓库安装已经实际出现依赖不满足
如果继续坚持
8.4 RPM路线,需要额外处理系统运行库兼容问题,复杂度明显更高
当前目标是先稳定安装成功并正常使用
本次重点是让 MySQL 在麒麟 V10 上先稳定跑起来
MySQL 8.0.46已经能够完成安装,并且客户端版本已验证成功对当前学习、实验、开发和一般部署需求来说,
8.0是更稳妥的选择
结论:
如果当前环境不方便升级系统运行库,优先选择
MySQL 8.0 Generic (glibc 2.17)二进制包如果后续操作系统环境升级、依赖满足,再考虑切换到
MySQL 8.4 LTS
1. 适用场景
系统:麒麟 V10
架构:
x86_64安装目标:
Oracle MySQL Community Server 8.0.46安装方式:
Linux Generic (glibc 2.17) x86_64二进制包安装
本文档整理了本次安装的正确步骤,以及安装过程中遇到的典型报错和处理方法。
2. 为什么最终选择二进制包安装
前期尝试过使用 MySQL 官方仓库安装,但在当前系统环境下遇到了两个问题:
mysql80-community仓库地址落到了el/10,访问返回404即使改为
8.4仓库,安装时仍然缺少高版本运行库,例如:GLIBC_2.38libssl.so.3libcrypto.so.3
因此最终确定:
不再使用
yum/dnf repo安装 MySQL 8.0改用 MySQL 官方通用二进制包安装
3. 正确下载的安装包
在 MySQL 官方下载页中应选择:
Select Version:8.0.46Select Operating System:Linux - GenericSelect OS Version:Linux - Generic (glibc 2.17) (x86, 64-bit)
推荐下载的文件:
mysql-8.0.46-linux-glibc2.17-x86_64-minimal.tar.xz
说明:
minimal.tar.xz体积更小,适合当前安装Test Suite相关文件不用下载.tar.xz比.tar更适合联网下载
4. 标准安装步骤
假设安装包已下载到桌面,路径可能为:
/root/Desktop/mysql-8.0.46-linux-glibc2.17-x86_64-minimal.tar.xz
或:
/root/桌面/mysql-8.0.46-linux-glibc2.17-x86_64-minimal.tar.xz
如果你的文件路径不同,请把下面命令中的路径改成实际路径。
4.1 清理旧残留
注意:以下命令会删除旧的 MySQL 安装目录、配置和数据目录。
systemctl stop mysqld 2>/dev/null systemctl disable mysqld 2>/dev/null rm -f /usr/lib/systemd/system/mysqld.service rm -f /etc/my.cnf rm -rf /usr/local/mysql rm -rf /usr/local/mysql-* rm -rf /data/mysql rm -rf /var/log/mysql rm -rf /tmp/mysql systemctl daemon-reload
4.2 安装依赖
dnf install -y libaio numactl-libs ncurses-compat-libs xz wget
4.3 创建 mysql 用户
id mysql || useradd -r -s /sbin/nologin mysql
4.4 解压安装包
如果安装包在中文桌面:
cd /usr/local tar -xf /root/桌面/mysql-8.0.46-linux-glibc2.17-x86_64-minimal.tar.xz
如果安装包在英文桌面:
cd /usr/local tar -xf /root/Desktop/mysql-8.0.46-linux-glibc2.17-x86_64-minimal.tar.xz
4.5 创建软链接
ln -s /usr/local/mysql-8.0.46-linux-glibc2.17-x86_64-minimal /usr/local/mysql
4.6 创建目录并授权
mkdir -p /data/mysql mkdir -p /data/mysql/tmp mkdir -p /var/log/mysql mkdir -p /var/run/mysql chown -R mysql:mysql /usr/local/mysql /usr/local/mysql-8.0.46-linux-glibc2.17-x86_64-minimal chown -R mysql:mysql /data/mysql /var/log/mysql /var/run/mysql chmod 750 /data/mysql chmod 755 /data/mysql/tmp /var/log/mysql /var/run/mysql
4.7 创建配置文件/etc/my.cnf
cat >/etc/my.cnf <<'EOF' [client] socket=/var/run/mysql/mysql.sock [mysqld] basedir=/usr/local/mysql datadir=/data/mysql socket=/var/run/mysql/mysql.sock pid-file=/var/run/mysql/mysqld.pid log-error=/var/log/mysql/error.log tmpdir=/data/mysql/tmp port=3306 user=mysql character-set-server=utf8mb4 [mysql] default-character-set=utf8mb4 EOF
4.8 初始化数据库
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql
4.9 创建 systemd 服务文件
cat >/usr/lib/systemd/system/mysqld.service <<'EOF' [Unit] Description=MySQL Server After=network.target [Service] Type=forking User=mysql Group=mysql ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --daemonize ExecStop=/usr/local/mysql/bin/mysqladmin --socket=/var/run/mysql/mysql.sock -uroot shutdown LimitNOFILE=5000 Restart=on-failure [Install] WantedBy=multi-user.target EOF
4.10 启动服务
systemctl daemon-reload systemctl enable mysqld systemctl start mysqld systemctl status mysqld -l --no-pager
4.11 获取初始密码
grep 'temporary password' /var/log/mysql/error.log
4.12 登录 MySQL
/usr/local/mysql/bin/mysql -uroot -p -S /var/run/mysql/mysql.sock
4.13 修改 root 密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword@123!';
4.14 配置环境变量
echo 'export PATH=/usr/local/mysql/bin:$PATH' >/etc/profile.d/mysql.sh source /etc/profile.d/mysql.sh mysql --version
5. 安装成功的确认方法
5.1 确认客户端命令可用
mysql --version
正确示例:
mysql Ver 8.0.46 for Linux on x86_64 (MySQL Community Server - GPL)
5.2 确认服务已启动
systemctl status mysqld -l --no-pager
关键看是否包含:
Active: active (running)
5.3 确认 3306 端口监听
ss -lntp | grep 3306
5.4 确认能够登录
mysql -uroot -p -S /var/run/mysql/mysql.sock
登录后可以执行:
SELECT VERSION(); SHOW DATABASES;
5.5 确认开机自启
systemctl is-enabled mysqld
正确返回:
enabled
6. 本次安装过程中的错误记录与处理
6.1 启动失败:/tmp/mysql不存在
报错现象:
mysqld: Can't get stat of '/tmp/mysql' (OS errno 2 - No such file or directory)
原因:
socketpid-filetmpdir
这些路径依赖/tmp/mysql,但目录不存在。
处理方法:
mkdir -p /tmp/mysql chown -R mysql:mysql /tmp/mysql
并统一配置文件中的以下路径:
socket=/tmp/mysql/mysql.sock pid-file=/tmp/mysql/mysqld.pid tmpdir=/tmp/mysql
6.2 旧配置疑似存在路径手误
问题表现:
出现过
--tmpdir=/tmp/mqlExecStart中参数疑似拼接错误
结论:
tmpdir应统一改为/tmp/mysql服务文件中的
ExecStart参数要重新整理,避免路径连写错误
6.3 使用 MySQL 8.0 官方仓库时报 404
报错现象:
Errors during downloading metadata for repository 'mysql80-community' Status code: 404 for https://repo.mysql.com/yum/mysql-8.0-community/el/10/x86_64/repodata/repomd.xml
原因:
系统仓库路径被解析到了
el/10当前环境下
mysql80-community对应的el/10仓库不可用
处理结论:
不再使用该方式安装 MySQL 8.0
改用官方通用二进制包安装
6.4mysqld.service不存在
报错现象:
Failed to enable unit: Unit file mysqld.service does not exist. Unit mysqld.service could not be found.
原因:
MySQL 包并没有通过仓库成功安装
或服务文件已经被删除
处理方法:
放弃失败的仓库安装方式
采用二进制安装
手工创建
/usr/lib/systemd/system/mysqld.service
6.5mysql-community-server找不到
报错现象:
No match for argument: mysql-community-server Error: Unable to find a match: mysql-community-server
原因:
MySQL 仓库没有成功启用
/etc/yum.repos.d/mysql-community.repo未生成
处理结论:
仓库方式不稳定
最终切换为二进制安装方式
6.6 使用 8.4 仓库时缺少高版本运行库
报错现象:
nothing provides libc.so.6(GLIBC_2.38)(64bit) nothing provides libcrypto.so.3()(64bit) nothing provides libssl.so.3()(64bit)
原因:
当前麒麟 V10 运行库版本低于
el10下 MySQL 8.4 RPM 的依赖要求
处理结论:
不适合继续使用
el10的 RPM 方式安装 MySQL 8.4适合改用
glibc2.17的 MySQL 8.0 Generic 二进制包
6.7 解压失败:安装包不在/root/
报错现象:
tar: /root/mysql-8.0.46-linux-glibc2.17-x86_64-minimal.tar.xz:无法 open: 没有那个文件或目录
原因:
安装包实际下载到了桌面,不在
/root/
处理方法:
改用桌面真实路径解压
示例:
tar -xf /root/Desktop/mysql-8.0.46-linux-glibc2.17-x86_64-minimal.tar.xz
或:
tar -xf /root/桌面/mysql-8.0.46-linux-glibc2.17-x86_64-minimal.tar.xz
7. 本次安装最终结果
已确认出现过如下版本输出:
mysql Ver 8.0.46 for Linux on x86_64 (MySQL Community Server - GPL)
这说明:
MySQL 二进制程序已经正确安装
PATH环境变量已经配置生效
后续只需再确认:
mysqld服务是否处于active (running)是否可以通过
root正常登录是否已完成 root 密码修改
8. 推荐的后续命令
systemctl status mysqld -l --no-pager systemctl is-enabled mysqld ss -lntp | grep 3306 mysql -uroot -p -S /tmp/mysql/mysql.sock
登录后可执行:
SELECT VERSION(); SHOW DATABASES;
9. 安装结果说明
本次安装过程中,已经确认出现如下版本输出:
mysql Ver 8.0.46 for Linux on x86_64 (MySQL Community Server - GPL)
这说明以下事项已经成立:
MySQL 客户端程序已经正确安装
/usr/local/mysql/bin已经可以正常使用环境变量已经生效,
mysql命令可以直接调用
建议最终交付时至少保留以下验证结果截图或终端输出:
9.1 版本验证
mysql --version
9.2 服务状态验证
systemctl status mysqld -l --no-pager
9.3 端口监听验证
ss -lntp | grep 3306
9.4 登录验证
mysql -uroot -p -S /tmp/mysql/mysql.sock
9.5 数据库版本验证
SELECT VERSION();
如果上述命令都正常,则可判定:
MySQL 已安装成功
MySQL 服务已成功启动
本地连接正常
数据库已经具备可使用状态
10. 常用 MySQL 启停与运维命令
10.1 启动 MySQL
systemctl start mysqld
10.2 停止 MySQL
systemctl stop mysqld
10.3 重启 MySQL
systemctl restart mysqld
10.4 查看 MySQL 状态
systemctl status mysqld -l --no-pager
10.5 查看是否开机自启
systemctl is-enabled mysqld
10.6 设置开机自启
systemctl enable mysqld
10.7 取消开机自启
systemctl disable mysqld
10.8 查看错误日志
tail -n 100 /var/log/mysql/error.log
10.9 查看监听端口
ss -lntp | grep 3306
10.10 登录本地 MySQL
mysql -uroot -p -S /tmp/mysql/mysql.sock
10.11 查看数据库列表
SHOW DATABASES;
10.12 查看用户
SELECT user,host FROM mysql.user;
11. 开启远程连接与放行 3306
如果只做本机学习,可以不开放远程连接。 如果要让其他机器连接当前 MySQL,需要完成以下配置。
11.1 确认 MySQL 监听地址
先检查/etc/my.cnf是否存在以下配置:
bind-address=0.0.0.0
如果没有,可以在[mysqld]段中加入:
bind-address=0.0.0.0
修改后重启:
systemctl restart mysqld
11.2 创建远程登录用户
登录 MySQL:
mysql -uroot -p -S /tmp/mysql/mysql.sock
创建业务用户示例:
CREATE USER 'appuser'@'%' IDENTIFIED BY 'AppUser@123!'; GRANT ALL PRIVILEGES ON *.* TO 'appuser'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
说明:
'%'表示允许任意主机连接如果你只想允许固定机器访问,可以把
%改为指定 IP
例如只允许192.168.8.100访问:
CREATE USER 'appuser'@'192.168.8.100' IDENTIFIED BY 'AppUser@123!'; GRANT ALL PRIVILEGES ON *.* TO 'appuser'@'192.168.8.100' WITH GRANT OPTION; FLUSH PRIVILEGES;
11.3 放行防火墙 3306 端口
如果系统启用了firewalld,执行:
firewall-cmd --permanent --add-port=3306/tcp firewall-cmd --reload firewall-cmd --list-ports
11.4 验证远程连接
在其他机器上执行:
mysql -h 服务器IP -P 3306 -u appuser -p
如果连接失败,重点检查:
服务是否启动
3306 是否监听
防火墙是否放行
用户授权是否正确
虚拟机网络模式是否允许访问
12. 创建数据库与业务用户示例
登录后可以按下面方式创建业务数据库:
CREATE DATABASE appdb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
创建专用用户并只授权某个库:
CREATE USER 'appdb_user'@'%' IDENTIFIED BY 'AppDb@123!'; GRANT ALL PRIVILEGES ON appdb.* TO 'appdb_user'@'%'; FLUSH PRIVILEGES;
查看授权:
SHOW GRANTS FOR 'appdb_user'@'%';
13. 常见故障排查清单
13.1mysql命令找不到
处理方法:
echo 'export PATH=/usr/local/mysql/bin:$PATH' >/etc/profile.d/mysql.sh source /etc/profile.d/mysql.sh mysql --version
13.2mysqld.service不存在
处理方向:
检查
/usr/lib/systemd/system/mysqld.service是否创建成功重新执行
systemctl daemon-reload
ls -l /usr/lib/systemd/system/mysqld.service systemctl daemon-reload systemctl start mysqld
13.3 服务启动失败
优先查看日志:
systemctl status mysqld -l --no-pager tail -n 100 /var/log/mysql/error.log
重点检查:
/tmp/mysql是否存在/data/mysql权限是否正确/etc/my.cnf是否写错路径
13.4 3306 没有监听
检查:
ss -lntp | grep 3306
如果没有输出,说明服务未正常监听,继续检查:
systemctl status mysqld -l --no-pager tail -n 100 /var/log/mysql/error.log
13.5 无法远程连接
依次检查:
bind-address是否允许外部访问MySQL 用户是否授权给
%或指定 IP防火墙是否已开放
3306/tcp虚拟机使用的是 NAT、桥接还是仅主机模式
13.6 忘记 root 密码
本次文档不展开密码重置流程。 如后续需要,可单独补充“跳过授权表重置 root 密码”的操作文档。
14. 虚拟机网络模式提醒
如果你准备从宿主机或其他机器访问这台麒麟虚拟机,还需要关注 VMware 网络模式:
NAT:通常宿主机可以访问虚拟机,但其他外部机器访问受限桥接:虚拟机直接加入局域网,最适合做远程连接测试仅主机:通常只能宿主机和虚拟机互通
如果远程连接一直失败,除了 MySQL 配置本身,也要检查 VMware 网络模式是否符合你的访问目标。
15. 本文档结论
本次在麒麟 V10 上安装 Oracle MySQL 的最终可行方案为:
选择
MySQL Community Server 8.0.46下载
Linux Generic (glibc 2.17) (x86, 64-bit)二进制包使用
minimal.tar.xz安装包进行部署手工配置
my.cnf、数据目录、日志目录和systemd服务
最终判断标准为:
mysql --version正常输出8.0.46mysqld服务状态为active (running)3306端口正常监听可以正常登录并执行 SQL
16. 本次最终修复结果补充
在后续使用过程中,MySQL 曾再次出现无法启动的问题,核心报错为:
mysqld: Can't get stat of '/tmp/mysql' (OS errno 2 - No such file or directory)
16.1 问题原因
最初配置把以下文件都放在了/tmp/mysql:
socketpid-filetmpdir
但/tmp属于临时目录,系统重启后可能被清空,因此会导致:
mysqld.service启动失败mysql.sock不存在pid文件路径失效
16.2 临时修复方法
当时通过重新创建目录,可以临时恢复启动:
mkdir -p /tmp/mysql chown -R mysql:mysql /tmp/mysql chmod 755 /tmp/mysql systemctl start mysqld
16.3 最终长期修复方案
为了避免/tmp被清空后再次影响 MySQL,最终将配置调整为:
socket=/var/run/mysql/mysql.sockpid-file=/var/run/mysql/mysqld.pidtmpdir=/data/mysql/tmp
并创建稳定目录:
mkdir -p /var/run/mysql mkdir -p /data/mysql/tmp chown -R mysql:mysql /var/run/mysql /data/mysql/tmp chmod 755 /var/run/mysql /data/mysql/tmp
最终使用的/etc/my.cnf关键配置如下:
[client] socket=/var/run/mysql/mysql.sock [mysqld] basedir=/usr/local/mysql datadir=/data/mysql socket=/var/run/mysql/mysql.sock pid-file=/var/run/mysql/mysqld.pid log-error=/var/log/mysql/error.log tmpdir=/data/mysql/tmp port=3306 user=mysql character-set-server=utf8mb4 [mysql] default-character-set=utf8mb4
16.4 最终验证结果
本次最终已经验证成功:
systemctl status mysqld -l --no-pager显示active (running)ss -lntp | grep 3306显示3306正常监听mysql -uroot -p -S /var/run/mysql/mysql.sock可以正常登录登录后显示版本为
MySQL Community Server - GPL 8.0.46
另外,33060端口同时监听属于正常现象,这是 MySQL 8 的X Plugin端口,不是异常问题。
16.5 最终建议
后续在本机环境中,统一使用下面的登录命令:
mysql -uroot -p -S /var/run/mysql/mysql.sock
后续如果再检查服务状态和端口,常用命令如下: