CentOS7にて外部サーバーからMySQLの接続を許可する

mysql_logo

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

[さくらのVPS]外部サーバーからMySQLの接続を許可する

「さくらのVPS」のCentOS7にて、外部サーバーからのMySQL接続を許可する手順をご紹介します。
サーバーにインストールしたMySQLは、基本的には初期設定では外部サーバーからの接続を許可していません。そのため外部サーバーからMySQLに直接接続したいときは設定を調整する必要があります。

 

MySQLの設定

まず始めにMySQLユーザーの設定を追加します。
通常はMySQLユーザーを作成するとき、「hogehoge@localhost」のように「(ユーザー名)@localhost」で作成します。
localhostは接続を許可するホスト名の意味なので、外部サーバーからMySQLにアクセスときは「(ユーザー名)@(外部サーバーのIPアドレス)」のユーザーを作成します。
※「外部サーバーのIPアドレス」ではなく「外部サーバーのホスト名」でも問題ないですが、今回は「IPアドレス」に対する内容を記述します

使用する主要なMySQLコマンド

ユーザー一覧を確認するMySQLコマンド

select Host, User from mysql.user;

ユーザーの作成するMySQLコマンド

CREATE USER `(ユーザー名)`@`(ホスト名)` IDENTIFIED BY ‘(パスワード)’;

データベースとユーザーを紐づけるMySQLコマンド

GRANT ALL PRIVILEGES ON `(データベース名)`.* TO ‘(ユーザー名)’@'(IPアドレスまたはホスト名)’

※GRANT以外の命令を全て許可します

 

(実行例)MySQLのユーザー設定

データベース「hogehoge」に外部IP「192.0.2.100」(例示用IPアドレス)から「hogehoge」ユーザーで接続するときの実行例を記載します。

MariaDB [(none)]> select Host, User from mysql.user;
+-----------------+-----------+
| Host            | User      |
+-----------------+-----------+
| localhost       | root      |
| localhost       | hogehoge  |
+-----------------+-----------+
2 rows in set (0.00 sec)

MariaDB [(none)]> CREATE USER `hogehoge`@`192.0.2.100` IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.03 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON `hogehoge`.* TO 'hogehoge'@'192.0.2.100';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show grants for hogehoge@192.0.2.100
+-------------------------------------------------------------------------------------------------------------------+
| Grants for hogehoge@192.0.2.100                                                                                   |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'hogehoge'@'192.0.2.100' IDENTIFIED BY PASSWORD '*20C8E42F28E1DADCAB79D682C8AE77051B0E767D' |
| GRANT ALL PRIVILEGES ON `hogehoge`.* TO 'hogehoge'@'192.0.2.100'                                                  |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

MariaDB [(none)]> select Host, User from mysql.user;
+-----------------+-----------+
| Host            | User      |
+-----------------+-----------+
| localhost       | root      |
| localhost       | hogehoge  |
| 192.0.2.100     | hogehoge  |
+-----------------+-----------+
3 rows in set (0.00 sec)

 

ポートの開放

MySQLの設定が終わったら、次にサーバーのポート開放を行います。CentOS7のポート制御はfirewall-cmdコマンドを使用します。ポートの設定変更をしたときは、必ず最後に「firewall-cmd reload」を行って設定の反映を行ってください。

使用する主要なポートの制御コマンド

ポート設定の確認コマンド

firewall-cmd –list-all

ポートの開放コマンド

firewall-cmd –permanent –zone=public –add-rich-rule=”rule family=”ipv4″ source address=”(IPアドレス)” port protocol=”tcp” port=”(ポート番号)” accept”

ポート設定のリロード

firewall-cmd –reload

 

(実行例)ポート開放のサンプル

上記のサンプルと同じく、外部IP「192.0.2.100」(例示用IPアドレス)から3306ポート(MySQL)のポートに接続するときの実行例を記載します。

[root@localhost]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  ports: 80/tcp 443/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

[root@localhost]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.0.2.100" port protocol="tcp" port="3306" accept"
success
[root@localhost]# firewall-cmd --reload
success
[root@localhost]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  ports: 80/tcp 443/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
        rule family="ipv4" source address="192.0.2.100" port port="3306" protocol="tcp" accept

 

さいごに

外部サーバーとの連携はJSON形式のAPIで行うのが通例です。ただ連携したい両方のサーバーが自分の管理下にあるとき、APIを作成する労力より直接データベースを操作した方が工数が短縮します。そのため自分の置かれた状況に合わせて利用方法を調整するのが良いと思います。