mysql - 即使在linux终端中通过安全模式设置密码后也无法访问MySql root用户

标签 mysql linux

1) 服务停止

sudo /etc/init.d/mysqld stop

2) 以安全模式启动

sudo mysqld_safe --skip-grant-tables &

3) 用户已创建

mysql -u root

4)设置密码

UPDATE user SET Password=PASSWORD('my_password') where USER='root';

退出mysql控制台, 并重新启动服务并尝试访问 mysql 控制台

mysql -u root -p my_password     

[vikram@VoltyLinux ~]$ mysql -u root -p
Enter password: *******

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

最佳答案

按照步骤2的方法进入,即以安全模式重新启动mysql守护进程。

发出命令

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

将输出剪切并粘贴到文本编辑器中,以便在以下内容之前和之后进行比较(哈希密码列值)。

对于每一行,请注意host 列。在下面的示例中,我假设有两行。一行将 % 作为主机,下一行将 localhost

对于具有 host 变体的每一行,您将发出一个命令。因此,在上面的示例中,我总共会发出 2 个命令,例如:

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

运行

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

将其剪切并粘贴到文本编辑器中。请注意密码哈希值的更改。

从安全模式关闭守护进程,然后正常重新启动。

尝试使用 MyNewPassword 以 root 身份登录

这里有一些链接。 SET PASSWORD Syntax 的那个,通常下一步是 GRANT Syntax .

对于这个问题的狭窄范围,即登录,不需要授予。但是,如果没有对数据库进行适当的授权,人们就会被沙箱化,除了像 select now();

这样的简单命令之外,无法做太多事情。

我并不是建议您的 root 用户在更改密码后就没有权限。普通用户需要确认赠款。

关于mysql - 即使在linux终端中通过安全模式设置密码后也无法访问MySql root用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33478300/

相关文章:

mysql - 如何将 3 个表合并为一个表,这些表具有到第四个表的外键?

linux - 我应该使用 init 和 systemd 中的什么来为我的服务创建守护进程?

c - 终止具有临界区代码的 POSIX 多线程应用程序的最佳方法是什么?

c++ - 用 C++ 创建高性能网络服务器

python - 使用 python 获取 Shell 输出

php - 如果 A 中的列不重复,则将 tableA 复制到 tableB

php - mysql_real_escape_string() : Access denied in codeigniter

php - 错误 1148 MySQL 此 MySQL 版本不允许使用的命令

linux - 我的 busybox 不执行非小程序实用程序命令

MySQL如何通过外键id选择多行?