mysqld_safe --skip-grant-tables
,更新了root密码,并检查了用户表以确保密码已更改。在重新启动MySQL守护进程后,我尝试使用刚设置的新root密码登录,但仍然收到用户'root'的访问被拒绝错误。我还尝试完全删除并重新安装MySQL(包括删除
my.cnf
文件),但仍然没有成功。接下来我该怎么办?mysqld_safe --skip-grant-tables
,更新了root密码,并检查了用户表以确保密码已更改。my.cnf
文件),但仍然没有成功。接下来我该怎么办?SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypass');
FLUSH PRIVILEGES;
UPDATE mysql.user SET authentication_string=PASSWORD('MyNewPass') WHERE user='root'; FLUSH PRIVILEGES;- Robert Anthony S. Tribiana
FLUSH PRIVILEGES
来使更改生效,无需重新启动数据库服务器。 - NetViciousALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
你可以在MySQL文档中找到 重置Root密码。
mysqld --initialize --console
即可正常工作。 - Ahmed HENTETIUPDATE mysql.user SET authentication_string=PASSWORD('mypass') WHERE User='root';
和SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypass');
在8.0.33-0ubuntu0.22.04.2上返回"ERROR 1064 (42000): You have an error in your SQL syntax;"。 - philburns请查阅MySQL参考手册中的以下内容:
首先登录MySQL:
mysql -u root -p
然后在mysql提示符下运行:
UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
然后
FLUSH PRIVILEGES;
点击此页面查看更多信息:重置Root密码:Unix系统
更新:
对于某些版本的mysql,密码列不再可用,您将收到以下错误消息:
ERROR 1054 (42S22):'field list'中不存在'Password'列
在这种情况下,请使用ALTER USER
,示例如下答案。
sudo service mysql stop
sudo mysqld_safe --skip-grant-tables
sudo service mysql start
sudo mysql -u root
use mysql;
show tables;
describe user;
update user set authentication_string=password('1111') where user='root';
FLUSH PRIVILEGES;
使用密码 "1111" 登录。
flush privileges
是最后一步非常重要的操作。 - Khom Nazidsudo mysqld_safe --skip-grant-tables --skip-networking &
。重要的是要以 &
结尾来使命令在后台运行。传递 --skip-networking
选项以跳过网络连接,这可以防止其他客户端连接到MySQL服务器。来源 - MaxiGui这是针对WAMP v3.0.6及以上版本的更新答案。
在MySQL命令行客户端、phpMyAdmin或任何MySQL图形用户界面中:
UPDATE mysql.user
SET authentication_string=PASSWORD('MyNewPass')
WHERE user='root';
FLUSH PRIVILEGES;
在MySQL 5.7.x版本中,MySQL表中不再有密码字段。它已被替换为authentication_string。(这是针对终端/CLI的。)
在MySQL命令行客户端、phpMyAdmin或任何MySQL GUI中:
UPDATE mysql.user SET authentication_string=PASSWORD('MyNewPass') WHERE user='root';
FLUSH PRIVILEGES;
mysql.user
数据表。请注意,如果您正在使用其他数据库(通过 use
命令设置),您将收到一个错误提示说数据表 user
不存在。谢谢您,先生! - Aleksandarmysql.user
表。其他答案已经过时。 - SiweiCONCAT('*', UPPER(SHA1(UNHEX(SHA1('mypass')))))
替代PASSWORD('mypass')
,这个新函数的作用与旧的PASSWORD函数相同。 - FlameStorm我也进行了搜索,可能有些答案适用于某些情况,
我的情况是在Ubuntu 18.04.2 LTS系统上使用Mysql 5.7:
(获取root权限)
$ sudo bash
(为根数据库用户设置密码 + 分步实施安全措施)
# mysql_secure_installation
通过密码而不是套接字为root用户提供访问权限
(+编辑:显然你需要再次设置密码?)
(不要将其设置为'mySecretPassword'!!!)
# mysql -u root
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> set password for 'root'@'localhost' = PASSWORD('mySecretPassword');
mysql> FLUSH PRIVILEGES;
mysql> exit;
# service mysql restart
感谢zetacu(和erich)在搜寻几个小时之后提供这个精彩的回答。
祝使用愉快 :-D
S.
编辑(2020):
这种方法不再有效,请参考此问题以供参考...
mysql_secure_installation
对我很有效。 - Troy我找到问题所在了!当我更改密码时,我忘记了对其进行哈希处理。我使用以下查询语句解决了这个问题:
update user set password=PASSWORD('新密码') where user='root';
我忘记了PASSWORD('新密码')
并只是将新密码以明文形式放入其中。
--init-file=
来执行此操作。 - sabgenton在MySQL 8中,您需要指定密码哈希方法:
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new-password';
FLUSH PRIVILEGES
命令。这个命令适用于MySQL使用新的密码哈希算法(我记得这是在MySQL 8.0中引入的,安装时不是强制要求的,只是建议执行)。 - Yvan在MySQL 8.0.4+版本中:
要更新当前的根用户:
select current_user();
set password = 'new_password';
更新另一个用户:
set password for 'otherUser'@'localhost' = 'new_password';
在更新密码之前设置密码策略:
set global validate_password.policy = 0;
set password = 'new_password';
set password for 'otherUser'@'localhost' = 'new_password';
更新 root 密码的另一种 / 更好的方法:
mysql_secure_installation
你想继续使用5.x身份验证,以便仍然可以使用旧应用程序吗?
在my.cnf
文件中。
default_authentication_plugin = mysql_native_password
更新root:
set global validate_password.policy = 0;
alter user 'root'@'localhost' identified with mysql_native_password by 'new_password';
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somepassword');
是最安全的方法。 - sabgenton