「継承」したMySQLデータベースがあり、管理者の資格情報が与えられていません。ただし、それが実行されるボックスにはアクセスできます。管理者の資格情報を回復するか、新しい資格情報を作成する方法はありますか?
MySQLリファレンスマニュアルの ルートパスワードのリセットに関する章 を読んで実行します。
この手順では、認証なしでmysqlデーモンを起動し、資格情報を提供せずに接続できるようにします。このモードでは、通常どおり接続し、パスワードと許可をリセットできます。その後、適切な承認を得てmysqlを再び開始することを忘れないでください。
これがDebian/Ubuntuボックスである場合、debian-sys-maintと呼ばれるrootと同等の特別なアカウントがあります。パスワードは/ etc/mysql/debian.cnfで読むことができます
そのパスワードを使用して、debian-sys-maintとしてmysqlにログインできます。
mysql --defaults-file=/etc/mysql/debian.cnf mysql
ログインしたら、次の手順を実行します。
update user set password=password('<new password>') where user='root';
flush privileges;
quit;
これで、新しいパスワードを使用してrootにアクセスできるようになります。
mysql -uroot -p
Rootユーザーが存在しませんでした。オン
CREATE USER root@localhost;
わかった
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
解決策は
mysqld_safe --skip-grant-tables &
mysql
INSERT INTO user (Host,User,Password) VALUES ('localhost', 'root', 'changethispassword');
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
その後、私はこれから少し助けてすべての特権を1つずつ追加しました:
mysql mysql -e "SELECT * FROM user WHERE User='root'\G"|grep N
(そしてこれはもっと自動化することができ、もっと自動化すべきです)
注:INSERT
で「Y」の正しい数を見つけることはPITAです。
MySQLリファレンスマニュアル の手順はあまり明確ではないので、ここではわかりやすい言葉で答えようとしています。 (この回答はMacBook OSXユーザーに関連しています):
my.cnf
_を見つけます。 (私にとっては、@ _/Applications/XAMPP/xamppfiles/etc
_に配置されました。見つからない場合は、検索するだけです)。my.cnf
_ファイルを開きます。"skip-grant-tables"
_セクションの最後に_[mysqld]
_(引用符なし)を追加し、ファイルを保存します。skip-grant-tables
_オプションで始まります。Terminal
を開き、mysql
コマンドを実行しますmysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
mysql> FLUSH PRIVILEGES;
_mysql> exit
_