终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)
作者:mmseoamin日期:2023-12-25

当你在Windows系统中,以命令行方式,输入 mysql 后,提示 错误:

ERROR 1045 (28000): Access denied for user ‘ODBC’@‘localhost’ (using password: NO)

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO),在这里插入图片描述,第1张

请,先确认,你使用的MySQL版本,使用命令 mysql --version,注意 在 version 前 是 2 个减号,

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO),在这里插入图片描述,第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),在这里插入图片描述,第3张

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO),在这里插入图片描述,第4张打开 服务,找到 mysql 服务,这里如果,你曾多次安装过不同版本的 MySQL 的话,可能会有其他的名称,比如 mysql57 、mysql80 等等,反正你知道它是 mysql 就行,

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO),在这里插入图片描述,第5张

右键点击,找到的这个 mysql 服务,在弹出的下拉菜单中,点选,属性,

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO),在这里插入图片描述,第6张就能看到,mysql 的服务,最终要调用的是,MySQL 安装路径中,bin 里的,mysqld.exe 这个应用程序,

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO),在这里插入图片描述,第7张

而,这个 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),在这里插入图片描述,第8张可以打开(使用记事本),可以编辑,但是保存的时候报错,

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO),在这里插入图片描述,第9张好解决,把这个 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),在这里插入图片描述,第10张然后,点,继续,就可以完成,绕过 Windows 系统 权限,进行 my.ini 文件的编辑和保存了。

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO),在这里插入图片描述,第11张但是,尝试登录 MySQL 仍然报错,

编辑了 My.ini 文件,但是,没有作用,不是因为我们的理论错误,而是,这个 my.ini 文件的位置不对,

再看一眼 ,mysql 服务的,启动路径,

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO),在这里插入图片描述,第7张

很明显,mysql 服务 要启动的是 mysqld.exe 这个应用程序,

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO),在这里插入图片描述,第13张

而这个应用程序 mysqld.exe 就会在它所在的 MySQL 安装路径中 寻找 它需要的 my.ini 文件,

即:

C:\Program Files\MySQL\MySQL Server 8.0\

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO),在这里插入图片描述,第14张

而我们找到 My.ini 文件 所在 的目录是:

C:\ProgramData\MySQL\MySQL Server 8.0

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO),在这里插入图片描述,第15张

显然,我们的现在要做的是,将编辑好的 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),在这里插入图片描述,第14张

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO),在这里插入图片描述,第17张

查看一下,当前用户,是不是,我们想要的 root,

mysql> select user();

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO),在这里插入图片描述,第18张

没错,

问题,解决,

也不用,停止、启动 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),在这里插入图片描述,第19张

然后,输入,我们想要 MySQL 使用的 登录时的用户账号和密码。

请注意,这里,账号,和密码,这两项都要填入,否则,还会报原来的错误,

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

把我看到那篇决定性的文章粘出来,与大家共飨,

终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO),在这里插入图片描述,第20张

January the 06th 2022 Wednesday