つまらないことだけどちょっとはまったので覚え書き。
MySQLで外部ホストからの接続を許可する場合、「localhost」用の権限と「外部用」の権限の二種類をGRANTで制限する必要がある。
# mysql -u root -p mysql> GRANT ALL PRIVILEGES ON *.* TO testuser@'%' IDENTIFIED BY 'password'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT ALL PRIVILEGES ON *.* TO testuser@localhost IDENTIFIED BY 'password'; Query OK, 0 rows affected (0.00 sec) mysql> use mysql; Database changed mysql> select host,user from user; +--------------+----------+ | host | user | +--------------+----------+ | % | testuser | | localhost | testuser | +--------------+----------+ 8 rows in set (0.00 sec)
あとはmy.cnfにbind-addressの記述があった場合には コメントアウトしておくこと。
mysql> set password for testuser@localhost=password('xxxxxxxx'); Query OK, 0 rows affected (0.00 sec) mysql> set password for testuser@'%'=password('xxxxxxxx'); Query OK, 0 rows affected (0.00 sec)
パスワードの変更はこんな感じ。
参考
http://dev.mysql.com/doc/refman/5.1/ja/adding-users.html
http://www.bitscope.co.jp/tep/MySQL/quickMySQL.html
間違ったGRANT文を正しいと思いこんで、手で打ち込んでいたのが原因でした。あうち。