web-dev-qa-db-ja.com

Ubuntu 16で--skip-grant-tablesを使用してrootパスワードをリセットできない

MysqlPasswordReset に続いてルートパスワードをリセットしようとしていますが、-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.
36
pedronalbert

Mysqlサービスが停止するとmysql.sockが削除され、mysqld_safeが作成できない(理由が見つからない)ため、私のソリューションは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 &

Init mysqlシェル

mysql -u root

パスワードを変更する

FLUSH PRIVILEGES;

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

pedronalbert's 上記の答えは私にとってはうまくいきましたが、最後のステップは非推奨になり、次の警告がスローされます:

警告| 1287 | 「SET PASSWORD FOR = PASSWORD( '')」は非推奨であり、将来のリリースで削除されます。代わりにSET PASSWORD FOR = ''を使用してください

代わりに次のコマンドを使用してください。

SET PASSWORD FOR root = '<plaintext_password>';
5
auhsor

@pedronalbertを含む多くの方法を試しましたが、まだ動作しません。

私が解決した方法は、「skip-grant-tables」を/ etc/my.cnf次にmysqlサービスを開始し、mysqlを "mysql -u root"で https:// www。 codero.com/knowledge-base/content/33/296/en/how-to-reset-your-root-mysql-password.html

私のVM CentOS 7で動作します。

2
gevge