今日は、PMAでデータベースを作成したいと思いました。それは言った: "MySQLサーバーにログインできません"。私は端末を介して試してみた、同じ問題、そしてそれは私のパスワードが間違っているためです。そして、私はその理由が理解できません。
私は通常の方法でrootのパスワードをリセットすることを試みました(付与テーブルのマウントをスキップしてパスワードをリセットする)が、うまくいかないようです。
それを参照してください。
morgan@rakija:~$ Sudo mysqld_safe --skip-grant-tables &
[1] 14016
morgan@rakija:~$ 150802 19:07:25 mysqld_safe Can't log to error log and syslog at the same time. Remove all --log-error configuration options for --syslog to take effect.
150802 19:07:25 mysqld_safe Logging to '/var/log/mysql/error.log'.
150802 19:07:25 mysqld_safe A mysqld process already exists
[1]+ Terminé 1 Sudo mysqld_safe --skip-grant-tables
morgan@rakija:~$ mysql -u root
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.0.20-MariaDB-0ubuntu0.15.04.1 (Ubuntu)
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> use mysql;
Database changed
MariaDB [mysql]> update user set password=PASSWORD("newPass") where user='root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]> exit
Bye
morgan@rakija:~$ Sudo service mysql restart
morgan@rakija:~$ mysql -uroot -pnewPass
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
問題自体と同じくらい奇妙な解決策を見つけました。
(まったく必要ない、投稿の最後に私の編集を読む)--skip-grant-tables
を使用してMySQL/MariaDBを再起動します(Web上のチュートリアルを検索)。
mysql.user
テーブルのplugin
フィールドを調べます。
MariaDB [mysql]> SELECT user, plugin FROM user;
+------+-------------+
| user | plugin |
+------+-------------+
| root | unix_socket |
| root | unix_socket |
| root | unix_socket |
| root | unix_socket |
+------+-------------+
各エントリのプラグインフィールドを空白の文字列にリセットする必要がありました。
UPDATE user SET plugin=""; // without WHERE clause
また、パスワードが消去されているように見えることがあるので、パスワードが定義されていることを確認してください(user, password
フィールドで選択)。そうでなかったら、それを更新して下さい:
UPDATE user SET password=PASSWORD("my_password") WHERE user="root";
特権パラメータは明示的に保存する必要があります。
FLUSH PRIVILEGES;
その後、MySQLを通常モードで再起動すると、rootアカウントに接続できるはずです。
これは必ずしもUnixソケット経由の接続を無効にするわけではありません。 MySQL vaを修復した後、PMAで、接続がUnixソケットを介して確立されたことがわかります。
EDIT、数ヵ月後:私はこの問題が頻繁に戻ってくるのに慣れてきました。それ)。それで、私は問題のより良い理解を得ました。 UNIX_SOCKETプラグインがあります。これは、パスワードを作成しなくてもMariaDBアカウントにログインできるようにします。パスワードを入力しなくても、シェルの資格情報を使用して信頼できるからです。実際、このプラグインは認証プラグインであり、SQLサーバーとの通信方法ではありません。あなたがログイン方法としてunixソケットを使わないのであれば、あなたはそれを安全に無効にすることができます。説明できない唯一のことは、UNIX_SOCKETプラグインがデータベースの各アカウントに定期的に設定されていることです。
これは、発生時に--skip-grant-tables
でMariaDBを再起動しなくてもSQLサーバーにログインできることを意味します。システムのrootアカウントにログインし、パスワードなしでmysql -u root
で接続し、プラグインフィールドをリセットそれが上で説明された方法で。
編集2:確認、それはUbuntu上の各MariaDBアップグレードで起こります。
この回答から、 http://ubuntuforums.org/showthread.php?t=2275033&p=13272227#post13272227 になります。
MySQLはパスワードではなくプラグインを使用してrootを認証しようとします。 rootのプラグイン使用を無効にする必要があります。
Shell$ Sudo mysql -u root
[mysql] use mysql;
[mysql] update user set plugin='' where User='root';
[mysql] flush privileges;
[mysql] \q
デフォルトでは、marriadbはパスワードを設定するために "unix_socket"認証プラグインを使用します。これは "mysql_native_password"になるはずです。
データベースを切り替えます。
use mydatabase;
最初に魔女プラグインが設定されているのを見てください。
SELECT user, plugin FROM user;
"mysql_native_password"に設定してください。
UPDATE user SET plugin="mysql_native_password";
新しいパスワードを設定してください...
update user set authentication_string=password('My@Password'), plugin='mysql_native_password' where user='root';
前述のように接続します。
mysqld_safe --skip-grant-tables
ログファイルが表示されます。
160518 23:21:01 mysqld_safe Logging to '/usr/local/mysql/data/ab123456.domain.com.err'.
160518 23:21:01 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
正しいソケットの検索ログ(この場合は/usr/local/mysql/data/ab123456.domain.com.err):
cat /usr/local/mysql/data/ab123456.domain.com.err | grep "socket: "
Version: '5.5.49-MariaDB' socket: '/tmp/mysql.sock' port: 3306 MariaDB Server
そしてMySQL接続でそれを使用します。
mysql --socket /tmp/mysql.sock -u root
root@ab123456:~# /usr/local/mysql/bin/mysql --socket /tmp/mysql.sock -u root
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.49-MariaDB MariaDB Server