mysqlのrootパスワードをリセットできません


28

ローカルmysqlインストールのルートパスワードをリセットする必要がありますが、それはできません。私はこれを試しました:

$ sudo /etc/init.d/mysql stop
 * Stopping MySQL database server mysqld                                                                                                              [ OK ] 
[1]-  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
[2]+  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
reg@regDesktopHome:~$ sudo mysqld --skip-grant-tables &
[1] 13651
reg@regDesktopHome:~$ 140627 19:02:02 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.

reg@regDesktopHome:~$ mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
reg@regDesktopHome:~$ sudo mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[1]+  Exit 1                  sudo mysqld --skip-grant-tables

パスワードをリセットするにはどうすればよいですか? 編集1 私はこれを得ました:

$ ps ax| grep mysql
16515 ?        Ssl    0:00 /usr/sbin/mysqld
16551 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ sudo kill -9 16515
reg@regDesktopHome:~/semios/v3upgrade$ ps ax| grep mysql
16678 ?        Ssl    0:00 /usr/sbin/mysqld
16715 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

私がそれを殺すとすぐにプロセスが自動的にmysqlを再起動しているように見えます...

回答:


43

最初に使用してみてください

mysql -u root -p

sql-rootユーザーとしてログインするためのプロンプトで(覚えている場合)パスワードを入力します(スイッチ-pはパスワード用です)。

mysqlのrootパスワードを本当にリセットする必要がある場合、簡単な方法があります-でパッケージを再設定しますdpkg-reconfigure

mySQLルートパスワードをリセットする簡単な手順:

  1. のバージョンを確認してくださいmysql-server

    apt-cache policy mysql-server
    

    その他の情報の中でインストールされているバージョンを示す行を参照してください。たとえば、私のインストールの場合:

    Installed: 5.5.37-0ubuntu0.12.04.1
    

    (これmysql-server-5.5により、システムにインストールしたことがわかります。)

  2. 次を使用して再構成を開始します。

    sudo dpkg-reconfigure mysql-server-*.*
    

    どこにmysql-server-*.*あるバージョンで置き換える必要があります。(私にとってはそうなるでしょうmysql-server-5.5)。これにより、データベースデーモンが停止します。新しいパスワードを入力し、再構成を確認する必要がある場所にプロンプ​​トが表示されます。

    snap1

    デーモンは、再構成が完了すると自動的に開始されます。

  3. その後、次を使用してログインできます。

    mysql -u root -p
    

    データベース管理タスクを開始します。

参照:

  1. https://help.ubuntu.com/community/MysqlPasswordReset [ページに示されているように、すぐにクリーンアップされます。]

  2. 特定のバージョンに関連するUbuntuサーバーガイド


2
dpkg-reconfigure mariadb-server-10.1他のすべてのソリューションが機能しなかったときに、MariaDB で機能したことを確認できます。これありがとう。
liviucmg 14年

19
dpkg-reconfigureパスワードの入力を求められませんでした。それを強制する方法はありますか?
Unirgy

15
うまくいかなかった。上記のコマンドを使用して、「アップデートが必要かどうかを確認します。MySQLのこのインストールはすでに5.7.13にアップグレードされています。mysql_upgradeを実行する必要がある場合は--forceを使用してください」。--forceを使用しても同じ応答が得られました。
アンソニースカイフェ

5
どうやらこれはもう機能しません。
dpiの

1
@Paulo Henriqueいいえ。状況を考えると、時間を最大限に活用するために、サーバーを完全に再インストールすることにしました。
アンソニースカイフェ

21

このブログからの参照:

ステップ1:MySQLサービスを停止します。

sudo service mysql stop

ステップ2:実行中のすべてのmysqldを強制終了します。

sudo killall -9 mysqld

手順3:mysqldをセーフモードで起動します。

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

ステップ4:mysqlクライアントを起動する

mysql -u root

ステップ5:ログインに成功したら、このコマンドを実行してパスワードを変更してください。

FLUSH PRIVILEGES;

ステップ6:mysql root passwordを更新できます。

UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';

mysql> 5.7の場合、上記の代わりにこれを使用します。

UPDATE mysql.user SET authentication_string=PASSWORD('newpwd') WHERE User='root';

ステップ7:このコマンドを実行してください。

FLUSH PRIVILEGES;

ステップ8:mysqlコンソールを終了する

exit

ステップ9:mysqld_safeを強制終了してmysqlを開始する

sudo killall mysqld_safe && sudo service mysql start

1
あるべきでsudo service mysql stopはないsudo stop mysql
-knocte

1
また、最後に手順が欠落しているためsudo killall mysqld_safe && sudo service mysql start、再度ログインしようとしています
-knocte

3
MYSQL 5.7の場合、パスワードの変更構文は次のように変更されましたALTER USER root IDENTIFIED BY 'NEW_PASSWORD_HERE'
Tarek Fadel

7
!MySQL 5.7にはauth_socketと呼ばれる新しい獣があります。rootパスワードなしでmysqlをインストールすると、獣があなたを攻撃し、50ヒットポイントを失います。上記の手順6で、する必要がありALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASS';ます。あなたはここでそれについて読むことができます。理論的には(試しませんでした)、「sudo su-」を使用してrootになると、パスワードなしでmysqlにログインできるはずです。
-olafure

3
ALTER USER ...うまくいかない場合は、次を使用してくださいUPDATE mysql.user SET authentication_string = PASSWORD('NEWPASS'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
olafure

9

Ubuntu 16.04およびmysql-server-5.7で、正しい答えはolafureの最後のコメントであり、機能しdpkg-reconfigure mysql-server-5.7なくなりました。

sudo service mysql stop
sudo killall mysqld
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

これでmysqlコンソールに >mysql

USE mysql;
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE user='root';
FLUSH PRIVILEGES;
\q

正常 mysqlプロセスを再起動します

sudo killall mysqld
sudo service mysql start

新しいパスワードを確認してください

mysql -u root -p
Enter password: newpass
mysql>

5
mysqld_safe、実行、私はエラーを取得します:Directory '/var/run/mysqld' for UNIX socket file don't exists.。だから私は走りsudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqld、上記の答えの残りの部分は動作します。これはUbuntu 16のバグですか?パスワードを更新する際にこれらの問題をすべて経験したことはありません。
チェスター

@チェスターありがとうございます!! これは、他のすべてのソリューションがエラーをスローするようになったため、最終的に機能する唯一の方法でした。(Ubuntu-Server 16.04はこちら)これは答えに追加する必要があります
derHugo

3

以降でのMySQL 5.7あなたは、そのユーザーのために、空のパスワードを残す場合は、初期インストール時に、認証はに基づいていますauth_socketプラグイン。

パスワードを変更する正しい方法は次のとおりです。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/


これは私の正確なケース(mysql 5.7でのインストール中の空のパスワード)であり、これが私のケースの唯一のソリューションでした。
-cherouvim

メッセージが表示されますERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
。– user2513149

@ user2513149 --skip-grant-tablesオプションなしでMySQLサーバーを再起動し、このソリューションが機能することを確認してください。
バルン

@Barun、いいえ、--skip-grant-tablesオプションなしでは、rootとしてMySQLにログインすることさえできません。言うERROR 1698 (28000): Access denied for user 'root'@'localhost'
-user2513149

解決しました!mysqld_safeパスワードなしでrootとして(ではなく)通常のMySQLコンソールにログインする必要がありました。Ubuntu 18.04とmysql-server-5.7があります。この回答は私を助けてくれましたaskubuntu.com/a/767252/585252(下の部分を参照)
-user2513149

1

残りの回答からは何もうまくいかないようでした。これは私の解決策です:

sudo service mysql stop
sudo mysqld_safe &
sudo mysql -u root

そこで:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
FLUSH PRIVILEGES;
QUIT;

次に:

sudo killall mysqld
sudo service mysql start
sudo mysql -u root -p

1
残りは私にとっても2017-05-30T06:33:22.291126Z mysqld_safe Logging to syslog. 2017-05-30T06:33:22.294375Z mysqld_safe Logging to '/var/log/mysql/error.log'. 2017-05-30T06:33:22.296874Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
うまくいき

1
これは私が試した6つほどの提案のうち私のために働く唯一のアドバイスですが、「UNIXソケットファイルが存在しません」というエラーを避けるために@Chesterのビットを追加しました:sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldこれはmysql 5.7とubuntu 18.04にあります。
二輪車

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.