インターネット上に自分専用のマイエスキューエル(MySQL)データベースサーバがあると便利だから、作りたい!
そんな時の作り方を紹介します。
Linux(Ubuntu)サーバをEC2を使って作成して、MySQLをインストールします。
AWS的にはRDSでMySQLや上位互換のAuroraSQLを準備するのが王道ですが、個人の練習用なら無料枠で使えるt2.microインスタンスのEC2に直接インストールした方がコスト削減できます。
Linuxサーバインスタンスを作成してSSH接続
次のものを使いますので、準備します。
- AWSアカウント(GCP派の方はEC2をGCEに読み替えれば大体同じ感じで・・・)
- SSHクライアント(私はTera Term使っています)
- A5:SQL Mk-2(最後の接続確認しない場合は不要です)
EC2インスタンス作成
まずはAWSのマネジメントコンソールにログインして、EC2インスタンスを立ち上げます。

Linux系のOSならなんでもよいですが、今回はUbuntu 18.04 LTSを使います。CentOS系を使うよっていう方は一部コマンドが違うので読み替えてください。

インスタンスタイプの選択
インスタンスのタイプは必要なサイズを指定しましょう。
今回は練習なので無料枠内で作れるt2.microにします。

いろいろ細かい設定ができるのですが、今回は割愛して、一気に起動ボタンをポチっとしちゃいます。

SSH接続用のキーペア設定
私はいつも使っているキーペアがあるのでそれを選択します。
まだ作っていない方は新しいキーペアを作成して先に進めます。

インスタンス確認
起動するとインスタンスリストに登場します。今回名前の設定を忘れてしまったようなので適当に命名しておきます。


SSHでリモート接続確認
WindowsパソコンからTeraTermを使って接続してみます。接続先はこのIPアドレスか、またはその下のパブリックIPv4 DNSでもOKです。

TeraTermを起動して接続先やプロトコルを指定します。

今回はEC2のOSをUbuntuにしたので、ユーザ名も「ubuntu」を指定します。認証は先程のキーペアを使いますので、RSA/DSA/ECDSA/ED25519鍵を使うを選択して、秘密鍵ファイルを指定してOKボタンを押すと接続できます。

このように接続できれば第一関門突破です。

MySQLインストール
MySQLをインストールします。ここからはTeraTermでSSH接続して作業します。
ubuntu@ip-172-31-45-33:~$ sudo apt update
ubuntu@ip-172-31-45-33:~$ sudo apt install mysql-server -y
mysqlコマンドでMySQLに接続します。
データベースに接続できたら、MySQLのバージョンでも確認してみましょう。バージョンを確認するには、select @@version; を実行します。
mysqlを終了する場合は、exit です。
ubuntu@ip-172-31-45-33:~$ sudo mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.34-0ubuntu0.18.04.1 (Ubuntu)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select @@version;
+-------------------------+
| @@version |
+-------------------------+
| 5.7.34-0ubuntu0.18.04.1 |
+-------------------------+
1 row in set (0.00 sec)
mysql>
接続設定変更
MySQLは初期状態だとローカルホストからしか接続できない設定になっていますので、リモートから接続するには、もうひと手間必要です。
mysqld.cnf の変更
ローカルホストからしか接続できない設定をコメントアウトして無効化します。
ubuntu@ip-172-31-45-33:~$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
bind-addressの行をコメントアウトします。

MySQLを再起動
設定ファイルの編集が終わったら、再起動して設定を有効にします。
ubuntu@ip-172-31-45-33:~$ sudo systemctl restart mysql
ubuntu@ip-172-31-45-33:~$ sudo systemctl status mysql

これでサーバ側の設定は完了です。ちゃんと設定できたかリモート接続して確認してみましょう。
rootのリモート接続設定
初期状態だとパスワードが未設定、かつリモートから接続できない設定となっているので、次のDDLで設定変更します。password部分は実際にセットするパスワードを指定します。
ubuntu@ip-172-31-45-33:~$ sudo mysql -u root
(MySQL接続後)
mysql> grant all privileges on *.* to root@"%" identified by 'password' with grant option;
接続確認
Linuxマシンから接続確認
Linuxマシンから接続確認するには、別のマシンからmysqlでリモート接続します。
IPアドレスはさきほど環境構築したサーバのIPアドレス、またはホスト名を指定します。
$ mysql -h 172.31.45.33 -u root -p
Windowsマシンから接続確認
Windowsパソコンから接続確認するにはクライアントソフトが必要です。今回は、A5:SQL Mk-2を使います。それ何?という方はこちらをどうぞ。
A5:SQL Mk-2を起動したら、データベースの追加と削除を実行します。

MySQL/MariaDB(直接接続)ボタンを押します。

今回構築したMySQLサーバへの接続情報を入力します。
- サーバ名:EC2のパブリックIPv4アドレス
- ポート番号:変更していなければ、デフォルトの3306
- ユーザID:root
- パスワード:先のGRANT文で変更したrootユーザのパスワード
入力できたら、テスト接続ボタンを押します。

接続に成功しました、と表示されればリモートからの直接接続完了です。
OKボタンを押してA5に接続設定を登録しましょう。


MySQLはGCPやAWSのクラウド上にサービスを立てる際によく使われるデータベースなので、しっかり基礎から抑えておきましょう。
データベースに関わる全てのエンジニア必携のベストセラー!
私もシステム開発でコードやSQL書いていた時は常に持ち歩いていた愛読書です。
トラブルシューティング
Cannot connect to server on host ‘IPアドレス’: Connection timed out
このように表示される場合は、EC2のセキュリティグループの設定でポートが開いていない可能性がありますので、確認してみてください。

MySQLをインストールしたEC2のセキュリティグループのインバウンドルールを確認します。

インバウンドルールにMySQLのポートが通過設定されていない場合は、セキュリティグループのリンクをクリックして、インバウンドルールを編集します。

①ルールを追加ボタンを押して、②にMySQLのポートを指定します。タイプリストからMYSQL/Auroraを選択すればOKです。デフォルトポート:3306以外で動かしている場合はその番号を直指定します。最後に③のルールを保存したら、再度接続確認をしてみてください。

Host XXX is not allowed to connect to this MySQL server

リモートから接続できるユーザがいない可能性があります。この記事の手順どおり進めると次のようにrootユーザが登録できていれば接続できると思います。
mysql> select user, host, authentication_string from mysql.user;
+------------------+-----------+-------------------------------------------+
| user | host | authentication_string |
+------------------+-----------+-------------------------------------------+
| root | localhost | |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | localhost | *369BB5B4AA79C5A88FCA1B3BB1DD8574D77EFB2C |
| root | % | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA |
+------------------+-----------+-------------------------------------------+
5 rows in set (0.00 sec)
MySQLはGCPやAWSのクラウド上にサービスを立てる際によく使われるデータベースなので、しっかり基礎から抑えておきましょう。
データベースに関わる全てのエンジニア必携のベストセラー!
私もシステム開発でコードやSQL書いていた時は常に持ち歩いていた愛読書です。
コメント