您的当前位置:首页正文

ERROR1044(42000):Accessdeniedforuser@localhost_MySQL

2023-11-20 来源:要发发知识网

bitsCN.comERROR 1044 (42000):Access denied for user ''@'localhost' to database 'mysql'的解决方法 提示:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'。前两天也出现过这个问题,网上找了一个比较流行的方法(见方法一),搞定了。今天又用这个试了试,却搞不定,在网上找了半天,终于发现是因为mysql数据库的user表里,存在用户名为空的账户即匿名账户,导致登录的时候是虽然用的是root,但实际是匿名登录的,通过错误提示里的''@'localhost'可以看出来,于是解决办法见方法二。 方法一:1.关闭mysql # service mysqld stop2.屏蔽权限 # mysqld_safe --skip-grant-table 屏幕出现: Starting demo from ..... 3.新开起一个终端输入 # mysql -u root mysql mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root'; mysql> FLUSH PRIVILEGES;//记得要这句话,否则如果关闭先前的终端,又会出现原来的错误 mysql> /q 方法二:1.关闭mysql # service mysqld stop2.屏蔽权限 # mysqld_safe --skip-grant-table 屏幕出现: Starting demo from ..... 3.新开起一个终端输入 # mysql -u root mysql mysql> delete from user where USER=''; mysql> FLUSH PRIVILEGES;//记得要这句话,否则如果关闭先前的终端,又会出现原来的错误 mysql> /q bitsCN.com

小编还为您整理了以下内容,可能对您也有帮助:

Windows系统下mysql新建数据库时出现error 1044(42000) Access d

解决办法是重新设置root用户密码,在Windows平台下操作步骤如下:

1、以系统管理员身份登录到系统;

2、如果MySQL服务器正在运行,停止它。

如果是作为Windows服务运行的服务器,进入服务管理器:开始菜单->控制面板->管理工具->服务

如果服务器不是作为服务而运行的,可能需要使用任务管理器来强制停止它。

3、创建1个文本文件,并将下述命令置于单一行中:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPassword');

用任意名称保存该文件。在本例中,该文件为C:mysql-init.txt。

4、进入DOS命令提示:开始菜单->运行-> cmd

假定你已将MySQL安装到C:mysql。如果你将MySQL安装到了另一位置,请对下述命令进行相应的调整。

在DOS命令提示符下,执行命令:

C:> C:mysqlbinmysqld-nt --init-file=C:mysql-init.txt

在服务器启动时,执行由“--init-file”选项(作用:在启动时从指定的文件中读取SQL命令)命名的文件的内容,更改根用户密码。当服务器成功启动后,应删除C:mysql-init.txt。

5、停止MySQL服务器,然后在正常模式下重启它。如果以服务方式运行服务器,应从Windows服务窗口启动它。如果以手动方式启动了服务器,能够像正常情形下一样使用命令。

应能使用新密码进行连接。

Navicat for MySQL 新建数据库出现了这个问题,求大神解决问题,详细点,最好有图片。

转:

提示:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'。前两天也出现过这个问题,网上找了一个比较流行的方法(见方法一),搞定了。今天又用这个试了试,却搞不定,在网上找了半天,终于发现是因为mysql数据库的user表里,存在用户名为空的账户即匿名账户,导致登录的时候是虽然用的是root,但实际是匿名登录的,通过错误提示里的''@'localhost'可以看出来,于是解决办法见方法二。

方法一:

1.关闭mysql

# service mysqld stop

2.屏蔽权限

# mysqld_safe --skip-grant-table

屏幕出现: Starting demo from .....

3.新开起一个终端输入

# mysql -u root mysql

mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';

mysql> FLUSH PRIVILEGES;//记得要这句话,否则如果关闭先前的终端,又会出现原来的错误

mysql> \q

方法二:

1.关闭mysql

# service mysqld stop

2.屏蔽权限

# mysqld_safe --skip-grant-table

屏幕出现: Starting demo from .....

3.新开起一个终端输入

# mysql -u root mysql

mysql> delete from user where USER='';

mysql> FLUSH PRIVILEGES;//记得要这句话,否则如果关闭先前的终端,又会出现原来的错误

mysql> \q

MySQL密码正确却无法本地登录怎么办

MySQL root密码正确,却怎么也无法从本地登录MySQL,提示 1 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 这里后来经高人指点才发现mysql库中的user表缺少一个root指向host:localhost的数据项,只有一个root指向h

MySQL root密码正确,却怎么也无法从本地登录MySQL,提示

1 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

这里后来经高人指点才发现mysql库中的user表缺少一个root指向host:localhost的数据项,只有一个root指向host:主机名的数据项,,故怎么也无法利用root账户登录MySQL。

总结一点就是root账户缺失了访问localhost主机的账户信息,导致无法本地登录。

那有什么办法恢复root登录呢?

这里记录一下今天遇到的纠结事情:

首先kill掉MySQL进程然后在启动mysql的参数中加入

--skip-grant-tables

会发现这时无密码就可以登录mysql了。

当然我们还必须修复root账户丢失的数据项。

这里有两种解决方案:

第一种是因为root账户初始的时候有3条记录,包含root对应localhost,hostname,127.0.0.1三条账户数据,我们可以update host为其他两项中一项为localhost即可。

第二种是直接insert一条记录,host为localhost即可

总结一下:即使root的host包含了主机名,127.0.0.1那么依然是无法正常登录的,这里必须要有localhost的host才行。

如果上面办法还是无法正常登录我们可尝试另一种办法

在本地用mysql命令直接回车可以进入mysql,但是里面只有test和information_schema数据库,没有mysql等数据库,使用use mysql报如下错:

mysql> use mysql

ERROR 1044 (42000): Access denied for user "@'localhost' to database 'mysql'

意思是说没有指定user,没有权限访问数据库mysql。

那么用root登录呢,输入正确的密码报如下错:

[root@228827 ~]# mysql -uroot -p123456

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

密码正确的情况下,mysql数据库已经禁止了root用户在本地的登录权限了。

使用root用户通过主机127.0.0.1登录就可以正常进入mysql,127.0.0.1和localhost对mysql数据库来讲是不同的主机,

[root@228827 ~]# mysql -uroot -p123456 -h 127.0.0.1

这让我想起了mysql下的user表。

我们要进mysql看user表,一种方法可以通过上面的命令,如果不行,可以用下面的命令启动数据库,缺省密码进入

代码如下

[root@228827 ~]# /etc/init.d/mysql stop

[root@228827 ~]# /usr/local/mysql/bin/mysqld_safe –skip-grant-tables &

[root@228827 ~]# mysql

Welcome to the MySQL monitor. Commands end with ; or g.

Your MySQL connection id is 1

Server version: 5.1.57 Source distribution

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> use mysql

Database changed

mysql> select user,host,password from user where user='root';

+——+——————-+——————————————-+

| user | host | password |

+——+——————-+——————————————-+

| root | % | *A50E066E106320CF4142 |

| root | centos | *A50E066E106320CF4142 |

| root | 127.0.0.1 | *A50E066E1063608320CF4142 |

+——+——————-+——————————————-+

3 rows in set (0.12 sec)

发现user表host字段中没有localhost,但是我的理解是%代表所有的主机都能登录的,为什么localhost不能呢,同样的情况我在5.0.45版的mysql上面做实验就不会发生localhost无法登录,我当前用的是5.1.57版的,难道是版本的问题?

接下来的修改很明显了:

代码如下

mysql> update user set host='localhost' where user='root' and host='%';

mysql> flush privileges;

OK,退出mysql,重启mysql就解决问题了