Windows下MySql错误代码1045的解决方法

来源:互联网 发布:零基础学算法第一章 编辑:程序博客网 时间:2024/05/17 02:35

笔者有一段时间没有使用本机的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 回车

[cpp] view plain copy
  1. C:\Windows\System32>d:  
  2. D:\>cd D:\Program Files\MySQL\MySQL Server 5.7\bin  
  3. D:\Program Files\MySQL\MySQL Server 5.7\bin>mysqld-nt --skip-grant-tables  
  4. 'mysqld-nt' 不是内部或外部命令,也不是可运行的程序  
  5. 或批处理文件。  
  6. </span><span style="color:#ff0000;">注意 mysqld-nt 中间应该有个空格!网上都是拷贝的稀烂的。</span><span style="color:#010101;">  
  7. D:\Program Files\MySQL\MySQL Server 5.7\bin>mysqld -nt --skip -grant -tables  
  8. 2016-06-02T02:30:06.135093Z 0 [Warning] option 'new': boolean value 't' wasn't r  
  9. ecognized. Set to OFF.  
  10. 2016-06-02T02:30:06.136093Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is  
  11.  deprecated. Please use --explicit_defaults_for_timestamp server option (see doc  
  12. umentation for more details).  
  13. 2016-06-02T02:30:06.136093Z 0 [Note] mysqld (mysqld 5.7.3-m13) starting as proce  
  14. ss 4776 ..  


 



注:skip-grant-tables参数用了之后,就可以跳过登录校验;

网上也有说可以修改my.ini中的设置的,不过我中感觉修改ini不太靠谱,万一不慎出现了1067就麻烦了。还是不用为好。

然后cmd就停在那里了,也不知道发生了什么。查看服务,发现mysql并没有启动。

(3)再打开一个命令行(因为刚才那个DOS窗口已经不能动了),同样转到mysql的bin目录下;

(4)按照网上所得直接运行mysql提示:

[cpp] view plain copy
  1. C:\Windows\System32>d:  
  2. D:\>cd D:\Program Files\MySQL\MySQL Server 5.7\bin  
  3. D:\Program Files\MySQL\MySQL Server 5.7\bin> mysql  
  4. ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)  


然后就不知道怎么处理这个ODBC了。不过我想,居然已经使用了“跳过登陆校验”,是否可以直接登陆呢?

于是尝试输入:mysql -u -root -p 在提示Enter password的时候直接 回车,居然可以登陆了!然后发现mysql也居然神奇的启动了。(后来发现前一个控制台也反应过来了,也可能是之前的启动了?不过还不清楚,总之是可以跑了)

[cpp] view plain copy
  1. D:\Program Files\MySQL\MySQL Server 5.7\bin> mysql -u root -p  
  2. Enter password:  
  3. Welcome to the MySQL monitor.  Commands end with ; or \g.  
  4. Your MySQL connection id is 3  
  5. Server version: 5.0.45-community-nt MySQL Community Edition (GPL)  
  6.   
  7. Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.  
  8.   
  9. Oracle is a registered trademark of Oracle Corporation and/or its  
  10. affiliates. Other names may be trademarks of their respective  
  11. owners.  
  12.   
  13. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.  


(5)剩下的就是使用sql语句来改变root的密码了:

[cpp] view plain copy
  1. mysql> use mysql  
  2. Database changed  
  3. mysql> UPDATE user SET password=PASSWORD("123456") WHERE user="root";  
  4. Query OK, 1 row affected (0.03 sec)  
  5. Rows matched: 1  Changed: 1  Warnings: 0  
  6.   
  7. mysql> mysql>FLUSH PRIVILEGES;  
  8. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that  
  9. corresponds to your MySQL server version for the right syntax to use near 'mysql  
  10. >FLUSH PRIVILEGES' at line 1  
  11. mysql> FLUSH PRIVILEGES;  
  12. Query OK, 0 rows affected (0.00 sec)  

 

大功告成,使用管理工具sqlyog登陆,发现可以了。

 

然而并没有结束,登陆后发现我的表怎么都没有了?但是去我设定的data目录去看,表还是存在的,为什么呢?

难不成是因为设了个密码就不复存在了?重启后再尝试还是一样。

 

而后我发现是因为自己最近装了一个WAMP5,里面居然自带的有mysql服务,将之关闭之后,再次登录mysql,发现原来的表回来了。

于是出现登录问题的原因找到了,电脑上存在了两个mysql,后面的一个mysql并没有进行设定,但端口还是3306,所以root是登录不上去的,导致原来的mysql被屏蔽了。

转自:http://blog.csdn.net/u200814342a/article/details/51564531