终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)

当你在Windows系统中,以命令行方式,输入 mysql 后,提示 错误:
ERROR 1045 (28000): Access denied for user ‘ODBC’@‘localhost’ (using password: NO)
在这里插入图片描述
请,先确认,你使用的MySQL版本,使用命令 mysql --version,注意 在 version 前 是 2 个减号,
在这里插入图片描述
首先,声明,我使用 的 MySQL 版本是:
mysql Ver 8.0.27 for Win64 on x86_64 (MySQL Community Server - GPL)
其他,MySQL 版本 ,能不能使用我提供的方法解决,暂时还没有测试,
但,如果你是和我一样的版本,用我的方法一定能解决你遇到的问题。

接下来,说明一下,
ERROR 1045 (28000): Access denied for user ‘ODBC’@‘localhost’ (using password: NO)
问题的原理,
这里,先将报错信息,逐字解释一下,如果不感兴趣,请跳过,往下看。

ERROR 1045 (28000):
给出的是,错误和它的代码,这个不重要,

Access denied for user:
访问,拒绝了,用户,
这里的关键字,是 user,用户,
也就是说,这个错误提示信息,说明了,为什么出现这个错误,的,根本原因,是,使用了错误的用户尝试登录MySQL,

(using password: NO):
这个也没用,不用看,意思是: (使用密码了吗:并没有)

‘ODBC’@‘localhost’ :
就是这个 ODBC 用户,
也就是说,当你不指定登录用户时,Windows 在连接 MySQL 数据库的时候,就会使用这个 ODBC 用户去连接 MySQL 数据库,不管你的 MySQL 数据库中是否存在这个 ODBC 用户,Windows系统,都会使用这个 ODBC 用户去 尝试连 MySQL 数据库,个人感觉,应该是,Windows 系统对 ODBC 比较熟吧,毕竟 在 Windows中 有好多 ODBC 相关的接口
(开放数据库连接(Open Database Connectivity,ODBC))
所以,如果你不想使用 mysql -uroot -proot 这种加了两个参数(-u、 -p)方式登录 MySQL 数据库,就是想,直接 敲命令 mysql 就能进入 MySQL 控制台的话,你就需要告诉,MySQL,你不想使用 Windows 系统为你选的 ODBC 用户去连 MySQL,你想使用一个你熟悉的用户登录 MySQL,并且,在登录的时候,不想输入过多的 参数,只用一个 mysql 命令 ,就可以登录到 MySQL 控制台中,
那么,如何告诉 MySQL 呢?

就需要知道,MySQL 的,运行机理,
在 Windows 环境中,MySQL 的启动是去调用 你安装到 Windows 系统中的 mysql 服务的,
这个服务的位置在,控制面板\所有控制面板项\Windows 工具\服务(我的终端是 Windows home版)
如果,你找不到,服务,就百度一下吧,

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)_第1张图片
终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)_第2张图片打开 服务,找到 mysql 服务,这里如果,你曾多次安装过不同版本的 MySQL 的话,可能会有其他的名称,比如 mysql57 、mysql80 等等,反正你知道它是 mysql 就行,
终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)_第3张图片
右键点击,找到的这个 mysql 服务,在弹出的下拉菜单中,点选,属性,
终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)_第4张图片就能看到,mysql 的服务,最终要调用的是,MySQL 安装路径中,bin 里的,mysqld.exe 这个应用程序,
终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)_第5张图片
而,这个 mysqld.exe 应用程序,在启动的时候,第一时间会去找 一个文件,my.ini,
这个 my.ini 文件,会告诉 mysqld 需要在启动的时候做些什么,
所以,我们只要配置好 my.ini 文件,就能告诉和指挥 MySQL 怎么做,也就能达到我们 只使用一个命令 mysql 就能登录到 MySQL 的 控制台里,而不需要 输入 繁琐的 各种参数,
所以,问题的关键,就在 这个 my.ini 文件上了。
接下来,就是去找到 my.ini 这个文件了,

很奇怪,我在 MySQL 官网上下载的这版 MySQL ,在它的安装目录中,没有 my.ini 文件,
所以,通过,全盘搜索,在一个目录下,找到了这个 my.ini 文件,
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)_第6张图片可以打开(使用记事本),可以编辑,但是保存的时候报错,

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)_第7张图片好解决,把这个 my.ini 文件从 C:\ProgramData\MySQL\MySQL Server 8.0\ 拷贝出来,粘贴到 Windows 桌面,然后进行编辑和保存,最后把这个经过编辑和保存过的 My.ini 文件,粘贴回 原来的目录下,
C:\ProgramData\MySQL\MySQL Server 8.0\
系统会提示,替换或跳过文件,点选,替换目标中的文件(R),终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)_第8张图片然后,点,继续,就可以完成,绕过 Windows 系统 权限,进行 my.ini 文件的编辑和保存了。
终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)_第9张图片但是,尝试登录 MySQL 仍然报错,

编辑了 My.ini 文件,但是,没有作用,不是因为我们的理论错误,而是,这个 my.ini 文件的位置不对,
再看一眼 ,mysql 服务的,启动路径,
终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)_第10张图片
很明显,mysql 服务 要启动的是 mysqld.exe 这个应用程序,

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)_第11张图片

而这个应用程序 mysqld.exe 就会在它所在的 MySQL 安装路径中 寻找 它需要的 my.ini 文件,
即:
C:\Program Files\MySQL\MySQL Server 8.0\

在这里插入图片描述

而我们找到 My.ini 文件 所在 的目录是:
C:\ProgramData\MySQL\MySQL Server 8.0
在这里插入图片描述

显然,我们的现在要做的是,将编辑好的 my.ini 文件,搬运到 mysqld.exe 应用程序所在的 安装路径中,但请注意不是和 mysqld.exe 应用程序 同级的目录下面,而是 mysqld.exe 应用程序的父级目录 bin 的上一级目录中,
也就是,C:\Program Files\MySQL\MySQL Server 8.0\

在这里插入图片描述
终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)_第12张图片
查看一下,当前用户,是不是,我们想要的 root,
mysql> select user();
终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)_第13张图片
没错,

问题,解决,
也不用,停止、启动 MySQL 服务,
(net stop mysql、net start mysql)
也不用 在 my.ini 中的 [mysqld]里,skip-grant-tables
按我的方法,就能解决问题,爽不爽!

这里,补充一下,编辑 my.ini 文件需要更改的地方和内容,
打开 my.ini 文件 ,找到 [mysql] (请注意,不是 mysqld,而是 mysql )

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)_第14张图片
然后,输入,我们想要 MySQL 使用的 登录时的用户账号和密码。
请注意,这里,账号,和密码,这两项都要填入,否则,还会报原来的错误,

其实,这个问题困扰我有些日子了,大半年了,期间找了不少网络的帖子,都是复制粘贴类型的,不解决根本问题,就是在刚刚,在 bing 上按 错误提示搜索了一下,看到一位大神的解释,恍然大悟,对,MySQL 的启动过程 有了新的了解和认识,于是立刻做了个实验,很顺利直接就成功了,马上来和大家分享一下,希望能帮到大家,少走弯路,当初确实挺烦恼的,都要砸电脑了,谢谢网络上这些大神文章的指点,保护了我的办公终端。
把我看到那篇决定性的文章粘出来,与大家共飨,

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)_第15张图片
January the 06th 2022 Wednesday

你可能感兴趣的:(笔记,心得,mysql,数据库,database)