笔者有一段时间没有使用本机的mysql了,偶然今天因工作需要需要使用,使用root登录时,提示1045错误,root居然无法登录!在网上很多解决方法都是linux下的,如果你去找什么“/etc/mysql/debian.cnf“,会大失所望。
后来又搜索windows下的mysql 1045错误,找到了一个比较靠谱的。
原文网址是:http://www.th7.cn/db/mysql/201403/46981.shtml
不过也不是完全都能解决的。
具体解决步骤如下(亲测):
(1)停止mysql,在运行中搜 services.msc,(或者开始菜单->控制面板->管理工具->服务)打开服务管理,然后找到mysql服务,关闭他。
(2)打开命令行,转到mysql的bin目录下;如D:\Program Files\MySQL\MySQL Server 5.7\bin
输入:d: 回车
输入 cd D:\Program Files\MySQL\MySQL Server 5.7\bin 回车
C:\Windows\System32>d:
D:\>cd D:\Program Files\MySQL\MySQL Server 5.7\bin
D:\Program Files\MySQL\MySQL Server 5.7\bin>mysqld-nt --skip-grant-tables
'mysqld-nt' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
</span><span style="color:#ff0000;">注意 mysqld-nt 中间应该有个空格!网上都是拷贝的稀烂的。</span><span style="color:#010101;">
D:\Program Files\MySQL\MySQL Server 5.7\bin>mysqld -nt --skip -grant -tables
2016-06-02T02:30:06.135093Z 0 [Warning] option 'new': boolean value 't' wasn't r
ecognized. Set to OFF.
2016-06-02T02:30:06.136093Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is
deprecated. Please use --explicit_defaults_for_timestamp server option (see doc
umentation for more details).
2016-06-02T02:30:06.136093Z 0 [Note] mysqld (mysqld 5.7.3-m13) starting as proce
ss 4776 ..
注:skip-grant-tables参数用了之后,就可以跳过登录校验;
网上也有说可以修改my.ini中的设置的,不过我中感觉修改ini不太靠谱,万一不慎出现了1067就麻烦了。还是不用为好。
然后cmd就停在那里了,也不知道发生了什么。查看服务,发现mysql并没有启动。
(3)再打开一个命令行(因为刚才那个DOS窗口已经不能动了),同样转到mysql的bin目录下;
(4)按照网上所得直接运行mysql提示:
C:\Windows\System32>d:
D:\>cd D:\Program Files\MySQL\MySQL Server 5.7\bin
D:\Program Files\MySQL\MySQL Server 5.7\bin> mysql
ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)
然后就不知道怎么处理这个ODBC了。不过我想,居然已经使用了“跳过登陆校验”,是否可以直接登陆呢?
于是尝试输入:mysql -u -root -p 在提示Enter password的时候直接 回车,居然可以登陆了!然后发现mysql也居然神奇的启动了。(后来发现前一个控制台也反应过来了,也可能是之前的启动了?不过还不清楚,总之是可以跑了)
D:\Program Files\MySQL\MySQL Server 5.7\bin> mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.0.45-community-nt MySQL Community Edition (GPL)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
(5)剩下的就是使用sql语句来改变root的密码了:
mysql> use mysql
Database changed
mysql> UPDATE user SET password=PASSWORD("123456") WHERE user="root";
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> mysql>FLUSH PRIVILEGES;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'mysql
>FLUSH PRIVILEGES' at line 1
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
大功告成,使用管理工具sqlyog登陆,发现可以了。
然而并没有结束,登陆后发现我的表怎么都没有了?但是去我设定的data目录去看,表还是存在的,为什么呢?
难不成是因为设了个密码就不复存在了?重启后再尝试还是一样。
而后我发现是因为自己最近装了一个WAMP5,里面居然自带的有mysql服务,将之关闭之后,再次登录mysql,发现原来的表回来了。
于是出现登录问题的原因找到了,电脑上存在了两个mysql,后面的一个mysql并没有进行设定,但端口还是3306,所以root是登录不上去的,导致原来的mysql被屏蔽了。