MySQLに外部サーバーからアクセスする

5〜6回は似たようなことで毎回数時間費やしている。とり頭過ぎる。メモしないとダメだ!。

サーバー側環境

インストール & 設定

% sudo aptitude install mysql-server

ログは /var/log/syslog に吐き出される。設定ファイルは/etc/mysql/my.cnf。データベースは /var/lib/mysql 以下。

外部からアクセスできるようにする。/etc/myusql/my.cnfのbind-addressを以下のようにする。

bind-address		= 0.0.0.0

/etc/hosts.allowにてmysqldをアクセスできるようにする。仮に hogehoge.co.jp をアクセス可能とする。

mysqld: hogehoge.co.jp LOCAL

mysqldを立ち上げ直す。

% sudo /etc/init.d/mysqld restart

データベース tmpdbにユーザーjohnのアクセスを許す。

% mysqladmin create tmpdb -p
% mysql -u root -p
> GRANT ALL on tmpdb.* to 'john'@'hogehoge.co.jp' identified by 'my_password_nantyara';
> flush privileges;
> quit

クライアント側からのアクセス

Debianの場合はmysql-clientをインストールしておく。MySQLが動いているサーバーをnyarayara.co.jpとすると以下のようにコマンドを打ってアクセスする。

% mysql -u john -h nyarayara.co.jp -p tmpdb

トラブルシューティング

クライアントからのアクセス時に

ERROR 2013 (HY000): Lost connection to MySQL server during query

とか

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

とでるならば、アクセス先のサーバーにおいてmysqld(通常は3302)へのアクセスを許可していない。

  • my.cnfのbind-address
  • /etc/hosts.allow の mysqld への許可
  • iptableの設定

をチェックすること。

ERROR 1044 (42000): Access denied for user 'john'@'nyarayara.co.jp' to database 'tmpdb'

というエラーメッセージがでたならば、MySQLにおけるデータベースへの許可権限(GRANTで与える権限)の設定がうまくいっていない、あるいは、入力しているパスワードが間違っている。許可権限情報などがmysqlデータベースをチェックすること。

% mysql -u root -p
> use mysql
> select Host, User, Password from user;