MySQL:无法访问root帐户

时间:2009-03-13 09:47:02

标签: mysql mysql-error-1045

我在我的本地Windows机器上运行MySQL 5.x,并且使用MySQL管理员,我无法连接到我使用root帐户创建的数据库。我得到的错误是:

  

MySQL错误号1045访问被拒绝   对于用户'root'@'localhost'(使用   密码:是)

我不记得更改root帐户凭据,但我知道我试图通过添加IP来让LAN上的其他计算机访问数据库。我为其中一个IP做的一件事是指定帐户'root'而不是root的访问权限,即我用单引号字符包围root。全部使用MySQL管理员。这可能是我无法使用root登录的原因吗?

此外,有没有办法创建新帐户或重置root帐户?如前所述,我可以完全访问我的盒子。

查看以下问题

4 个答案:

答案 0 :(得分:18)

您可以使用init文件。查看How to Reset the Root Password上的MySQL官方文档(包括替代解决方案的评论)。

所以基本上使用init文件,您可以将修复访问所需的任何SQL查询(例如GRANDCREATEFLUSH PRIVILEGES等)添加到init文件中(任何文件)。

以下是恢复root帐户的示例:

echo "CREATE USER 'root'@'localhost' IDENTIFIED BY 'root';" > your_init_file.sql
echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" >> your_init_file.sql 
echo "FLUSH PRIVILEGES;" >> your_init_file.sql

在您创建文件后,您可以运行:

killall mysqld
mysqld_safe --init-file=$PWD/your_init_file.sql

然后检查这是否有效,按 Ctrl + Z 并键入:bg以从前台运行进程到后台,然后通过以下方式验证您的访问权限:

mysql -u root -proot
mysql> show grants;
+-------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                                   |
+-------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B' |

另见:

答案 1 :(得分:4)

这对我有用:

https://blog.dotkam.com/2007/04/10/mysql-reset-lost-root-password/

步骤1:如果当前正在运行

,则停止MySQL守护程序
  ps -ef | grep mysql      - checks if mysql/mysqld is one of the running processes.

  pkill mysqld             - kills the daemon, if it is running.

步骤2:使用跳过授权表运行MySQL安全守护程序

  mysqld_safe --skip-grant-tables &

  mysql -u root mysql

步骤3:以root身份登录MySQL,无需密码

  mysql -u root mysql

步骤4:运行UPDATE查询以重置root密码

  UPDATE user SET password=PASSWORD("value=42") WHERE user="root";
  FLUSH PRIVILEGES;

在MySQL 5.7中,删除了'password'字段,现在字段名称为'authentication_string':

  UPDATE user SET authentication_string=PASSWORD("42") WHERE 
  user="root";
  FLUSH PRIVILEGES;

步骤5:停止MySQL安全守护程序

步骤6:启动MySQL守护程序

答案 2 :(得分:1)

how to reset the root password上的MySQL手册中有一节可以解决您的问题。

答案 3 :(得分:1)

使用root访问mysql时遇到了同样的问题。我发现的问题是某些数据库文件没有mysql用户的权限,mysql用户是启动mysql服务器守护进程的用户。

如果mysql用户没有读取或写入某些可能导致问题的文件或目录的权限,我们可以使用ls -l /var/lib/mysql命令进行检查。我们可以使用chown/chmod命令更改这些文件或目录的所有者或模式。

完成这些更改后,重新启动mysqld守护程序并使用root命令登录:

mysql -u root

然后更改密码或创建其他用户以登录mysql。

HTH