当你在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版)
如果,你找不到,服务,就百度一下吧,
打开 服务,找到 mysql 服务,这里如果,你曾多次安装过不同版本的 MySQL 的话,可能会有其他的名称,比如 mysql57 、mysql80 等等,反正你知道它是 mysql 就行,
右键点击,找到的这个 mysql 服务,在弹出的下拉菜单中,点选,属性,
就能看到,mysql 的服务,最终要调用的是,MySQL 安装路径中,bin 里的,mysqld.exe 这个应用程序,
而,这个 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
可以打开(使用记事本),可以编辑,但是保存的时候报错,
好解决,把这个 my.ini 文件从 C:\ProgramData\MySQL\MySQL Server 8.0\ 拷贝出来,粘贴到 Windows 桌面,然后进行编辑和保存,最后把这个经过编辑和保存过的 My.ini 文件,粘贴回 原来的目录下,
C:\ProgramData\MySQL\MySQL Server 8.0\
系统会提示,替换或跳过文件,点选,替换目标中的文件(R),然后,点,继续,就可以完成,绕过 Windows 系统 权限,进行 my.ini 文件的编辑和保存了。
但是,尝试登录 MySQL 仍然报错,
编辑了 My.ini 文件,但是,没有作用,不是因为我们的理论错误,而是,这个 my.ini 文件的位置不对,
再看一眼 ,mysql 服务的,启动路径,
很明显,mysql 服务 要启动的是 mysqld.exe 这个应用程序,
而这个应用程序 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\
查看一下,当前用户,是不是,我们想要的 root,
mysql> select user();
没错,
问题,解决,
也不用,停止、启动 MySQL 服务,
(net stop mysql、net start mysql)
也不用 在 my.ini 中的 [mysqld]里,skip-grant-tables
按我的方法,就能解决问题,爽不爽!
这里,补充一下,编辑 my.ini 文件需要更改的地方和内容,
打开 my.ini 文件 ,找到 [mysql] (请注意,不是 mysqld,而是 mysql )
然后,输入,我们想要 MySQL 使用的 登录时的用户账号和密码。
请注意,这里,账号,和密码,这两项都要填入,否则,还会报原来的错误,
其实,这个问题困扰我有些日子了,大半年了,期间找了不少网络的帖子,都是复制粘贴类型的,不解决根本问题,就是在刚刚,在 bing 上按 错误提示搜索了一下,看到一位大神的解释,恍然大悟,对,MySQL 的启动过程 有了新的了解和认识,于是立刻做了个实验,很顺利直接就成功了,马上来和大家分享一下,希望能帮到大家,少走弯路,当初确实挺烦恼的,都要砸电脑了,谢谢网络上这些大神文章的指点,保护了我的办公终端。
把我看到那篇决定性的文章粘出来,与大家共飨,
January the 06th 2022 Wednesday