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.
- という設定値がある
これは、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にログインできるはず。
おわり
詰まるとしたらこんなところかと。
自分でやろうとした時に、意外とめんどくさかったのでまとめてみました。