Windows に MariaDB を入れて、WSL2 から利用
WSL2 上でWebアプリを開発するのに、私は Windows 上のDBを使うようにしています。Docker とかコンテナ使ってやるのが一般的かもしれませんが、できるだけシンプルにしたいためです。
ということで、Windows 11 上に MariaDB をインストールして、WSL2 の Ubuntu 22.04 からアクセスできるようにしました。
MariaDB のインストール
https://mariadb.org/ から msi ファイルをダウンロードしてインストールします。
現時点では 10.11.7 が long-term release でしたが、Windows 用インストーラーがなかったので、Windows 用インストーラーが用意されている 11.3.1 RC をダウンロードしました。
msi ファイルを実行し、root のパスワード、デフォルト charactor set を UTF-8 にするにチェックし、他はデフォルトのままインストールします。
インストールされた HeidiSQL (クライアントアプリ)か、「MySQL Client (MariaDB 11.3 (x64))」でDBに接続してみると、無事インストールされたことが確認できます。
Enter password: ********
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 13
Server version: 11.3.1-MariaDB mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.001 sec)
MariaDB [(none)]>
DB作成
DB作成は create database ステートメントで行いますので、シンタックスを確認します。
MariaDB [(none)]> help create database;
Name: 'CREATE DATABASE'
Description:
Syntax
------
CREATE [OR REPLACE] {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[create_specification] ...
create_specification:
[DEFAULT] CHARACTER SET [=] charset_name
| [DEFAULT] COLLATE [=] collation_name
| COMMENT [=] 'comment'
Description
-----------
:
文字コード(character set)は utf8mb4 一択です。日本語使うなら。
utf8mb4 を確認してみます。
MariaDB [(none)]> show character set like 'utf8mb4';
+---------+---------------+--------------------+--------+
| Charset | Description | Default collation | Maxlen |
+---------+---------------+--------------------+--------+
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 |
+---------+---------------+--------------------+--------+
1 row in set (0.000 sec)
デフォルトの collation (照会順序) は utf8mb4_general_ci です。大文字小文字を区別しないので、変更したい場合は他の collation を指定します。
いろいろあるようですが、utf8mb4_general_ci か utf8mb4_bin の2択だと思います。通常は utf8mb4_general_ci でよいかと。
念のため utf8mb4 の collation を確認してみました。ほんとたくさんありますね。
MariaDB [(none)]> show collation where charset like 'utf8mb4';
+------------------------------+---------+------+---------+----------+---------+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+------------------------------+---------+------+---------+----------+---------+
| utf8mb4_general_ci | utf8mb4 | 45 | Yes | Yes | 1 |
| utf8mb4_bin | utf8mb4 | 46 | | Yes | 1 |
| utf8mb4_unicode_ci | utf8mb4 | 224 | | Yes | 8 |
| utf8mb4_icelandic_ci | utf8mb4 | 225 | | Yes | 8 |
| utf8mb4_latvian_ci | utf8mb4 | 226 | | Yes | 8 |
| utf8mb4_romanian_ci | utf8mb4 | 227 | | Yes | 8 |
| utf8mb4_slovenian_ci | utf8mb4 | 228 | | Yes | 8 |
| utf8mb4_polish_ci | utf8mb4 | 229 | | Yes | 8 |
| utf8mb4_estonian_ci | utf8mb4 | 230 | | Yes | 8 |
| utf8mb4_spanish_ci | utf8mb4 | 231 | | Yes | 8 |
| utf8mb4_swedish_ci | utf8mb4 | 232 | | Yes | 8 |
| utf8mb4_turkish_ci | utf8mb4 | 233 | | Yes | 8 |
| utf8mb4_czech_ci | utf8mb4 | 234 | | Yes | 8 |
| utf8mb4_danish_ci | utf8mb4 | 235 | | Yes | 8 |
| utf8mb4_lithuanian_ci | utf8mb4 | 236 | | Yes | 8 |
| utf8mb4_slovak_ci | utf8mb4 | 237 | | Yes | 8 |
| utf8mb4_spanish2_ci | utf8mb4 | 238 | | Yes | 8 |
| utf8mb4_roman_ci | utf8mb4 | 239 | | Yes | 8 |
| utf8mb4_persian_ci | utf8mb4 | 240 | | Yes | 8 |
| utf8mb4_esperanto_ci | utf8mb4 | 241 | | Yes | 8 |
| utf8mb4_hungarian_ci | utf8mb4 | 242 | | Yes | 8 |
| utf8mb4_sinhala_ci | utf8mb4 | 243 | | Yes | 8 |
| utf8mb4_german2_ci | utf8mb4 | 244 | | Yes | 8 |
| utf8mb4_croatian_mysql561_ci | utf8mb4 | 245 | | Yes | 8 |
| utf8mb4_unicode_520_ci | utf8mb4 | 246 | | Yes | 8 |
| utf8mb4_vietnamese_ci | utf8mb4 | 247 | | Yes | 8 |
| utf8mb4_croatian_ci | utf8mb4 | 608 | | Yes | 8 |
| utf8mb4_myanmar_ci | utf8mb4 | 609 | | Yes | 8 |
| utf8mb4_thai_520_w2 | utf8mb4 | 610 | | Yes | 4 |
| utf8mb4_general_nopad_ci | utf8mb4 | 1069 | | Yes | 1 |
| utf8mb4_nopad_bin | utf8mb4 | 1070 | | Yes | 1 |
| utf8mb4_unicode_nopad_ci | utf8mb4 | 1248 | | Yes | 8 |
| utf8mb4_unicode_520_nopad_ci | utf8mb4 | 1270 | | Yes | 8 |
+------------------------------+---------+------+---------+----------+---------+
33 rows in set (0.001 sec)
ということで、開発用のDBを作成します。
MariaDB [(none)]> create database rsv character set = 'utf8mb4';
Query OK, 1 row affected (0.001 sec)
ユーザー作成
続いて、DBに接続するユーザーを作成します。
MariaDB [(none)]> create user 'rsv'@'localhost' identified by '********';
Query OK, 0 rows affected (0.008 sec)
先ほど作成したDBに対して権限を付与します。
MariaDB [(none)]> grant all on rsv.* to 'rsv'@'localhost';
Query OK, 0 rows affected (0.007 sec)
確認します。
MariaDB [(none)]> show grants for rsv@localhost;
+------------------------------------------------------------------------------------------------------------+
| Grants for rsv@localhost |
+------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `rsv`@`localhost` IDENTIFIED BY PASSWORD '*35291A1100E2B0EF6559EC65E5E0F70CCB2D1BFF' |
| GRANT ALL PRIVILEGES ON `rsv`.* TO `rsv`@`localhost` |
+------------------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)
Windows の PowerShell から接続してみます。
PS C:\> mysql -u rsv -h localhost -p rsv
Enter password: *******
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 15
Server version: 11.3.1-MariaDB mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [rsv]> quit
Bye
PS C:\>
ということで、Windows 上では rsv ユーザで、開発用DB rsv にアクセスできるようになりました。
次に、WSL から Windows の MariaDB にアクセスしてみます。
$ mysql
Command 'mysql' not found, but can be installed with:
sudo apt install mysql-client-core-8.0 # version 8.0.35-0ubuntu0.22.04.1, or
sudo apt install mariadb-client-core-10.6 # version 1:10.6.12-0ubuntu0.22.04.1
そもそも mysql がなかったので、インストールします。
$ sudo apt install mariadb-client-core-10.6
再度接続してみます。Windows のホスト名は `hostname`.local で指定できます。
$ mysql -u rsv -h `hostname`.local -p rsv
Enter password:
ERROR 1130 (HY000): Host '172.27.3.168' is not allowed to connect to this MariaDB server
localhost からしか許可していないので上記のように拒否されました。MariaDB のエラーログは以下。
2024-02-16 14:35:27 16 [Warning] IP address '172.27.3.168' could not be resolved: そのようなホストは不明です。
2024-02-16 14:35:27 16 [Warning] Aborted connection 16 to db: 'unconnected' user: 'unauthenticated' host: '172.27.3.168' (This connection closed normally without authentication)
ということで、WSL2 からアクセスできるように、全プライベートアドレスからのアクセスを許可します。
なお、MySQL 8.0.23 からは CIDR形式のサブネットが利用可能なようですが、MariaDB 11.3.1 では、 create user できますが、アクセスできなかったので、サブネットマスクを指定しています。
MariaDB [(none)]> create user 'rsv'@'172.16.0.0/255.240.0.0' identified by '******';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> grant all on rsv.* to 'rsv'@'172.16.0.0/255.240.0.0';
Query OK, 0 rows affected (0.007 sec)
MariaDB [(none)]> create user 'rsv'@'192.168.0.0/255.255.0.0' identified by '******';
Query OK, 0 rows affected (0.007 sec)
MariaDB [(none)]> grant all on rsv.* to 'rsv'@'192.168.0.0/255.255.0.0';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> create user 'rsv'@'10.0.0.0/255.0.0.0' identified by '******';
Query OK, 0 rows affected (0.007 sec)
MariaDB [(none)]> grant all on rsv.* to 'rsv'@'10.0.0.0/255.0.0.0';
Query OK, 0 rows affected (0.001 sec)
もう一度、WSL からアクセスしてみます。
$ mysql -u rsv -h `hostname`.local -p rsv
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 25
Server version: 11.3.1-MariaDB mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [rsv]> quit
Bye
$
はい、OK。