この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
目次
[さくらのVPS]外部サーバーからMySQLの接続を許可する
「さくらのVPS」のCentOS7にて、外部サーバーからのMySQL接続を許可する手順をご紹介します。
サーバーにインストールしたMySQLは、基本的には初期設定では外部サーバーからの接続を許可していません。そのため外部サーバーからMySQLに直接接続したいときは設定を調整する必要があります。
MySQLの設定
まず始めにMySQLユーザーの設定を追加します。
通常はMySQLユーザーを作成するとき、「hogehoge@localhost」のように「(ユーザー名)@localhost」で作成します。
localhostは接続を許可するホスト名の意味なので、外部サーバーからMySQLにアクセスときは「(ユーザー名)@(外部サーバーのIPアドレス)」のユーザーを作成します。
※「外部サーバーのIPアドレス」ではなく「外部サーバーのホスト名」でも問題ないですが、今回は「IPアドレス」に対する内容を記述します
使用する主要なMySQLコマンド
ユーザー一覧を確認するMySQLコマンド
ユーザーの作成するMySQLコマンド
(ユーザー名)
@(ホスト名)
IDENTIFIED BY ‘(パスワード)’;データベースとユーザーを紐づけるMySQLコマンド
(データベース名)
.* TO ‘(ユーザー名)’@'(IPアドレスまたはホスト名)’※GRANT以外の命令を全て許可します
(実行例)MySQLのユーザー設定
データベース「hogehoge」に外部IP「192.0.2.100」(例示用IPアドレス)から「hogehoge」ユーザーで接続するときの実行例を記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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」を行って設定の反映を行ってください。
使用する主要なポートの制御コマンド
ポート設定の確認コマンド
ポートの開放コマンド
ポート設定のリロード
(実行例)ポート開放のサンプル
上記のサンプルと同じく、外部IP「192.0.2.100」(例示用IPアドレス)から3306ポート(MySQL)のポートに接続するときの実行例を記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
[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を作成する労力より直接データベースを操作した方が工数が短縮します。そのため自分の置かれた状況に合わせて利用方法を調整するのが良いと思います。