Can't reset root password with --skip-grant-tables on ubuntu 16

后端 未结 4 1736
臣服心动
臣服心动 2020-12-12 12:42

I am trying to reset the root password following MysqlPasswordReset but when I try to start the server with --skip-grant-tables the server doesn\'t start

  • Ubunt
相关标签:
4条回答
  • 2020-12-12 13:16

    For Ubuntu 19 with MySQL 8.0.17-0ubuntu2, what ended up working for me was a combination of many answers:

    1. In the MySQL's configuration file (/etc/mysql/mysql.conf.d/mysqld.cnf on my machine), under [mysqld], add:

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

    2. Restart the MySQL Service;

    3. Connect to MySQL: mysql -uroot;

    4. Run:

    UPDATE mysql.user SET authentication_string=null WHERE User='root';
    FLUSH PRIVILEGES;
    
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass123';
    
    1. Stop MySQL and comment skip-grant-tables in the configuration file;

    2. Start MySQL again and this should now work: mysql -u root -ppass123.

    0 讨论(0)
  • 2020-12-12 13:17

    I found that the mysql.sock is deleted when the mysql service is stoped and mysqld_safe can't create it (I couldn't find the reason), so my solution was back up the sock folder and restore before start mysqld_safe

    Start server

    $ sudo service mysql start
    

    Go to sock folder

    $ cd /var/run
    

    Back up the sock

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

    Stop server

    $ sudo service mysql stop
    

    Restore the sock

    $ sudo mv ./mysqld.bak ./mysqld
    

    Start mysqld_safe

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

    Init mysql shell

    mysql -u root
    

    Change password

    FLUSH PRIVILEGES;
    
    SET PASSWORD FOR root@'localhost' = PASSWORD('my_new_password');
    
    0 讨论(0)
  • 2020-12-12 13:19

    pedronalbert's answer above worked for me but the last step is now deprecated and throws the following warning:

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

    Use this command instead:

    SET PASSWORD FOR root = '<plaintext_password>';
    
    0 讨论(0)
  • 2020-12-12 13:28

    I tried many ways including @pedronalbert 's but still not working.

    The way I solved it is adding "skip-grant-tables" in /etc/my.cnf then start mysql service and connecting mysql with "mysql -u root" as https://www.codero.com/knowledge-base/content/33/296/en/how-to-reset-your-root-mysql-password.html

    It works in my VM CentOS 7.

    0 讨论(0)
提交回复
热议问题