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。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です