echo("備忘録");

IT技術やプログラミング関連など、技術系の事を備忘録的にまとめています。

【WSL】WSL2にmysqlをインストールする

今回の内容

今回は、Windows Subsystem for Linux version2(=以下WSL2)にmysqlをインストールし、動かすところまでを説明します。

前提

  • WSL2のインストールは済んでいる前提です。(ここでは記載しません)
  • 外部ホストからmysqlに接続する方法は説明しません。(localhostでの動作確認のみ)

インストール手順

インストール手順ですが、実はMicrosoft Learnにそのままズバリ全部書いてあります。
なので基本的にはここに書いてあるやりかたをそのまま行うだけでOKです。

# パッケージ更新&mysqlインストール
$ sudo apt update
$ sudo apt install mysql-server
  
# バージョン確認(正しくインストールされたかどうか)
$ mysql --version
  
# mysqlを起動する
$ sudo /etc/init.d/mysql start  
  
# セキュリティ スクリプト プロンプトの開始(=rootパスワードやセキュリティ系に関する設定を行うスクリプト)
$ sudo mysql_secure_installation  
  
# もし下記メッセージが出たら、Ubuntuのrootパスワードを入力する。
# mysqlのrootとは無関係です
Enter password for user root:
  
# 最初にrootのパスワードを設定する。
# 下記で、mysqlのrootユーザーのパスワードを設定&再入力する。
The existing password for the user account root has expired. Please set a new password.
New password: 
Re-enter new password: 
  
# その後、下記の質問を聞かれる。(詳細は下表参照)
# すべてyesかどうかで答える(yまたはY以外は全てno扱い)
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
  
Remove anonymous users? (Press y|Y for Yes, any other key for No) :
  
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :
  
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :
  
Reload privilege tables now? (Press y|Y for Yes, any other key for No) :
  
# 上記すべて設定&設定の再読み込みをしたら、下記コマンドでmysqlを起動できる(はず)
$ sudo mysql
質問 内容 備考
VALIDATE PASSWORD COMPONENT can be used to...(以下略) VALIDATE PASSWORD COMPONENTを使って、パスワードポリシーを厳格に決めるかどうか。 ・決める場合、LOW/MEDIUM/STRONGの3つからパスワードレベルを設定できる。
・当然レベルが高いほどセキュアだが、その分パスワードに求められる条件は厳しくなる
・これを設定した場合、最初に決めたmysqlのrootパスワードの強度の確認、及びパスワードを変更するかどうかを決められる。(変えなくてもいい)
・パスワードレベルは後で変更できる
Remove anonymous users 匿名ユーザーを削除するかどうか。 セキュリティ的に、削除した方が良いと思う
Disallow root login remotely 外部からのrootユーザーのログインをNGにするかどうか。 NGにしたほうが、セキュリティが高まる
Remove test database and access to it テスト用のデータベースを削除するかどうか。
Reload privilege tables now 特権テーブルの内容を即座に再読み込みするかどうか。 設定を即座に反映させるために、再読み込みするのをお勧め

パスワードでログインするようにする

上記でとりあえずmysqlsudo mysqlで実行できるのですが、この状態だとまだプロンプトで設定したパスワードでは入れません。(mysql -u root -pコマンドでは入れない)

初期状態では認証がauth_socket(=WSLの認証をそのまま使う)設定なのが原因です。

これを修正して、プロンプトで設定したパスワードで入れるようにします。(MySQL WorkBenchなどのクライアントソフトを使用する際に困るので)

やり方は下記の通りです。

# mysqlにログインする
$ sudo mysql
  
# mysqlにログインしたら、下記クエリを入力する。(xxxxにはmysqlのrootのパスワードを入力)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxx';
  
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0
  
# 一度mysqlを抜ける
mysql> exit
  
# 今度は下記コマンドで、rootのパスワードでmysqlにログインできるはず
$ mysql -u root -p
Enter password:
  

クライアントソフト(MySQL WorkBench)をインストールする

mysqlのインストールは完了しましたが、DB操作を便利にするために、クライアントソフトをインストールしてみます。
今回はMySQL WorkBenchをインストールします。

ダウンロードは下記サイトで「Micorsoft Windows」を選択すると現れる「Goto Download Page」のリンク先から行えます。
なお*.msiファイルは2つありますが、自分は「web」がつかない方を選択しました。(「web」の方はインストール中に必要なモジュールが不足している、と出て不安だったので)

また*.msiファイル選択後にOracleアカウントへのログインまたはサインアップを選択する画面が表示されますが、下の方にある「No thanks, just start my download」を選択すればダウンロードが始まります。

MySQL :: Download MySQL Workbench


インストーラでは、下記操作を実施します。

  • インストール方法では「Custom」を選択
  • インストールするツールは「MySQL Workbench」のみを選択。
    • mysql自体はWSL2に入れたので、MySQL Workbench以外は一切インストール不要
  • あとは「Install」ボタンでインストールを実行

その後MySQLを起動したら、Connectionで下記の設定を行い「Test Connection」をクリックし、「Successfully made MySQL Connection」と表示されればOKです。

項目 設定値 備考
Connection Name 任意の一意の名前
Connection Method Standard(TCP/IP)
Hostname localhost
Port 3306 mysqlのデフォルトポート
Username root
Password mysqlのrootのパスワード Store in Vault...ボタンをクリックする
Default Schema デフォルトで表示するデータベース名 未設定でも可(後で選択できる)

お疲れさまでした

ここまで完了したら、とりあえず一通りはOKです。
あとはずっとrootで入るのが気になる場合は、専用のユーザー&パスワードを設定し、GRANT ALL PRIVILEGES...で全特権を付与してあげればOKだと思います。

参考:パスワードレベルを後で変更する方法

「インストール手順」で設定したパスワードレベルですが、mysqlインストール後に変更することもできます。

まずmysqlにログインした後、show variables like 'validate_password%';というクエリを実行します。(root権限でログインした方が良いかも) すると下記のような結果が返ります。

その後、変更したい項目に対して、set global <変更したい項目名>=<変更後の値>を実行すればOKです。

mysql> show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.00 sec)
  
# 例:パスワードの長さを最低4文字にしたい場合
mysql> set global validate_password.length=4;
  
# パスワードポリシーのレベルをLOWに変更したい場合
mysql> set global validate_password.policy=LOW;

参考2:A5:SQL Mk-2について

今回クライアントソフトにMySQL WorkBenchを入れましたが、もちろんA5:SQL Mk-2でも全く問題ないです。

私も初めはA5:SQL Mk-2にするつもりだったんですが、なぜか私の環境では何をやってもA5:SQL Mk-2だとmysqlとの接続がエラーになり、それこそmysqlの設定やiptablesファイアウォールやら何やらの各種設定を変えてみたんですが、結局うまくいきませんでした...

ただブログを見る限り、A5:SQL Mk-2でも問題なく動作した例も多数あるので、たまたま私の環境でうまくいかなかっただけで、A5:SQL Mk-2でも全く問題ないと思います。

今回は以上です。