ルートパスワードを使用できない場合、--skip-grant-tables を使用して MySQL を再起動するにはどうすればよいですか?

ルートパスワードを使用できない場合、--skip-grant-tables を使用して MySQL を再起動するにはどうすればよいですか?

オプションを有効にして Ubuntu 16.04 で MySQL を再起動する必要があります--skip-grant-tablesが、ルート パスワードがわからないか、機能しません。--skip-grant-tablesパスワードなしで設定するにはどうすればよいですか?

通常ユーザーとして試してみると:

mysqld --skip-grant-tables

私はこれを見る:

mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13 - Permission denied)

そこで、/etc/init.d/mysql からこの例を取り出し、次の--skip-grant-tablesパラメータを追加しました。

su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"
Password: 
su: Authentication failure

そのため、su は機能せず、ルート パスワードも機能しませんでした。次のことも試しました。

sudo su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"
No directory, logging in with HOME=/

--skip-grant-tables を使用して mysql を起動するにはどうすればよいですか?

答え1

ルート パスワードがわからない場合 (またはエラー'ERROR 1045 (28000): Access denied for user 'root'@'localhost'によりアクセスできない場合)、MySQL 構成ファイルにオプションを追加することでアクセスできます。まず、編集用に開きます。

sudo nano /etc/mysql/my.cnf

[mysqld]次に、以下の値を検索して入力します。

[mysqld]
# For debugging and recovery only #
skip-grant-tables
skip-networking
###################################

ご覧のとおり、ここでコマンドラインパラメータを追加するコツは、--パラメータの先頭から を削除することです。MySQLサービスを再起動するテーブルにアクセスして、ルート ユーザーのパスワードをリセットしたり、必要な操作をほぼすべて実行できます。(ただし、権限テーブルはロードされていないため、何も実行できません。)

注意してください。このモードの間、ログインしているすべてのユーザーはデータベース全体にアクセスできます。そのため、skip-networking上記のオプションを追加して、リカバリ中にリモート ユーザーがテーブルにアクセスできないようにしました。

サーバーのセキュリティを再度確保するために、完了したら必ずこれらの行をコメントアウトし、もう一度 mysql を再起動してください。

答え2

コメントより。

init.rc 構成の場合:

最も簡単な方法は、/etc/init.d/mysql を一時的に変更してオプションを含め--skip-grant-tables、このスクリプト (/etc/init.d/mysql start) を使用して起動することです。

Ubuntu 16.04 のような新興システムでは、これを で行う必要があります /lib/systemd/system/mysql.service

関連情報