phpMyAdminにエラーが出て、すべてのDBアクセスできない
#1184 – Aborted connection 195 to db: ‘unconnected’ user: ‘pma’ host: ‘localhost’ (init_connect command failed)
<<<対処>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
●現在の状況:
文字コードをUTF-8設定変更するために、現在、my.iniファイルで
[mysqld]のところにある以下部分を変更した。
—————–(変更前)———————-
## UTF 8 Settings
#init-connect=\’SET NAMES utf8\’
#collation_server=utf8_unicode_ci
#character_set_server=utf8
#skip-character-set-client-handshake
#character_sets-dir=”C:/xampp/mysql/share/charsets”
—————————————
—————–(変更後)———————-
## UTF 8 Settings
init-connect=\’SET NAMES utf8\’
collation_server=utf8_unicode_ci
character_set_server=utf8
skip-character-set-client-handshake
character_sets-dir=”C:/xampp/mysql/share/charsets”
—————————————
文字化けの問題は解消するも、phpMyAdminにエラーが出て、すべてのDBアクセスできなくなった。
エラー内容は
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#1184 – Aborted connection 195 to db: ‘unconnected’ user: ‘pma’ host: ‘localhost’ (init_connect command failed)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
init_connectコマンドが失敗したらしいので、解決策は、以下を参考にして、MySQLモニターで以下を実行
①mysql> SHOW GLOBAL VARIABLES LIKE “init%”;
⇒init_connectを確認
+---------------+------------------+ | Variable_name | Value | +---------------+------------------+ | init_connect | 'SET NAMES utf8' | | init_file | | | init_slave | | +---------------+------------------+ 3 rows in set (0.00 sec)
②SET GLOBAL init_connect=”;
⇒init_connectをリセット
以上で解決!
<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
参考:http://b.l0g.jp/mysql/user-at-localhost/
MySQLで新規ユーザーを作成する方法
ツイッターで新規ユーザを作成するためのコマンドは以下のとおり。
CREATE USER user IDENTIFIED BY 'password';
実行例)
mysql> CREATE USER test IDENTIFIED BY 'test'; Query OK, 0 rows affected (0.00 sec)
ユーザー権限を設定する。
GRANT 与える権限 ON データベース名.テーブル名 TO ユーザー名
与える権限は、SELECT,UPDATEなどのように、許可するコマンドを指定する。
全て許可する場合は、以下のようにALLとする。
mysql> GRANT ALL ON *.* TO test; Query OK, 0 rows affected (0.00 sec)
一回ログアウトして、先ほど作成したユーザでログインしようとすると、
>mysql -u test -ptest ERROR 1045 (28000): Access denied for user 'test'@'localhost' (using password: Y ES)
こんなエラーが。
原因は以下の様なものが考えられる。
- パスワードを間違った
- パスワードが設定されていないのに「-p」オプションをつけた
- MySQLのパスが正しく設定されていない。
今回は、「-p」を指定しなかったらなぜかログインできたので、パスワードが設定されていなかったことがわかった。
なんかパスワードが設定されていないのも嫌なので、改めてパスワードを設定する。
rootでログインして、ユーザー名を確認してみる。
mysql> SELECT host,user,password FROM mysql.user; +-----------+------+-------------------------------------------+ | host | user | password | +-----------+------+-------------------------------------------+ | localhost | root | *A4B6157319038724E3560894F7F932C8886EBFCF | | linux | root | | | localhost | | | | linux | | | | localhost | pma | | | % | test | *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 | +-----------+------+-------------------------------------------+
あれ、テストユーザにパスワード設定されてるっぽいけど・・・?どういうことだ・・・(正解は、「匿名ユーザーが悪さをしている」。それについては後述。)
とりあえず、再度パスワードを設定してみる。
> SET PASSWORD FOR test@"%"=PASSWORD('test'); Query OK, 0 rows affected (0.00 sec)
で、もう一回ログインしようとしたけれど、以下のようなエラーが。
ERROR 1045 (28000): Access denied for user 'test@%'@'localhost' (using password: YES)
うーーーん。
以下を参照。
http://dev.mysql.com/doc/refman/5.6/en/default-privileges.html
> SET PASSWORD FOR 'test'@'%' = PASSWORD('test');
うーーん。違うのも参照。
http://dev.mysql.com/doc/refman/5.6/en/set-password.html
以下のようにやってもダメ。
GRANT USAGE ON *.* TO 'test'@'%' IDENTIFIED BY 'test';
なんでtestユーザーでログイン出来ないんだーと途方に暮れていたら、
「b.l0g.jp」様がものすごく丁寧に解説してくれていた。
http://b.l0g.jp/mysql/user-at-localhost/
ありがとうございます。参考にさせて頂きました。
匿名ユーザーが悪さをしていたっぽい。
以下のように、明示的に「localhostのtestユーザに権限を与える」とすればいい。
mysql> grant select on mydb.* to test@'localhost' identified by 'test'; Query OK, 0 rows affected (0.00 sec)
やっとログインできた!!
C:>mysql -u test -ptest Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 20 Server version: 5.5.32 Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserve Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statem
詳しくは、引用先の「b.l0g.jp」様の記事をご参照ください。
すごくわかりやすい解説をしてくれています。
ありがとうございます。
ただ、今度はこんなエラーが。
mysql> show databases; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 27 Current database: *** NONE *** ERROR 1184 (08S01): Aborted connection 27 to db: 'unconnected' user: 'test' host: 'localhost' (init_connect command failed)
init_connectコマンドが失敗したらしい。
これについての対処法は以下のURLに記載されていて、このStackOverFlowの通りにコマンドを実行したらうまくいった。
http://stackoverflow.com/questions/9353087/reset-mysql-init-connect-values
(その他の参考)
http://dev.mysql.com/doc/refman/4.1/ja/communication-errors.html
何をしたかというと・・・
mysql> SHOW GLOBAL VARIABLES LIKE "init%"; +---------------+------------------+ | Variable_name | Value | +---------------+------------------+ | init_connect | 'SET NAMES utf8' | | init_file | | | init_slave | | +---------------+------------------+ 3 rows in set (0.00 sec) mysql> mysql> SET GLOBAL init_connect=''; Query OK, 0 rows affected (0.00 sec)
上記のコマンドを実行し、init_connectをリセットした。
すると、テストユーザーでもちゃんと接続できた。
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mydb | | test | +--------------------+ 3 rows in set (0.01 sec)