MariaDB講座 / WindowsにMariaDBをインストールして起動する

WindowsではMariaDB ServerのMSIを使い、Windowsサービスとしてサーバーを動かせます。サービス名、ポート、管理者パスワードを記録し、接続とSQLの両方が成功することを確認してから実習を始めます。

既存のサービスとポートを確認する

対象は新規の学習環境として使う64ビットWindows 11です。インストールやサービス操作には管理者権限が必要になる場合があります。MariaDBやMySQLがすでにある場合は、既存環境の更新と、独立した実習用インスタンスの作成を区別してください。

PowerShellで現在の状態を読み取ります。表示名と実際のサービス名Nameが違うこともあります。

Get-Service | Where-Object { $_.Name -match 'MariaDB|MySQL' }
Get-NetTCPConnection -State Listen -LocalPort 3306 -ErrorAction SilentlyContinue

新しいパソコンで結果が空なら、該当サービスや待ち受けが見つからない状態です。見つかった場合は用途とデータを調べ、学習のために勝手に停止したりデータ領域を流用したりしません。別インスタンスには異なるサービス名と、競合しないポートが必要です。

MSIとインストールする部品を選ぶ

公式ダウンロードページで、サポート中の安定版MariaDB ServerのWindows x64 MSIを選びます。プレビュー版を初心者向けの基準にはしません。MSIを実行してライセンスを確認し、Custom Setupでサーバー、クライアント、データベースインスタンスに必要な部品を選びます。

インストール先とデータディレクトリを記録します。ここではC:\Program Files\MariaDB 12.3\を使いますが、実際の場所に読み替えてください。HeidiSQLなどのGUIはこの実習の必須条件ではありません。画面の名称は版によって変わるため、既存インスタンスのアップグレードを意図せず選ばないよう、対象を確認します。

管理者・サービス・接続の設定を決める

設定 ローカル実習での選び方
rootパスワード 十分に強い値を選び、安全な場所で管理する
rootの外部接続 この実習では有効にしない
匿名アカウント 有効にしない
Windowsサービス 登録して実際のサービス名を記録する
TCPポート 空いていれば3306。別の値なら全接続命令も変更する
文字コード インストーラーのUTF-8設定とは別に、SQLでutf8mb4を指定する

rootはMariaDBの管理者であり、Windowsのログインとは別です。127.0.0.1への接続のために外部ネットワークへポートを公開する必要はありません。完了画面だけで起動成功と判断せず、エラーがあれば内容を記録します。

サービスを起動しSQLを実行する

サービス名がMariaDBの場合のPowerShell例です。異なる名前で作成したなら置き換えます。

Get-Service -Name MariaDB
Start-Service -Name MariaDB
Get-Service -Name MariaDB

最後の状態がRunningであることを確認します。MariaDB Command Promptには実行ファイルのパスが設定されている場合があります。通常のPowerShellでは、次のようにフルパスを指定できます。

& "C:\Program Files\MariaDB 12.3\bin\mariadb.exe" --protocol=tcp --host=127.0.0.1 --port=3306 --user=root --password --default-character-set=utf8mb4

先頭の&は引用符で囲まれた実行ファイルを呼び出します。--passwordに値を付けないと対話的に入力でき、命令文に秘密を残しません。接続後に実行します。

SELECT VERSION() AS server_version;
SELECT 1 + 1 AS result;

サーバーバージョンと計算結果2が返れば、接続先がSQLを処理できています。クライアントが開いたことだけでは確認になりません。

実習用アカウントを作成する

rootは初期設定に使い、SQL実習はcourse_userで行います。まず同名アカウントが存在しないか確認します。

SELECT User, Host FROM mysql.user WHERE User = 'course_user';

既存ならHostと用途を確認し、無条件で削除・再作成しません。新規作成する場合はパスワードの仮値を自分の値に置き換え、管理者接続で実行します。

CREATE USER 'course_user'@'127.0.0.1'
  IDENTIFIED BY 'CHANGE_THIS_TO_YOUR_OWN_PASSWORD';

GRANT ALL PRIVILEGES ON shopcourse.*
  TO 'course_user'@'127.0.0.1';

SHOW GRANTS FOR 'course_user'@'127.0.0.1';

ユーザー名とHostの組がアカウントです。明示的に127.0.0.1へTCP接続するため、そのHostのアカウントを使います。権限はshopcourse.*に限り、全データベースや他人への権限付与は許可しません。データベース作成前にこの範囲へGRANTすることもできます。本番アプリケーションには作業内容に応じてさらに狭い権限を選びます。

EXIT;で切断し、端末から接続し直します。

mariadb --protocol=tcp --host=127.0.0.1 --port=3306 --user=course_user --password --default-character-set=utf8mb4 --abort-source-on-error

接続後、実際に権限判定に使われたアカウントを調べます。

SELECT CURRENT_USER() AS privilege_account;

course_user@127.0.0.1を確認します。CREATE USERとGRANTを使ったこの手順に、追加のFLUSH PRIVILEGESは不要です。ファイル実行はクライアントの使い方で確認できます。

起動・接続の問題を切り分ける

起動しない場合はサービス名、ポート競合、そのインスタンスのエラーログを調べます。命令が見つからなければ実際のmariadb.exeのフルパスを使います。Cannot connectならサービス・ホスト・ポート、Access deniedならアカウントのHost・パスワード・認証方法を確認します。この二つは同じ障害ではありません。

my.iniを変える前には元のファイルと場所を保存します。一度に一項目だけ変更して対象サービスを再起動し、失敗したら元のファイルに戻します。サービス停止、アンインストール、データ削除は別々の操作です。接続できないことを理由にデータディレクトリを削除しないでください。接続障害の確認手順でも段階別に調べられます。

関連する公式リファレンス