JavaScriptを有効にしてください

【MySQL】外部から接続するための設定

 ·  ☕ 3 分で読めます
Photo by panumas nikhomkhai from Pexels

Photo by panumas nikhomkhai from Pexels

MySQLアカウントを作る

MySQLでは、デフォルトで外部からrootではログインできない設定になっているみたい。

セキュリティ的にも正しいと思うので、作業用のアカウントを作ろう。

ユーザー作成

# CREATE USER

CREATE USER 'user'@'host' IDENTIFIED BY password;

MySQLのユーザーは「〜のホストの〜というユーザー」という形で定義される。
上のクエリで言うhostでホストを明示的に指定している。

hostはホスト名、IP、ネットワークを指定できる。
ネットワークを指定する場合、例えば家のLANを指定したいなら192.168.10.0/255.255.255.0 という感じで書けばいい。
つまり、ネットワークアドレス/サブネット となる。

ユーザーに権限を与える

作ったユーザーに権限を与えます。

# GRANT

GRANT ALL ON db.table TO 'user'@'host';

GRANT文の詳しい使い方は他のサイトを参考に。

MySQLを外部からのアクセスを許可するように設定

MySQLはインストールしたばかりの状態では、外部からの接続を拒否する設定になっています。

正確には、デフォルトで`bind-address=127.0.0.

  1. という設定値がある

これは、MySQLにアクセスする際にlocalhostに向いてきたものだけ許可し、それ以外(MySQLが乗っかっているPCのIPで呼ばれるなど)は遮断するということらしい。

これを切らないと外部からアクセスできないので、編集する

Ubuntuなら/etc/mysql/mysql.conf.d/mysql.cnfの中のbind-addressの記述をコメントアウトする

ファイアウォールを設定

MySQLの設定以前にファイアウォールで3306ポートを開けておかないと外から入れない。普通はデフォルトでは開いてないと思う。

Linuxの場合はufwというアプリを使うと楽に管理できる。

結論だけ言うと3306を開けるには

$ sudo ufw allow 3306

でいい。
ただ、これだとインターネット上の全PCからアクセスできてしまう場合もあるためオススメしない。

$ sudo ufw allow from 192.168.10.0/24 to any port 3306

うちの場合はこれで家のLAN内からしか入れない

外からアクセスしてみる

$ mysql -h mydbhost -u user -p

mysqlのユーザーを作るときに指定したホスト、かつファイアウォールで接続を許可したホストで上のコマンドを叩けば、めでたくMySQLにログインできるはず。

おわり

詰まるとしたらこんなところかと。

自分でやろうとした時に、意外とめんどくさかったのでまとめてみました。

共有