麒麟 V10 安装 Oracle MySQL 8.0.46 记录
0. 为什么本次选择 MySQL 8.0这次最终选择MySQL 8.0主要不是因为版本越旧越好而是因为它更适合当前这台麒麟 V10 虚拟机的实际运行环境。原因如下MySQL 8.0与当前系统环境兼容性更高当前系统在仓库识别上会落到el/10但系统实际运行库版本又没有达到MySQL 8.4 el10 RPM的依赖要求已实际出现缺少以下依赖的报错GLIBC_2.38libssl.so.3libcrypto.so.3MySQL 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 LTS1. 适用场景系统麒麟 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-reload4.2 安装依赖dnf install -y libaio numactl-libs ncurses-compat-libs xz wget4.3 创建 mysql 用户id mysql || useradd -r -s /sbin/nologin mysql4.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.xz4.5 创建软链接ln -s /usr/local/mysql-8.0.46-linux-glibc2.17-x86_64-minimal /usr/local/mysql4.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/mysql4.7 创建配置文件/etc/my.cnfcat /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 port3306 usermysql character-set-serverutf8mb4 [mysql] default-character-setutf8mb4 EOF4.8 初始化数据库/usr/local/mysql/bin/mysqld --defaults-file/etc/my.cnf --initialize --usermysql4.9 创建 systemd 服务文件cat /usr/lib/systemd/system/mysqld.service EOF [Unit] DescriptionMySQL Server Afternetwork.target [Service] Typeforking Usermysql Groupmysql 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 LimitNOFILE5000 Restarton-failure [Install] WantedBymulti-user.target EOF4.10 启动服务systemctl daemon-reload systemctl enable mysqld systemctl start mysqld systemctl status mysqld -l --no-pager4.11 获取初始密码grep temporary password /var/log/mysql/error.log4.12 登录 MySQL/usr/local/mysql/bin/mysql -uroot -p -S /var/run/mysql/mysql.sock4.13 修改 root 密码ALTER USER rootlocalhost IDENTIFIED BY NewPassword123!;4.14 配置环境变量echo export PATH/usr/local/mysql/bin:$PATH /etc/profile.d/mysql.sh source /etc/profile.d/mysql.sh mysql --version5. 安装成功的确认方法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 33065.4 确认能够登录mysql -uroot -p -S /var/run/mysql/mysql.sock登录后可以执行SELECT VERSION(); SHOW DATABASES;5.5 确认开机自启systemctl is-enabled mysqld正确返回enabled6. 本次安装过程中的错误记录与处理6.1 启动失败/tmp/mysql不存在报错现象mysqld: Cant 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/mysql6.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.service6.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.xz7. 本次安装最终结果已确认出现过如下版本输出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 --version9.2 服务状态验证systemctl status mysqld -l --no-pager9.3 端口监听验证ss -lntp | grep 33069.4 登录验证mysql -uroot -p -S /tmp/mysql/mysql.sock9.5 数据库版本验证SELECT VERSION();如果上述命令都正常则可判定MySQL 已安装成功MySQL 服务已成功启动本地连接正常数据库已经具备可使用状态10. 常用 MySQL 启停与运维命令10.1 启动 MySQLsystemctl start mysqld10.2 停止 MySQLsystemctl stop mysqld10.3 重启 MySQLsystemctl restart mysqld10.4 查看 MySQL 状态systemctl status mysqld -l --no-pager10.5 查看是否开机自启systemctl is-enabled mysqld10.6 设置开机自启systemctl enable mysqld10.7 取消开机自启systemctl disable mysqld10.8 查看错误日志tail -n 100 /var/log/mysql/error.log10.9 查看监听端口ss -lntp | grep 330610.10 登录本地 MySQLmysql -uroot -p -S /tmp/mysql/mysql.sock10.11 查看数据库列表SHOW DATABASES;10.12 查看用户SELECT user,host FROM mysql.user;11. 开启远程连接与放行 3306如果只做本机学习可以不开放远程连接。 如果要让其他机器连接当前 MySQL需要完成以下配置。11.1 确认 MySQL 监听地址先检查/etc/my.cnf是否存在以下配置bind-address0.0.0.0如果没有可以在[mysqld]段中加入bind-address0.0.0.0修改后重启systemctl restart mysqld11.2 创建远程登录用户登录 MySQLmysql -uroot -p -S /tmp/mysql/mysql.sock创建业务用户示例CREATE USER appuser% IDENTIFIED BY AppUser123!; GRANT ALL PRIVILEGES ON *.* TO appuser% WITH GRANT OPTION; FLUSH PRIVILEGES;说明%表示允许任意主机连接如果你只想允许固定机器访问可以把%改为指定 IP例如只允许192.168.8.100访问CREATE USER appuser192.168.8.100 IDENTIFIED BY AppUser123!; GRANT ALL PRIVILEGES ON *.* TO appuser192.168.8.100 WITH GRANT OPTION; FLUSH PRIVILEGES;11.3 放行防火墙 3306 端口如果系统启用了firewalld执行firewall-cmd --permanent --add-port3306/tcp firewall-cmd --reload firewall-cmd --list-ports11.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 AppDb123!; 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 --version13.2mysqld.service不存在处理方向检查/usr/lib/systemd/system/mysqld.service是否创建成功重新执行systemctl daemon-reloadls -l /usr/lib/systemd/system/mysqld.service systemctl daemon-reload systemctl start mysqld13.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.log13.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端口正常监听可以正常登录并执行 SQL16. 本次最终修复结果补充在后续使用过程中MySQL 曾再次出现无法启动的问题核心报错为mysqld: Cant get stat of /tmp/mysql (OS errno 2 - No such file or directory)16.1 问题原因最初配置把以下文件都放在了/tmp/mysqlsocketpid-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 mysqld16.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 port3306 usermysql character-set-serverutf8mb4 [mysql] default-character-setutf8mb416.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后续如果再检查服务状态和端口常用命令如下