windows下mysql提示access denied for user ”@’localhost’ to database – wanghuahui的专栏 – 博客频道 – CSDN.NET

来源: windows下mysql提示access denied for user ”@’localhost’ to database – wanghuahui的专栏 – 博客频道 – CSDN.NET

最近在使用mySQL,版本为‘5.6.20’。

在官网http://dev.mysql.com/downloads/mysql/下载最新windows安装版本,之后安装。我选的是custom安装模式,设置安装路径后,一直next即可。

安装完成后,使用命令行cmd进入安装路径bin目录下,我的目录为“D:\Program Files\MySQL\MySQL Server 5.6\bin”。

用root帐号连上mysql,语句为“mysql -u root”即可,然后创建一个数据库,提示如下错误:

ERROR 1044 (42000): Access denied for user ”@’localhost’ to database ‘mydb’。

原因是因为mysql数据库的user表里,存在用户名为空的账户即匿名账户,导致登录的时候是虽然用的是root,但实际是匿名登录的,通过错误提示里的”@’localhost’可以看出来。

由于网上大多是linux下解决方案,但是在windows下输入命令却有不同,经过在网上查找试验,终于找到一个比较有效的方法,现整理如下:

1、cmd模式进入mysql的bin目录,输入D:\Program Files\MySQL\MySQL Server 5.6\bin>mysqld –defaults-file=”D:\Program Files\MySQL\MySQL Server 5.6\my-default.ini” –console –skip-grant-tables,回车

2014-08-29 10:40:48 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use
2014-08-29 10:40:48 8108 [Note] Plugin ‘FEDERATED’ is disabled.
2014-08-29 10:40:48 8108 [Note] InnoDB: Using atomics to ref count buffer pool pages
2014-08-29 10:40:48 8108 [Note] InnoDB: The InnoDB memory heap is disabled
2014-08-29 10:40:48 8108 [Note] InnoDB: Mutexes and rw_locks use Windows interlocked functions
2014-08-29 10:40:48 8108 [Note] InnoDB: Memory barrier is not used
2014-08-29 10:40:48 8108 [Note] InnoDB: Compressed tables use zlib 1.2.3
2014-08-29 10:40:48 8108 [Note] InnoDB: Not using CPU crc32 instructions
2014-08-29 10:40:48 8108 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2014-08-29 10:40:48 8108 [Note] InnoDB: Completed initialization of buffer pool
2014-08-29 10:40:48 8108 [Note] InnoDB: Highest supported file format is Barracuda.
2014-08-29 10:40:57 8108 [Note] InnoDB: 128 rollback segment(s) are active.
2014-08-29 10:40:57 8108 [Note] InnoDB: Waiting for purge to start
2014-08-29 10:40:57 8108 [Note] InnoDB: 5.6.20 started; log sequence number 1625997
2014-08-29 10:40:57 8108 [Note] Server hostname (bind-address): ‘*’; port: 3306
2014-08-29 10:40:57 8108 [Note] IPv6 is available.
2014-08-29 10:40:57 8108 [Note]   – ‘::’ resolves to ‘::’;
2014-08-29 10:40:57 8108 [Note] Server socket created on IP: ‘::’.
2014-08-29 10:40:58 8108 [Note] mysqld: ready for connections.
Version: ‘5.6.20’  socket: ”  port: 3306  MySQL Community Server (GPL)

看到这个结果就说明MySQL已经起来了。
2、再开一个dos窗口,同样切到mysql bin目录下,D:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -u root mysql,回车

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.20 MySQL Community Server (GPL)

mysql>

已连接上mysql数据库,可以输入mysql命令了。

3、设置密码

mysql> update user set password=PASSWORD(‘password’) where user=’root’;
Query OK, 2 rows affected (0.02 sec)
Rows matched: 3  Changed: 2  Warnings: 0

mysql> FLUSH PRIVILEGES;
mysql> quit

之后按正常方法连接mysql就可以了。如果不能连接,查看下mysql服务是否启动。

 

解决方案2:
1、打开MySQL目录下的my.ini文件,在文件的最后添加一行“skip-grant-tables”,保存并关闭文件。
2、重启MySQL服务。
3、在命令行中输入“mysql -uroot -p”(不输入密码),回车即可进入数据库。
4、执行,“use mysql;”使用mysql数据库。
5、执行,“update user set password=PASSWORD(“rootadmin”) where user=’root’;”(修改root的密码)
(期间我还select下user表中的记录,查询全部的时候显示了一些乱码,然后我只查询了user表中的Host、User、Password字段,貌似当时显示了3条记录,有1个没有名称。当然,为了解决问题,这些我也管不了了。)
6、打开MySQL目录下的my.ini文件,删除最后一行的“skip-grant-tables”,保存并关闭文件。
7、重启MySQL服务。
8、在命令行中输入“mysql -uroot -prootadmin”,问题搞定!
分享到: 更多 (0)