无法在ubuntu 16上使用--skip-grant-tables重置root密码

ped*_*ert 37 mysql ubuntu change-password root ubuntu-16.04

我试图在MysqlPasswordReset之后重置root密码但是当我尝试使用--skip-grant-tables启动服务器时服务器无法启动

  • Ubuntu 16.04.1 LTS(GNU/Linux 4.4.0-59-generic x86_64)
  • mysql Ver 14.14 Distrib 5.7.17,适用于Linux(x86_64)

服务器正在运行

$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
Run Code Online (Sandbox Code Playgroud)

停止服务器

$ sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.
Run Code Online (Sandbox Code Playgroud)

尝试从--skip-grant-tables开始

sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
[1] 9856
Run Code Online (Sandbox Code Playgroud)

没有密码连接

$ mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
[1]+  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
Run Code Online (Sandbox Code Playgroud)

我也尝试从mysql_safe开始(error.log为空)

sudo mysqld_safe --skip-grant-tables
2017-02-01T16:33:31.382105Z mysqld_safe Logging to syslog.
2017-02-01T16:33:31.383942Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-01T16:33:31.386058Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-01T16:33:31.388009Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
Run Code Online (Sandbox Code Playgroud)

ped*_*ert 118

我发现当mysql服务停止并且mysqld_safe无法创建它时,mysql.sock被删除(我找不到原因),所以我的解决方案是备份sock文件夹并在启动之前恢复mysqld_safe

启动服务器

$ sudo service mysql start
Run Code Online (Sandbox Code Playgroud)

去袜子文件夹

$ cd /var/run
Run Code Online (Sandbox Code Playgroud)

备份袜子

$ sudo cp -rp ./mysqld ./mysqld.bak
Run Code Online (Sandbox Code Playgroud)

停止服务器

$ sudo service mysql stop
Run Code Online (Sandbox Code Playgroud)

恢复袜子

$ sudo mv ./mysqld.bak ./mysqld
Run Code Online (Sandbox Code Playgroud)

启动mysqld_safe

$ sudo mysqld_safe --skip-grant-tables --skip-networking &
Run Code Online (Sandbox Code Playgroud)

初始化mysql shell

mysql -u root
Run Code Online (Sandbox Code Playgroud)

更改密码

FLUSH PRIVILEGES;

SET PASSWORD FOR root@'localhost' = PASSWORD('my_new_password');
Run Code Online (Sandbox Code Playgroud)

  • 在最后一个命令上出现错误1524(HY000):Kubuntu 18.04上的插件“ auth_socket”未加载 (8认同)
  • 我不得不以这种方式设置密码:http://stackoverflow.com/questions/37879448/mysql-fails-on-mysql-error-1524-hy000-plugin-auth-socket-is-not-loaded#answer-37879449 (2认同)
  • Mysql服务停止工作 (2认同)
  • 执行完此mysql服务器后无法启动 (2认同)

dvl*_*ube 40

对于带有 MySQL 8.0.17-0ubuntu2 的 Ubuntu 19,最终对我有用的是许多答案的组合:

  1. 在 MySQL 的配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf在我的机器上)的 下[mysqld],添加:

    skip-grant-tables = 1 plugin-load-add = auth_socket.so

  2. 重启MySQL服务;

  3. 连接到 MySQL: mysql -uroot;

  4. 跑:

UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass123';
Run Code Online (Sandbox Code Playgroud)
  1. 停止 MySQL 并skip-grant-tables在配置文件中注释;

  2. 启动MySQL再次,这应该现在的工作:mysql -u root -ppass123

  • @logicbloke简单地说:“skip-grant-tables”就足够了 (3认同)
  • 谢谢你,谢谢你,谢谢你!!今天这个答案救了我的命。 (3认同)
  • 我无法告诉你我花了多长时间才找到这个答案。谢谢。 (2认同)

小智 5

pedronalbert上面给出的答案对我有用,但最后一步现在已弃用并抛出以下警告:

警告| 1287 | 'SET PASSWORD FOR = PASSWORD('')'已弃用,将在以后的版本中删除.请改用SET PASSWORD FOR =''

请改用此命令:

SET PASSWORD FOR root = '<plaintext_password>';
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

43545 次

最近记录:

5 年,11 月 前