かきスタンプ

福岡でフリーランスの物流系のエンジニアやってます。

MySQL:外部ホストからの接続

設定後は、以下のコマンドで接続できるようになります。

mysql -h hostname -u remoteuser -p
※「remoteuser」というユーザ名にしています。
 「hostname」はIP指定でも可能です。

MySQL:外部から接続できるようにする設定

まず、外部接続用のユーザを作成。(rootで接続できるようにしてもいいと思うけど、セキュリティを考慮して念のため。)

create user remoteuser identified by 'password';
※パスワードは'(シングルクォーテーション)で囲む必要があります。

ユーザに、外部から接続できる権限を付与する。

grant all privileges on *.* to remoteuser@"%" identified by 'password';
※privileges on databasename.tablename とデータベース・テーブル単位でのアクセス制限可。 また、@以降は「172.16.24.%」と、IPを指定する事ができる。

設定内容を反映させる。

flush privileges;

追加・編集したユーザの内容は、以下のコマンドで確認。

select user, host, password from mysql.user;

これで冒頭のコマンドで接続できるようになっています。

繋がらない場合、接続できるホストが制限されていないかを確認する。
my.cnf(Windowsの場合、my.ini)にて、以下の記述があるか確認。

bind-address = 127.0.0.1

先頭に「#」を付けてコメントアウトにするか、接続する端末のIPを追記する。
my.cnf は、環境により /etc にあったり /etc/mysql/ にあったりする事もあるので、「sudo find / -name "my.cnf"」などで検索を。

それでも繋がらない場合、ポートが待ち受けとなっているか確認する。(デフォルトは3306)確認コマンドは以下。

netstat -antu

LISTENでない場合、ファイアウォールの設定を見直す。

それでも繋がらない場合、クラウドのセキュリティ設定を確認する。
AWSならセキュリティグループのインバウンド設定にて、タイプ「MYSQL/Aurora」をルールに追加。 ルールの変更はAMI起動中でもOK。

権限を削除する場合は以下を実行。

revoke all privileges on . from remoteuser@"%" identified by 'password';
flush privileges;