web-dev-qa-db-ja.com

MySQL(MariaDB)のrootパスワードをリセットできません

今日は、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
4
ponies

デフォルトでは、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';
0
André Verwijs

前述のように接続します。

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
0