この記事にはプロモーションが含まれていることがあります

クラウド上にMySQLサーバを作る方法

IT

インターネット上に自分専用のマイエスキューエルMySQL)データベースサーバがあると便利だから、作りたい!

そんな時の作り方を紹介します。

今回やること

Linux(Ubuntu)サーバをEC2を使って作成して、MySQLをインストールします。

AWS的にはRDSMySQLや上位互換のAuroraSQLを準備するのが王道ですが、個人の練習用なら無料枠で使えるt2.microインスタンスのEC2に直接インストールした方がコスト削減できます。

スポンサーリンク

Linuxサーバインスタンスを作成してSSH接続

次のものを使いますので、準備します。

使うもの
  • AWSアカウント(GCP派の方はEC2をGCEに読み替えれば大体同じ感じで・・・)
  • SSHクライアント(私はTera Term使っています)
  • A5:SQL Mk-2(最後の接続確認しない場合は不要です)

AWSアカウントをお持ちでない方は、こちらでアカウント作成方法を紹介しています
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です。

IPアドレスは構築中の環境のIPアドレスに読み替えてください

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;

本来はrootではなく、権限を絞ったユーザを作成しますが、今回はrootでやります。

スポンサーリンク

接続確認

Linuxマシンから接続確認

Linuxマシンから接続確認するには、別のマシンからmysqlでリモート接続します。

IPアドレスはさきほど環境構築したサーバのIPアドレス、またはホスト名を指定します。

$ mysql -h 172.31.45.33 -u root -p

mysqlコマンドでよく使うオプション

オプション説明
-h接続先ホストIP、またはホスト名
-uMySQLサーバに接続する際のユーザ名
-Dデータベース名
-pパスワードの入力を求める。続けて直接指定することもできる。
例)パスワードが hoge の場合、 -phoge
※コマンド履歴に残るのでオススメできません

Windowsマシンから接続確認

Windowsパソコンから接続確認するにはクライアントソフトが必要です。今回は、A5:SQL Mk-2を使います。それ何?という方はこちらをどうぞ。

A5:SQL Mk-2を起動したら、データベースの追加と削除を実行します。

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

AWSのAmazon Auroraの場合もこれを選択すればOKです

今回構築したMySQLサーバへの接続情報を入力します。

  • サーバ名:EC2のパブリックIPv4アドレス
  • ポート番号:変更していなければ、デフォルトの3306
  • ユーザID:root
  • パスワード:先のGRANT文で変更したrootユーザのパスワード

入力できたら、テスト接続ボタンを押します。

接続に成功しました、と表示されればリモートからの直接接続完了です。

OKボタンを押してA5に接続設定を登録しましょう。

スポンサーリンク

トラブルシューティング

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)

コメント

タイトルとURLをコピーしました