无法在ubuntu 16

时间:2017-02-01 16:37:12

标签: mysql ubuntu ubuntu-16.04 root change-password

我正在尝试重置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.

4 个答案:

答案 0 :(得分:94)

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

启动服务器

$ sudo service mysql start

转到sock文件夹

$ 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');

答案 1 :(得分:5)

上面的

pedronalbert's回答对我有用,但最后一步现已弃用,并发出以下警告:

  

警告| 1287 | 'SET PASSWORD FOR = PASSWORD('')'已弃用,将在以后的版本中删除。请使用SET PASSWORD FOR =''而不是

请改用此命令:

SET PASSWORD FOR root = '<plaintext_password>';

答案 2 :(得分:3)

对于具有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';
  1. 停止MySQL并在配置文件中注释skip-grant-tables

  2. 再次启动MySQL,现在应该可以使用:mysql -u root -ppass123

答案 3 :(得分:1)

我尝试了许多方法,包括@pedronalbert&#39;但仍然没有工作。

我解决它的方法是添加&#34; skip-grant-tables &#34;在 /etc/my.cnf 然后启动mysql服务并将mysql与&#34; mysql -u root &#34;连接起来如 https://www.codero.com/knowledge-base/content/33/296/en/how-to-reset-your-root-mysql-password.html

它适用于我的VM CentOS 7。