--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で起動するにはどうすればよいですか?
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をもう一度再起動してください。
コメントから。
Init.rc構成の場合:
最も簡単な方法は、一時的に/etc/init.d/mysqlを変更してオプション--skip-grant-tables
を含め、このスクリプトでそれを開始することです(/etc/init.d/mysql start)。
Ubuntu 16.04のような新興システムでは、これは/lib/systemd/system/mysql.service
で行う必要があります。