目录
一、下载 准备工作
1.1 查看和卸载你的机器上原有的Mysql
1.1.1 检查旧版本运行状态
1.1.2 关闭正在运行的旧服务
1.1.3 查看并卸载已有安装包
1.1.4 检查配置文件 及数据残留
1.2 下载 yum 源
1.2.1 定位官方软件仓库与版本筛选
1.2.2 上传至 Linux 服务器
1.2.3 部署官方 YUM 源文件
1.2.4 验证安装后的源状态
二、安装与登录Mysql
2.1一键安装
2.1.1解决密钥 过期问题
2.1.2 检查 MySQL 的状态
2.2 首次登录与配置调整
2.2.1登录引发权限问题
2.2.2方法一:获取临时密码
2.2.3方法二:直接登录尝试
2.2.4方法三:绕过权限认证
三、边缘问题解答
问题 1:当你把配置文件里面的端口号改了以后,为什么以前的网络远程客户端无法访问了,而为什么在同一台机器上的客户端却可以正常访问?
问题2:如何设置开机启动?
问题3:如何退出
一、下载 准备工作
1.1 查看和卸载你的机器上原有的Mysql
在在 Linux 系统上安装全新的 MySQL 之前,首先需要彻底检查系统中是否已经存在正在运行的 MySQL 或其开源分支 MariaDB 进程。如果存在旧的版本或者残余的安装包 ,必须先将其安全关闭并进行彻底卸载,以防止后续安装新版本时发生端口冲突、依赖冲突或配置覆盖等问题。
1.1.1 检查旧版本运行状态
1. 检查 MySQL 进程:
使用ps axj | grep mysql命令可以筛选出所有与 MySQL 相关的进程。
[root@VM-0-9-opencloudos ~]# ps axj | grep mysql 1371073 1371358 1371357 1371073 pts/0 1371357 S+ 0 0:00 grep --color=auto mysql结果分析:输出中仅有一条包含grep --color=auto mysql的记录,这说明当前系统上并没有真正运行的 MySQL 服务的后台进程。
2. 检查 MariaDB 进程:
MariaDB 是 MySQL 的一个开源分支,在许多主流 Linux 发行版中常被作为默认数据库内置安装。因此也需要专门对其进行检查:
[root@VM-0-9-opencloudos ~]# ps axj | grep mariadb 1371073 1371525 1371524 1371073 pts/0 1371524 S+ 0 0:00 grep --color=auto mariadb结果分析:同样,输出仅显示了 grep 过滤命令自身,表明系统中也没有正在运行的 MariaDB 进程。
1.1.2 关闭正在运行的旧服务
重要提示:卸载原有的 MySQL 或 MariaDB 之前,必须先手动关闭它,且该操作对权限要求较高,需要切换至 root 用户或使用 sudo 提升权限。
如果你的系统在第一步中查出了正在运行的数据库进程,请执行以下命令停止服务:
[root@VM-0-9-opencloudos ~]# systemctl stop mysqld Failed to stop mysqld.service: Unit mysqld.service not loaded.结果分析:系统提示Unit mysqld.service not loaded(服务未加载),再次印证了当前系统此前并未安装或未启动mysqld服务。
1.1.3 查看并卸载已有安装包
即使服务没有运行,系统里也可能残留有通过包管理器安装的静态安装包。我们需要通过 RPM 机制将其检索并一并清除。
1. 检索系统内已安装的 MySQL 关联包:
[root@VM-0-9-opencloudos ~]# rpm -qa | grep mysql结果分析:命令执行后没有任何回显,说明当前系统没有通过 rpm 安装任何带有 “mysql” 关键字的软件包。
标准环境下的卸载补充说明:
如果在您的机器上运行rpm -qa | grep mysql后列出了具体的安装包,则需要将其送入后面的卸载程序。推荐使用以下高效的一键式卸载组合命令(该命令会利用
xargs将查找到的每一个安装包名称作为参数传给卸载程序,且yum -y remove会在卸载过程中不再询问确认):rpm -qa | grep mysql | xargs yum -y remove
1.1.4 检查配置文件 及数据残留
为了确保“干净”的全新安装环境,除了卸载软件包外,还要重点检查历史遗留的全局配置文件以及数据存放目录。
1. 检查全局配置文件路径/etc/my.cnf:
通常,MySQL 的核心配置都保存在该文件中。
[root@VM-0-9-opencloudos ~]# ls /etc/my.cnf ls: cannot access '/etc/my.cnf': No such file or directory2. 检查数据存储目录/var/lib/mysql/:
该目录用来存放数据库的表结构、数据文件以及服务证书等。
[root@VM-0-9-opencloudos ~]# ls /var/lib/mysql/ ls: cannot access '/var/lib/mysql/': No such file or directory结论:经过全面的排查,本机器当前无任何运行中的 MySQL/MariaDB 进程,无相关的 rpm 安装包,且无历史配置与数据残留。这表明当前的系统环境非常纯净,符合直接下载和部署新源的准备要求。
(注意:若在实际机器中发现
/var/lib/mysql/存在残留数据文件且确实不再需要,可以使用重命名备份的方式进行处理,如mv /var/lib/mysql /var/lib/mysql.bak,以此确保新环境不会受历史脏数据影响)
1.2 下载 yum 源
1.2.1 定位官方软件仓库与版本筛选
下载版本必须与操作系统匹配。查看我们下系统版本:
我们可以通过浏览器访问 MySQL 官方的源下载入口:Index of /232905。由于网页显示限制,建议查看网页源代码。
锁定你的系统版本;我们通过hostnamectl已经查明当前运行的系统为OpenCloudOS 9.4,因此,我们需要在列表中找到mysql80-community-release-el9-1.noarch.rpm这一行并点击下载至本地 Windows 电脑中。
1.2.2 上传至 Linux 服务器
在本地成功获取到对应的.rpm源安装包后,我们需要将其传递到 Linux 环境下的专属文件夹内。首先,在 root 用户家目录下为本次安装创建独立的目录。
[root@VM-0-9-opencloudos ~]# mkdir Mysql [root@VM-0-9-opencloudos ~]# tree . └── Mysql 1 directory, 0 files [root@VM-0-9-opencloudos ~]# cd Mysql进入新建的Mysql文件夹后,利用传输工具把刚才下载到 Windows 本地的安装包拖拽上传:
[root@VM-0-9-opencloudos Mysql]# rz文件传输完毕后,执行ls -l检查文件的大小与完整性:
[root@VM-0-9-opencloudos Mysql]# ls -l total 12 -rw-r--r-- 1 root root 10534 Jun 3 11:18 mysql80-community-release-el9-1.noarch.rpm1.2.3 部署官方 YUM 源文件
在正式部署之前,我们可以先观察一下系统当前处于“未安装前”的初始源状态。查看系统存放源配置的全局目录/etc/yum.repos.d/:
[root@VM-0-9-opencloudos Mysql]# ls /etc/yum.repos.d/ -al total 40 drwxr-xr-x 2 root root 115 May 5 10:57 . drwxr-xr-x 94 root root 8192 May 27 13:32 .. -rw-r--r-- 1 root root 15822 May 5 10:57 acb56602e5db580ace217147a335f5bb.jpg -rw-r--r-- 1 root root 869 Jun 19 2025 epol.repo -rw-r--r-- 1 root root 1101 Nov 21 2025 epol.repo.rpmnew -rw-r--r-- 1 root root 2897 Jun 19 2025 OpenCloudOS.repo接下来,通过rpm -ivh命令正式把这个“官方商店”安装进系统:
[root@VM-0-9-opencloudos Mysql]# rpm -ivh mysql80-community-release-el9-1.noarch.rpm warning: mysql80-community-release-el9-1.noarch.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:mysql80-community-release-el9-1 ################################# [100%](注:安装过程中出现的NOKEY警告是由于尚未导入 MySQL 官方的 GPG 密钥文件,不影响软件源的正常写入,属于正常现象。)
1.2.4 验证安装后的源状态
安装完成后,我们再次使用ls /etc/yum.repos.d/ -al命令查看源目录的变化:
[root@VM-0-9-opencloudos Mysql]# ls /etc/yum.repos.d/ -al total 52 drwxr-xr-x 2 root root 216 Jun 3 11:24 . drwxr-xr-x 94 root root 8192 May 27 13:32 .. -rw-r--r-- 1 root root 15822 May 5 10:57 acb56602e5db580ace217147a335f5bb.jpg -rw-r--r-- 1 root root 869 Jun 19 2025 epol.repo -rw-r--r-- 1 root root 1101 Nov 21 2025 epol.repo.rpmnew -rw-r--r-- 1 root root 951 Jul 6 2022 mysql-community-debuginfo.repo -rw-r--r-- 1 root root 827 Jul 6 2022 mysql-community.repo -rw-r--r-- 1 root root 871 Jul 6 2022 mysql-community-source.repo -rw-r--r-- 1 root root 2897 Jun 19 2025 OpenCloudOS.repo此时多了3 个以mysql-community开头的全新.repo配置文件。第一个:支持直接安装Mysql,第二个:支持安装Mysql周边内容
二、安装与登录Mysql
2.1一键安装
yum install -y mysql-community-server
2.1.1解决密钥 过期问题
Import of key(s) didn't help, wrong key(s)? Public key for mysql-community-client-8.0.46-1.el9.x86_64.rpm is not installed. Failing package is: mysql-community-client-8.0.46-1.el9.x86_64 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022 Public key for mysql-community-client-plugins-8.0.46-1.el9.x86_64.rpm is not installed. Failing package is: mysql-community-client-plugins-8.0.46-1.el9.x86_64 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022 Public key for mysql-community-common-8.0.46-1.el9.x86_64.rpm is not installed. Failing package is: mysql-community-common-8.0.46-1.el9.x86_64 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022 Public key for mysql-community-icu-data-files-8.0.46-1.el9.x86_64.rpm is not installed. Failing package is: mysql-community-icu-data-files-8.0.46-1.el9.x86_64 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022 Public key for mysql-community-libs-8.0.46-1.el9.x86_64.rpm is not installed. Failing package is: mysql-community-libs-8.0.46-1.el9.x86_64 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022 Public key for mysql-community-server-8.0.46-1.el9.x86_64.rpm is not installed. Failing package is: mysql-community-server-8.0.46-1.el9.x86_64 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022 The downloaded packages were saved in cache until the next successful transaction. You can remove cached packages by executing 'yum clean packages'. Error: GPG check FAILEDoh,很不幸,出错了,什么问题?密钥过期了。解决方案:导入最新密钥。
# 导入 2023 与 2025 的密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-20252.1.2 检查 MySQL 的状态
在成功解决密钥过期问题并完成一键安装后,我们需要检查 MySQL 服务是否正确安装,并确认其可执行文件及配置文件的分布情况。
1. 验证配置文件与可执行程序:
首先,我们可以通过ls /etc/my.cnf确认全局配置文件是否已经生成:
[root@bite-alicloud MySQL]# ls /etc/my.cnf /etc/my.cnf接着,使用which命令查找 MySQL 服务端 核心程序mysqld的安装路径:
[root@bite-alicloud MySQL]# which mysqld /sbin/mysqld2. 服务端与用户端的区别:
为了更深入地理解 MySQL 的程序结构,我们可以分别查看服务端mysqld与客户端mysql程序的所在路径:
[root@bite-alicloud MySQL]# which mysqld /sbin/mysqld [root@bite-alicloud MySQL]# which mysql /bin/mysql- 服务端 (
/sbin/mysqld):位于sbin(Superuser Binaries)目录下,这意味着它是超级管理员专属的可执行程序,通常只有超级管理员(root)权限才能够直接启动和管理该系统服务。 - 用户端 (
/bin/mysql):位于bin目录下,属于通用用户端工具,系统中任何普通用户都可以运行该程序来连接和访问数据库。
3. 启动并查看服务进程:
使用systemctl start mysqld命令正式启动 MySQL 守护进程。启动后,利用ps axj | grep mysqld检查其在后台的运行状态:
[root@bite-alicloud MySQL]# systemctl start mysqld [root@bite-alicloud MySQL]# ps axj | grep mysqld 1 3468 3467 3467 ? -1 Sl 27 0:00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid 2728 3497 3496 2660 pts/0 3496 R+ 0 0:00 grep --color=auto mysqld结果分析:此时可以清晰地看到/usr/sbin/mysqld已经作为守护进程成功在后台异步启动,且关联的进程 ID(PID)为3468。
4. 查看服务端默认网络端口号:
在确认进程启动后,我们需要进一步验证它是否正常监听了网络端口。使用netstat -nltp命令过滤网络状态:
[root@bite-alicloud MySQL]# ll total 0 [root@bite-alicloud MySQL]# netstat -nltp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 824/httpd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1038/sshd tcp6 0 0 :::3306 :::* LISTEN 3468/mysqld结果分析:最后一行的网络监听信息显示,MySQL 服务端进程(PID 3468)正处于LISTEN状态,其默认的服务端口号为 3306。
2.2 首次登录与配置调整
2.2.1登录引发权限问题
在完成上述步骤后,MySQL 已经开始正常对外服务。然而,当我们直接尝试使用管理员身份进行登录时,会遇到权限拦截:
[root@bite-alicloud MySQL]# mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)问题分析:由于 MySQL 8.0 及高版本引入了更严格的安全策略,默认情况下无法直接通过无密码或不正确的密码安全登入。
接下来的方法一、二、三跟着我的步骤来,如果前者不行就用后者,再不行就再后者。
2.2.2方法一:获取临时密码
获取临时root密码
sudo grep 'temporary password' /var/log/mysqld.log执行后如果能看到类似下方的日志记录,其中root@localhost:后面的字符串就是生成的临时密码:
2021-04-12T03:23:46.153263Z 1 [Note] A temporary password is generated for root@localhost: yLMaLT:v+5l*使用临时密码登录
mysql -uroot -p在提示Enter password:后,输入(或复制鼠标右键粘贴)上面获取到的临时密码并回车即可。
2.2.3方法二:直接登录尝试
如果你安装的是最新的 mysql,没有所谓的临时密码,root 默认没有密码。试着直接client登陆一下:
mysql在提示输入密码时直接敲回车,看看能否直接进入 MySQL 命令行。
2.2.4方法三:绕过权限认证
对全局配置文件进行临时调整。使用vim打开/etc/my.cnf:
[root@bite-alicloud MySQL]# vim /etc/my.cnf在配置文件的[mysqld]模块下方,我们需要添加一条绕过权限认证的指令,同时规范服务端的编码格式和默认存储引擎。在核心配置区域追加或修改如下内容:
[mysqld] # 核心路径与日志配置 datadir=/var/lib/mysql # MySQL 在未来建表建库时的真实数据存放路径 socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log # 错误日志存放路径 pid-file=/var/run/mysqld/mysqld.pid # pid文件路径 # 权限规避与核心运行配置 skip-grant-tables # 跳过密码权限认证表(临时用于免密登录) port=3333 # 在企业环境中,为了保证数据安全通常会修改默认端口号(此处示例修改为3333) character-set-server=utf8 # 设置服务端的默认编码格式 default-storage-engine=innodb # 设置后台的默认存储引擎为 InnoDB注意:在配置文件的
[mysql]客户端模块中,可能会看到#default-character-set=utf8的相关注释。由于某些特定版本的 mysql 客户端存在汉字不回显的 Bug,此处我们暂不设置该项,保持默认即可。
修改完配置文件后,必须将服务重新启动才能使这些配置生效。我们可以使用stop配合start,或者直接使用restart命令来快速重启服务:
[root@bite-alicloud MySQL]# systemctl stop mysqld [root@bite-alicloud MySQL]# systemctl start mysqld # 或者直接:systemctl restart mysqld重启成功后,再次通过netstat -nltp验证端口状态:
[root@bite-alicloud MySQL]# netstat -nltp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 824/httpd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1038/sshd tcp6 0 0 :::3333 :::* LISTEN 3646/mysqld结果分析:端口已由旧的3306变为3333,这表明端口更新成功。此时,在skip-grant-tables的作用下,再次执行mysql -u root -p并在要求输入密码时直接敲击回车,即可成功免密切入 MySQL 内部。
登录成功后,可以使用show databases;命令查看系统当前存在的数据库:
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | 102_db | | bit_index | | myisam_db | | mysql | | oj | | performance_schema | | scott | +--------------------+ 8 rows in set (0.01 sec)结果分析:可以清楚地看到系统内部保留的所有数据库。即使后续进行了服务升级或重启,存放在datadir(如/var/lib/mysql)下的历史数据库与表数据也不会被删除或丢失。
三、边缘问题解答
问题 1:当你把配置文件里面的端口号改了以后,为什么以前的网络远程客户端无法访问了,而为什么在同一台机器上的客户端却可以正常访问?
这是因为客户端在连接 MySQL 服务端时,存在两条截然不同的访问路径:
| 连接路径类型 | 第一条路:走网络(TCP/IP 协议) | 第二条路:走内部秘密通道(Unix Socket) |
|---|---|---|
| 适用场景 | 远程访问(如 Windows 连 Linux),或者本机通过-h 127.0.0.1强行指定走网络。 | 客户端和服务器在同一台 Linux 机器上,且你直接输入mysql登录而不指定 IP。 |
| 通信媒介 | 必须通过 “IP + 端口号”。端口一旦修改,旧客户端必须同步修改,否则无法通信。 | 不看端口号,它看的是一个特殊的本地文件(通常叫mysql.sock)。 |
问题2:如何设置开机启动?
#开启开机启动 systemctl enable mysqld systemctl daemon-reload问题3:如何退出
ctrl + d