こんにちは、daihaseです。 今日のお題は「MySQLに外部から接続する」です。
アプリでもWebサービスでも何でもいいですが、DBサーバーへ各クライアントツールから接続する際、諸々設定する必要があります。今日はUbuntu環境にインストールしたMySQLに対し、外部接続を試みるまでの一連の流れをメモ。
MySQLのインストール(Ubuntu14.04)
AWS上に立てたEC2上にMySQLをインストールします。 途中rootでのパスワードを聞かれるので何かしら設定してやります。
$ sudo apt-get update $ sudo apt-get install mysql-server
インストールが完了したら早速ログイン。
$ mysql -u root -p Enter password: # 上で決めたパスワードを入力
MySQLにログインしたら、status; と打って情報を確認します。
mysql> status; . . . Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1
上記の通り、このままだと日本語を含んだデータを入力した場合に文字化けが発生するので、日本語対応化してやります。
MySQLにログインしてる状態から exit; と打って出ましょう。ログアウトしたらMySQLの設定ファイルに下記を追記し、UTF-8に変更します。
$ sudo vim /etc/mysql/my.cnf
初めての場合は新規作成になるので、そのまま以下を入力してください。
[mysqld] character-set-server=utf8 skip-character-set-client-handshake default-storage-engine=INNODB [mysqldump] default-character-set=utf8 [mysql] default-character-set=utf8
入力が完了したら、設定ファイルを反映させるためにMySQLを再起動します。
$ sudo /etc/init.d/mysql restart
再起動したら一応rootで再び入って見てみましょう。
$ mysql -u root -p mysql> # ログイン mysql>status; # 再びstatus;と打って状態を確認 . . . Connection: Localhost via UNIX socket Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8
次に権限の設定を。rootでもこのままだと外部から接続出来ないので、以下を打って外部からでも接続出来るようにします。
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY '設定したパスワード' WITH GRANT OPTION;
最後、Ubuntuは待ち受けIPアドレスが127.0.0.1で固定されているので、これを解除します。
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf . . . # bind-address = 127.0.0.1 この部分をコメントアウト
コメントアウトしたらMySQLを再起動します。上で叩いたコマンドと同じやつですね。
$ sudo /etc/init.d/mysql restart
一旦ここでMySQLの設定は終わり。本当はrootだけってのはセキュリティ的にも芳しくないので、複数人で開発する時などはちゃんとユーザーを作成し、個々でログインして作業したほうがいいでしょう。
AWS側の設定
AWSでサーバーを立てた場合、セキュリティグループを設定することになります。その際インバウンド、アウトバウンドの設定も行うのですが、MySQLへのポートもここで解放してやります。
MySQLをインストールしたEC2に当てているセキュリティグループを開き、3306ポートを解放してやります。(※インバウンド側)
これで外からPort3306に対してのアクセスを許可されることになります。
あとはEC2にSSHログインし、Ubuntuのufw(ファイアウォール)設定を行います。
$ sudo apt-get install ufw // ufwをインストール $ sudo ufw enable // 有効に $ sudo ufw allow 3306 // MySQL Portを解放 $ sudo ufw allow 3306/tcp
AWS側の設定はこれで終わりです。これでDataGripやIDEなどから繋げるようになります。
この辺の流れは知っておくと色々開発時に捗りますね。
それではいい開発ライフを〜