MySQLに外部から接続する

f:id:daihase:20190809115406j:plain

こんにちは、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などから繋げるようになります。

この辺の流れは知っておくと色々開発時に捗りますね。

それではいい開発ライフを〜