當前位置: 首頁>>技術問答>>正文


無法在ubuntu 16上使用–skip-grant-tables重置root密碼

, , , ,

問題描述

我正在嘗試重置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)

停止服務器

$ sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.

試著從–skip-grant-tables開始

sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
[1] 9856

沒有密碼連接

$ 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

我也嘗試從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.

最佳解決思路

我發現當mysql服務停止並且mysqld_safe無法創建它時我刪除了mysql.sock(我找不到原因),所以我的解決方案是備份sock文件夾並在啟動之前恢複mysqld_safe

啟動服務器

$ sudo service mysql start

去襪子文件夾

$ cd /var/run

備份襪子

$ sudo cp -rp ./mysqld ./mysqld.bak

停止服務器

$ sudo service mysql stop

恢複襪子

$ sudo mv ./mysqld.bak ./mysqld

啟動mysqld_safe

$ sudo mysqld_safe --skip-grant-tables --skip-networking &

初始化mysql shell

mysql -u root

更改密碼

FLUSH PRIVILEGES;

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

次佳解決思路

上麵的pedronalbert’s答案對我有用,但最後一步現在已棄用並拋出以下警告:

Warning | 1287 | ‘SET PASSWORD FOR = PASSWORD(”)’ is deprecated and will be removed in a future release. Please use SET PASSWORD FOR = ” instead

請改用此命令:

SET PASSWORD FOR root = '<plaintext_password>';

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/6875.html,未經允許,請勿轉載。