资讯动态

Re:Mysql数据库基础篇(一):CentOS/Linux 环境下的完整安装/运行/登录Mysql流程与首次登录异常处理

发布时间:2026/10/25 1:34:29 来源:尧图企业网站定制
◆ 博主名称 小此方-CSDN博客大家好欢迎来到小此方的博客。⭐️Linux系列个人专栏 【主题曲】Mysql⭐️此方的GitHub github_此方⭐️Re系列专栏我们思考 (Rethink) · 我们重建 (Rebuild) · 我们记录 (Record)文章目录概要序論一、下载准备工作1.1 查看和卸载你的机器上原有的Mysql1.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 验证安装后的源状态二、安装与登录Mysql2.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如何退出概要序論本文详细介绍在 Linux 系统上完整部署、配置与调试 MySQL 数据库的全流程。详解旧版本 MySQL 的运行状态检查、服务关闭与残留配置文件卸载方法演示 MySQL 一键安装包部署及密钥过期问题的解决方案剖析首次登录引发的权限问题并提供临时密码、直接登录及绕过权限认证三种核心调整方法解答修改配置文件端口号失败与设置开机自启等边缘运维问题。好的我们开始吧。一、下载准备工作1.1 查看和卸载你的机器上原有的Mysql在在 Linux 系统上安装全新的 MySQL 之前首先需要彻底检查系统中是否已经存在正在运行的 MySQL 或其开源分支 MariaDB 进程。如果存在旧的版本或者残余的安装包必须先将其安全关闭并进行彻底卸载以防止后续安装新版本时发生端口冲突、依赖冲突或配置覆盖等问题。1.1.1 检查旧版本运行状态1. 检查 MySQL 进程使用ps axj | grep mysql命令可以筛选出所有与 MySQL 相关的进程。[rootVM-0-9-opencloudos ~]# ps axj | grep mysql1371073137135813713571371073pts/01371357S00:00grep--colorauto mysql结果分析输出中仅有一条包含grep --colorauto mysql的记录这说明当前系统上并没有真正运行的 MySQL 服务的后台进程。2. 检查 MariaDB 进程MariaDB 是 MySQL 的一个开源分支在许多主流 Linux 发行版中常被作为默认数据库内置安装。因此也需要专门对其进行检查[rootVM-0-9-opencloudos ~]# ps axj | grep mariadb1371073137152513715241371073pts/01371524S00:00grep--colorauto mariadb结果分析同样输出仅显示了 grep 过滤命令自身表明系统中也没有正在运行的 MariaDB 进程。1.1.2 关闭正在运行的旧服务重要提示卸载原有的 MySQL 或 MariaDB 之前必须先手动关闭它且该操作对权限要求较高需要切换至 root 用户或使用 sudo 提升权限。如果你的系统在第一步中查出了正在运行的数据库进程请执行以下命令停止服务[rootVM-0-9-opencloudos ~]# systemctl stop mysqldFailed to stop mysqld.service: Unit mysqld.service not loaded.结果分析系统提示Unit mysqld.service not loaded服务未加载再次印证了当前系统此前并未安装或未启动mysqld服务。1.1.3 查看并卸载已有安装包即使服务没有运行系统里也可能残留有通过包管理器安装的静态安装包。我们需要通过 RPM 机制将其检索并一并清除。1. 检索系统内已安装的 MySQL 关联包[rootVM-0-9-opencloudos ~]# rpm -qa | grep mysql结果分析命令执行后没有任何回显说明当前系统没有通过 rpm 安装任何带有 “mysql” 关键字的软件包。标准环境下的卸载补充说明如果在您的机器上运行rpm -qa | grep mysql后列出了具体的安装包则需要将其送入后面的卸载程序。推荐使用以下高效的一键式卸载组合命令该命令会利用xargs将查找到的每一个安装包名称作为参数传给卸载程序且yum -y remove会在卸载过程中不再询问确认rpm -qa | grep mysql | xargs yum -y remove1.1.4 检查配置文件及数据残留为了确保“干净”的全新安装环境除了卸载软件包外还要重点检查历史遗留的全局配置文件以及数据存放目录。1. 检查全局配置文件路径/etc/my.cnf通常MySQL 的核心配置都保存在该文件中。[rootVM-0-9-opencloudos ~]# ls /etc/my.cnfls: cannot access/etc/my.cnf:No suchfileor directory2. 检查数据存储目录/var/lib/mysql/该目录用来存放数据库的表结构、数据文件以及服务证书等。[rootVM-0-9-opencloudos ~]# ls /var/lib/mysql/ls: cannot access/var/lib/mysql/:No suchfileor directory结论经过全面的排查本机器当前无任何运行中的 MySQL/MariaDB 进程无相关的 rpm 安装包且无历史配置与数据残留。这表明当前的系统环境非常纯净符合直接下载和部署新源的准备要求。(注意若在实际机器中发现/var/lib/mysql/存在残留数据文件且确实不再需要可以使用重命名备份的方式进行处理如mv /var/lib/mysql /var/lib/mysql.bak以此确保新环境不会受历史脏数据影响)1.2 下载 yum 源1.2.1 定位官方软件仓库与版本筛选下载版本必须与操作系统匹配。查看我们下系统版本我们可以通过浏览器访问 MySQL 官方的源下载入口http://repo.mysql.com/。由于网页显示限制建议查看网页源代码。锁定你的系统版本我们通过hostnamectl已经查明当前运行的系统为OpenCloudOS 9.4因此我们需要在列表中找到mysql80-community-release-el9-1.noarch.rpm这一行并点击下载至本地 Windows 电脑中。1.2.2 上传至 Linux 服务器在本地成功获取到对应的.rpm源安装包后我们需要将其传递到 Linux 环境下的专属文件夹内。首先在 root 用户家目录下为本次安装创建独立的目录。[rootVM-0-9-opencloudos ~]# mkdir Mysql[rootVM-0-9-opencloudos ~]# tree.└── Mysql1directory,0files[rootVM-0-9-opencloudos ~]# cd Mysql进入新建的Mysql文件夹后利用传输工具把刚才下载到 Windows 本地的安装包拖拽上传[rootVM-0-9-opencloudos Mysql]# rz文件传输完毕后执行ls -l检查文件的大小与完整性[rootVM-0-9-opencloudos Mysql]# ls -ltotal12-rw-r--r--1root root10534Jun311:18 mysql80-community-release-el9-1.noarch.rpm1.2.3 部署官方 YUM 源文件在正式部署之前我们可以先观察一下系统当前处于“未安装前”的初始源状态。查看系统存放源配置的全局目录/etc/yum.repos.d/[rootVM-0-9-opencloudos Mysql]# ls /etc/yum.repos.d/ -altotal40drwxr-xr-x2root root115May510:57.drwxr-xr-x94root root8192May2713:32..-rw-r--r--1root root15822May510:57 acb56602e5db580ace217147a335f5bb.jpg -rw-r--r--1root root869Jun192025epol.repo -rw-r--r--1root root1101Nov212025epol.repo.rpmnew -rw-r--r--1root root2897Jun192025OpenCloudOS.repo接下来通过rpm -ivh命令正式把这个“官方商店”安装进系统[rootVM-0-9-opencloudos Mysql]# rpm -ivh mysql80-community-release-el9-1.noarch.rpmwarning: 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命令查看源目录的变化[rootVM-0-9-opencloudos Mysql]# ls /etc/yum.repos.d/ -altotal52drwxr-xr-x2root root216Jun311:24.drwxr-xr-x94root root8192May2713:32..-rw-r--r--1root root15822May510:57 acb56602e5db580ace217147a335f5bb.jpg -rw-r--r--1root root869Jun192025epol.repo -rw-r--r--1root root1101Nov212025epol.repo.rpmnew -rw-r--r--1root root951Jul62022mysql-community-debuginfo.repo -rw-r--r--1root root827Jul62022mysql-community.repo -rw-r--r--1root root871Jul62022mysql-community-source.repo -rw-r--r--1root root2897Jun192025OpenCloudOS.repo此时多了3 个以mysql-community开头的全新.repo配置文件。第一个支持直接安装Mysql第二个支持安装Mysql周边内容二、安装与登录Mysql2.1一键安装yum install -y mysql-community-server2.1.1解决密钥过期问题Import of key(s)didnt 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--importhttps://repo.mysql.com/RPM-GPG-KEY-mysql-2023rpm--importhttps://repo.mysql.com/RPM-GPG-KEY-mysql-20252.1.2 检查 MySQL 的状态在成功解决密钥过期问题并完成一键安装后我们需要检查 MySQL 服务是否正确安装并确认其可执行文件及配置文件的分布情况。1. 验证配置文件与可执行程序首先我们可以通过ls /etc/my.cnf确认全局配置文件是否已经生成[rootbite-alicloud MySQL]# ls /etc/my.cnf/etc/my.cnf接着使用which命令查找 MySQL 服务端核心程序mysqld的安装路径[rootbite-alicloud MySQL]# which mysqld/sbin/mysqld2. 服务端与用户端的区别为了更深入地理解 MySQL 的程序结构我们可以分别查看服务端mysqld与客户端mysql程序的所在路径[rootbite-alicloud MySQL]# which mysqld/sbin/mysqld[rootbite-alicloud MySQL]# which mysql/bin/mysql服务端 (/sbin/mysqld)位于sbinSuperuser Binaries目录下这意味着它是超级管理员专属的可执行程序通常只有超级管理员root权限才能够直接启动和管理该系统服务。用户端 (/bin/mysql)位于bin目录下属于通用用户端工具系统中任何普通用户都可以运行该程序来连接和访问数据库。3. 启动并查看服务进程使用systemctl start mysqld命令正式启动 MySQL 守护进程。启动后利用ps axj | grep mysqld检查其在后台的运行状态[rootbite-alicloud MySQL]# systemctl start mysqld[rootbite-alicloud MySQL]# ps axj | grep mysqld1346834673467?-1Sl270:00 /usr/sbin/mysqld--daemonize--pid-file/var/run/mysqld/mysqld.pid2728349734962660pts/03496R00:00grep--colorauto mysqld结果分析此时可以清晰地看到/usr/sbin/mysqld已经作为守护进程成功在后台异步启动且关联的进程 IDPID为3468。4. 查看服务端默认网络端口号在确认进程启动后我们需要进一步验证它是否正常监听了网络端口。使用netstat -nltp命令过滤网络状态[rootbite-alicloud MySQL]# lltotal0[rootbite-alicloud MySQL]# netstat -nltpActive Internet connections(only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp000.0.0.0:800.0.0.0:* LISTEN824/httpd tcp000.0.0.0:220.0.0.0:* LISTEN1038/sshd tcp600:::3306 :::* LISTEN3468/mysqld结果分析最后一行的网络监听信息显示MySQL 服务端进程PID 3468正处于LISTEN状态其默认的服务端口号为 3306。2.2 首次登录与配置调整2.2.1登录引发权限问题在完成上述步骤后MySQL 已经开始正常对外服务。然而当我们直接尝试使用管理员身份进行登录时会遇到权限拦截[rootbite-alicloud MySQL]# mysql -u root -pEnter password: ERROR1045(28000): Access deniedforuserrootlocalhost(using password: NO)问题分析由于 MySQL 8.0 及高版本引入了更严格的安全策略默认情况下无法直接通过无密码或不正确的密码安全登入。接下来的方法一、二、三跟着我的步骤来如果前者不行就用后者再不行就再后者。接下来的方法一、二、三跟着我的步骤来如果前者不行就用后者再不行就再后者。2.2.2方法一获取临时密码获取临时root密码sudogreptemporary password/var/log/mysqld.log执行后如果能看到类似下方的日志记录其中rootlocalhost:后面的字符串就是生成的临时密码2021-04-12T03:23:46.153263Z 1 [Note] A temporary password is generated for rootlocalhost: yLMaLT:v5l*使用临时密码登录mysql-uroot-p在提示Enter password:后输入或复制鼠标右键粘贴上面获取到的临时密码并回车即可。2.2.3方法二直接登录尝试如果你安装的是最新的 mysql没有所谓的临时密码root 默认没有密码。试着直接client登陆一下mysql在提示输入密码时直接敲回车看看能否直接进入 MySQL 命令行。2.2.4方法三绕过权限认证对全局配置文件进行临时调整。使用vim打开/etc/my.cnf[rootbite-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# 跳过密码权限认证表临时用于免密登录port3333# 在企业环境中为了保证数据安全通常会修改默认端口号此处示例修改为3333character-set-serverutf8# 设置服务端的默认编码格式default-storage-engineinnodb# 设置后台的默认存储引擎为 InnoDB注意在配置文件的[mysql]客户端模块中可能会看到#default-character-setutf8的相关注释。由于某些特定版本的 mysql 客户端存在汉字不回显的 Bug此处我们暂不设置该项保持默认即可。修改完配置文件后必须将服务重新启动才能使这些配置生效。我们可以使用stop配合start或者直接使用restart命令来快速重启服务[rootbite-alicloud MySQL]# systemctl stop mysqld[rootbite-alicloud MySQL]# systemctl start mysqld# 或者直接systemctl restart mysqld重启成功后再次通过netstat -nltp验证端口状态[rootbite-alicloud MySQL]# netstat -nltpActive Internet connections(only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp000.0.0.0:800.0.0.0:* LISTEN824/httpd tcp000.0.0.0:220.0.0.0:* LISTEN1038/sshd tcp600:::3333 :::* LISTEN3646/mysqld结果分析端口已由旧的3306变为3333这表明端口更新成功。此时在skip-grant-tables的作用下再次执行mysql -u root -p并在要求输入密码时直接敲击回车即可成功免密切入 MySQL 内部。登录成功后可以使用show databases;命令查看系统当前存在的数据库mysqlshowdatabases;--------------------|Database|--------------------|information_schema||102_db||bit_index||myisam_db||mysql||oj||performance_schema||scott|--------------------8rowsinset(0.01sec)结果分析可以清楚地看到系统内部保留的所有数据库。即使后续进行了服务升级或重启存放在datadir如/var/lib/mysql下的历史数据库与表数据也不会被删除或丢失。三、边缘问题解答问题 1当你把配置文件里面的端口号改了以后为什么以前的网络远程客户端无法访问了而为什么在同一台机器上的客户端却可以正常访问这是因为客户端在连接 MySQL 服务端时存在两条截然不同的访问路径连接路径类型第一条路走网络TCP/IP 协议第二条路走内部秘密通道Unix Socket适用场景远程访问如 Windows 连 Linux或者本机通过-h 127.0.0.1强行指定走网络。客户端和服务器在同一台 Linux 机器上且你直接输入mysql登录而不指定 IP。通信媒介必须通过“IP 端口号”。端口一旦修改旧客户端必须同步修改否则无法通信。不看端口号它看的是一个特殊的本地文件通常叫mysql.sock。问题2如何设置开机启动#开启开机启动systemctlenablemysqld systemctl daemon-reload问题3如何退出ctrl d好的本期内容就到这里如果对你有帮助还不要忘记点赞三联支持。我是此方我们下期再见。bye!

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑