web-dev-qa-db-ja.com

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

--skip-grant-tablesオプションを有効にしてUbuntu 16.04でMySQLを再起動する必要がありますが、ルートパスワードがわからないか、機能していません。パスワードなしで--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は機能せず、rootパスワードも機能しませんでした。私もこれを試しました:

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

Mysqlを--skip-grant-tablesで起動するにはどうすればよいですか?

6
jcalfee314

Rootパスワードがわからない場合(または'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サービスを再起動する となり、テーブルにアクセスして、rootユーザーのパスワードや、必要なほとんどすべてのことをリセットできます。 (ただし、許可テーブルはロードされていないため、何もできません。)

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

サーバーを再度保護するために、これらの行をコメント化し、完了したらmysqlをもう一度再起動してください。

12
got2code

コメントから。

Init.rc構成の場合:

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

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