21

mysql がインストールされているサーバーを継承しました。root でさえも、どのユーザーの mysql パスワードも持っていません (Linux の root パスワードは持っていますが)。さらに、私が認識しているのは、root 以外のユーザー アカウントが 1 つだけあり、そのアカウントには SELECT さえも含めて、アクションを実行する権限がないことです。

私はmysqlサービスを停止し、許可テーブルをスキップするオプションで再起動し、パスワードなしでログインしようとしました:

service mysqld stop
service mysqld start --skip-grant-tables &
mysql -u root

しかし、次のエラーが発生します。

Access denied for user 'root'@'localhost' (using password: NO)

次に、パスワードをリセットしようとしました:

mysqladmin -u root password 'newpw'

しかし、それもアクセス拒否エラーを引き起こします。

また、他のユーザーとして(pwなしで)ログインして、次のコマンドを実行してみました:

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

このエラーが発生しました:

ERROR 1142 (42000): UPDATE command denied to user ''@'localhost' for table 'user'

また、mysql を削除して再インストールしようとしましたが、同じエラーが発生します。

助言がありますか?

4

6 に答える 6

34

試しsudo dpkg-reconfigure mysql-server-5.5てみると、新しい root パスワードを求められます。

5.5 を現在の mysql-server バージョンに置き換えます

于 2014-01-24T07:43:20.253 に答える
7

2つのオプション:

--skip-grant-tablesを使用する場合は、オプションが必ずしもinitスクリプトを介して渡されるとは限らないため、mysqldを直接起動する必要がある場合があります。

それ以外の場合は、マニュアルからこれらの手順を試してください。

于 2012-04-26T20:25:25.150 に答える
6

sudo コマンドを使用して、コマンドを root として実行していることを確認する必要があります。

mysqlパスワードをリセットするためのこの指示がうまく機能することがわかりました。

この手順に従って、MySQL サーバーでアクセス制御を無効にします。すべての接続には root アクセス権があります。サーバーをネットワークから切断するか、少なくともリモート アクセスを無効にすることをお勧めします。

mysqld パスワードをリセットするには、次の手順に従ってください。

Stop the mysql demon process using this command :

       sudo /etc/init.d/mysql stop

Start the mysqld demon process using the --skip-grant-tables option with this command

       sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &

この時点ではユーザーの権限を確認していないため、ネットワークを無効にするのが最も安全です。Dapper では、/usr/bin/mysqld... が機能しませんでした。ただし、mysqld --skip-grant-tables は実行しました。

start the mysql client process using this command

       mysql -u root

from the mysql prompt execute this command to be able to change any password

       FLUSH PRIVILEGES;

Then reset/update your password

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

If you have a mysql root account that can connect from everywhere, you should also do:

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

Alternate Method:

       USE mysql
       UPDATE user SET Password = PASSWORD('newpwd')
       WHERE Host = 'localhost' AND User = 'root';

And if you have a root account that can access from everywhere:

       USE mysql
       UPDATE user SET Password = PASSWORD('newpwd')
       WHERE Host = '%' AND User = 'root';

どちらの方法でも、クエリが成功したことを示すメッセージ (1 つ以上の行が影響を受ける) を受け取ったら、特権をフラッシュします。

フラッシュ特権;

次に、mysqld プロセスを停止し、従来の方法で再起動します。

sudo /etc/init.d/mysql 停止

sudo /etc/init.d/mysql の開始

于 2014-05-03T03:02:44.587 に答える
2

`UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root'; フラッシュ特権;

UPDATE ステートメントと FLUSH ステートメントをそれぞれ 1 行に記述します。UPDATE ステートメントはすべての root アカウントのパスワードをリセットし、FLUSH ステートメントはサーバーに許可テーブルをメモリにリロードするように指示して、パスワードの変更を通知します。

于 2014-01-21T08:53:02.333 に答える
0

私の場合も同じことが起こっていましたが、mysqlプロンプトへのログインを間違えていました。mysql -u root -p の代わりに mysql でやっていた

于 2014-03-03T02:15:18.307 に答える
0

Ubuntu 16.04 上の mysql 5.7.16 の場合、これは機能しました。

  • パスワードなしでログイン:

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

  • パスワードを変更する:

    'root'@'localhost' = 'mypass' のパスワードを設定します。

MySQL 5.7リファレンスマニュアルで解決策を見つけました

于 2016-11-03T08:42:47.577 に答える