概要
WSL2+MySQLのインストールから、ローカルネットワーク内の外部デバイスから接続するまでの手順を記載しています。
既にWSL2にMySQLをインストールする記事やWSL2に対して外部デバイスからアクセスする手順を記載した記事は存在しますが、情報が分散されており、完了までに手間取った箇所がいくつかあるので、情報を集約したまとめ記事を作成しました。
手順
前提
登場人物
- winPC:WSL2をインストールするWindows PCです。
- WSL2:Windows PCにインストールされたWSL2です。WSL2上でMySQLのサーバーを立ち上げます。
- ほかのデバイス:MySQLに接続するwinPCとは別のデバイスです。今回はローカルネットワーク内の別デバイスのWindows 11から接続します。
バージョン確認
- MySQLのバージョンは5.7系と8.0系がありますが、今回はver8.0.38を使用します。
- LinuxのディストリビューションはUbuntu-20.04を使用します。MySQLの5.7系を使用する際は、対応を確認してください。
WSL2のインストール
以下の記事の通りに実行します。
WSL2の使用方法も詳しく記載されているので、WSLに慣れていない方は、一度通して読むことをお勧めします。
WSL(Windows Subsystem for Linux)インストールからファイル操作、プログラムの実行まで - Curios
上記記事のWSLから外部インターネットへ接続するための設定の項で設定する際に、/etc/resolv.conf
のうち、nameserver
の行をパブリックDNSサービスを使用するよう記述されていますが、プライベートなDNSサーバーがある場合はそちらを入力します。
winPCのコマンドプロンプトから
ipconfig /all
を実行することで、DNSサーバーのIPアドレスを確認できます。
WSL2でUbuntuにMySQLをインストール
下記の記事のうち
- インストール手順
- パスワードでログインするようにする
- クライアントソフト(MySQL WorkBench)をインストールする
を実行しましょう。
winPCのMySQL WorkBenchから接続テストができていればOKです。
【WSL】WSL2にmysqlをインストールする - echo("備忘録");
インストール手順でrootのパスワードを設定した後に、設定に関する質問が4回聞かれますが、セキュリティの観点から、特別な事情がない限りはすべてYesにすることをお勧めします。
WSL2で外部デバイスからの接続を許可する
次に、MySQLの設定ファイル、WSL2のファイアーウォールから、それぞれ外部接続を許可します。
まずはMySQLの設定ファイルです。
MySQLは初期設定ではlocalhost以外から接続できないようになっているので、以下のコマンドで設定ファイルを書き換えます。
筆者はテキストエディタはnanoを使用していますが、vim等任意のテキストエディタを使用しても問題ありません。その場合はnano
の部分の記述を任意のテキストエディタに変更します。
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1
の行を
# bind-address = 127.0.0.1
に変更してコメントアウトします。
変更後、ファイルを保存して閉じてください。
(nanoの場合は、Ctrl + X→Y→Enter)
次に、WSL2のファイアーウォールの設定をします。
mysqlのデフォルトポートである3306の通信を許可します。
$ sudo ufw allow 3306
もしufwがなければインストールしましょう。
sudo apt-get install ufw
WSL2でroot以外のユーザー作成を行う
現時点では、localhostからrootユーザーのみでMySQL上のデータベースにアクセスできる状態です。
(MySQLのインストール時の選択肢をすべてYesにしていれば、リモートからrootでは接続できない状態になっています。)
rootユーザーは最も強い権限を持っているため、一般的に通常の運用時に使用しません。
そこで、使用者ごとに必要な権限のみを付与したユーザーを作成し、自身のパスワードでログインしてアクセスします。
本記事における、ほかのデバイスからの接続テストでも、最も権限の低いユーザーを作成してテストを実施します。
WSL2でMySQLサーバーを起動させた状態で下記のコマンドを実行し、rootユーザーでログインします。
sudo mysql -u root -p
テストに使うユーザーネームとパスワードを決めて、下記のコマンドを実施します。
CREATE USER '(ユーザーネーム)'@'(IPアドレス)' IDENTIFIED BY '(パスワード)';
- すべて
''
は必要 -
'(IPアドレス)'
は特別に指定しない場合は'%'
でOK
登録後、exit
コマンドでMySQLからログアウトし、下記コマンドを実行し、パスワードを入力してログインできるかを確認します。
sudo mysql -u (ユーザーネーム) -p
ログインできていれば、正しくユーザーを作成できています。
Windowsでポートを開放する
次に、WindowsマシンからWSL2に接続するために、
- ポートフォワーディング
- (必要に応じて)ファイアーウォールの設定
を実行する必要があります。
下記サイトの
- 1.WindowsマシンからWSL2に接続するための設定を行う
通りに実行しましょう。
wsl2 で立てたサーバーにローカルネットワーク内の他の端末からアクセスする #Network - Qiita
上記サイトのpowershellスクリプトの記述コードのうち
$ports=@(22,3000,18000);
を、MySQLのデフォルトのポート番号である
$ports=@(3306);
に書き換えましょう。
ps1ファイルを実行後、winPCのIPでアクセスできるかを確かめます。
WSL2でサーバーを再起動します。
sudo systemctl restart mysql
winPCで下記コマンドを実行し、IPv4アドレスを控えます
ipconfig
winPCでMySQL WorkBenchを立ち上げ、Database -> Manage Server Connectionsを選択し、下記の設定を打ち込んだ後、Test Connectionを実行します。
- Hostname: (winPCのIPv4アドレス)
- Port: 3306
- Username: (登録したユーザーネーム、root以外)
接続テストに成功すればOKです。
ただし、ポートフォワーディングの設定をすると、WSL2で起動したサーバーにlocalhostでアクセスできなくなります。
再度localhostで接続したい場合は、下記サイトの
ポートフォワードの設定を削除する
通りに、ポートフォワーディングの設定を削除しましょう。
ほかのデバイスからアクセスする
ここまでくればサーバー側からの設定は完了したので、ほかのデバイスの操作に移ります。
今回はWindows 11のMySQL WorkBenchから接続する場合を例に挙げて説明します。
ほかのデバイスにMySQL WorkBenchをインストールします。
- サーバー側のMySQLのバージョンと合ったものを、下記サイトからインストールしてください。
MySQL :: Download MySQL Workbench - 詳しいインストール方法は、
## WSL2でUbuntuにMySQLをインストール
の項で実施しているので省略します。
ほかのデバイスでMySQL WorkBenchを立ち上げ、Database -> Manage Server Connectionsを選択し、下記の設定を打ち込んだ後、Test Connectionを実行します。
- Hostname: (winPCのIPv4アドレス)
- Port: 3306
- Username: (登録したユーザーネーム、root以外)
接続テストに成功すれば完了です。お疲れさまでした。