WindowsのMariaDBで"ERROR 1045 (28000): Access denied for user 'root'@'localhost'"が出た際の対処を共有

# はじめに

MySQL/MariaDBの初回実行あるあるにハマってしまった上にWindows版なので対応策に一苦労したので、参考にした動画をもとに手順を書きました。

# 環境

当方の環境は以下で行っております。

```text
OS: Windows10 64bit 21H2
MariaDB: 10.9
サービス名: MariaDB
```

# 背景

諸般の事情でWindows版MariaDB(10.9)をインストールすることになり、インストール自体は滞りなく行えたものの、`mysql`コマンドを打ってみると

```text
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
```

と出てしまい、右往左往してしまったことから始まります。

# 情報を漁ってみると…

というわけで、神様仏様Google様にお願い申し上げたのですが…

**LinuxかMacOSXでの話しか無い**

しかも、

**Windows版MariaDBにはmysqld_safeコマンドなんてねえYO!**

というやさぐれてしまいたくなる状態に。

唯一見つかった情報が、以下のYoutubeの動画。

<iframe width="560" height="315" src="https://www.youtube.com/embed/8l2NUwm-OIk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

この動画のとおりに実行すると無事にAccess deniedから開放されました。

# 手順

ここから忘備録です。

## 1.mysql-init.txtを作ってフルパスを記録

適当なディレクトリに`mysql-init.txt`を作成し、以下の内容を記載して保存します。

```sql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
```

今回は、Documentsフォルダに保存しておきます。

フルパスは`C:\Users\hoge\Documents\mysql-init.txt`とします。
フルパスをどこかに記録しておきます。

## 2.MariaDBのmy.iniの場所を確認してフルパスを記録

エクスプローラーなどを使って`my.ini`の場所を調べます。
場所はインストール時に指定した、データを保存するディレクトリです。

例えば、データが"C:\MariaDB\10.9"にあれば、

```
C:\MariaDB\10.9\my.ini
```

がフルパスですので、これをコピーしてどこかに記録しておきます。

## 3.コマンドプロンプトを管理者権限で開く

MariaDBをインストールした際、Windowsのスタートメニューに「`Command Prompt (MariaDB 10.9 (x64))`」という項目があるので、それを右クリックするとポップアップメニューが開きます。その中の、

```text
その他 > 管理者として実行
```

を選ぶと、管理者権限でコマンドプロンプトが開きます。
（いちいちパスをはらなくてもmysqlコマンドなどが実行できるので便利！）

## 4.MariaDBのサービスを停止する

動画ではサービスマネージャを使用していますが、コマンドラインのほうが手間いらずです。
先程開いたコマンドプロンプトで以下のコマンドを入力してEnterを押します。

```bat
net stop MariaDB
```

(当方は、サービス名を標準の`MariaDB`としています。別の名前にしている場合は、逐次それに置き換えてください)

## 5.mysqldコマンドを直接実行する

ここが正念場です。落ち着いて。

先程作った`mysql-init.txt`と`my.ini`を指定してmysqldを起動します。

```bat
mysqld --defaults-file="C:\MariaDBData\10.9\my.ini" --init-file="C:\Users\hoge\Documents\mysql-init.txt" --console
```

すると、以下のようなメッセージが現れます。

```text
2022-11-04 10:42:41 0 [Note] mysqld (server 10.9.3-MariaDB) starting as process 2576 ...
2022-11-04 10:42:41 0 [Note] InnoDB: Compressed tables use zlib 1.2.12
2022-11-04 10:42:41 0 [Note] InnoDB: Number of transaction pools: 1
2022-11-04 10:42:41 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
2022-11-04 10:42:41 0 [Note] InnoDB: Initializing buffer pool, total size = 3.992GiB, chunk size = 63.875MiB
2022-11-04 10:42:41 0 [Note] InnoDB: Completed initialization of buffer pool
2022-11-04 10:42:41 0 [Note] InnoDB: File system buffers for log disabled (block size=512 bytes)
2022-11-04 10:42:41 0 [Note] InnoDB: 128 rollback segments are active.
2022-11-04 10:42:41 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically writing the file full; Please wait ...
2022-11-04 10:42:41 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.
2022-11-04 10:42:41 0 [Note] InnoDB: log sequence number 46774; transaction id 14
2022-11-04 10:42:41 0 [Note] Plugin 'FEEDBACK' is disabled.
2022-11-04 10:42:41 0 [Note] InnoDB: Loading buffer pool(s) from M:\MariaDBData\10.9\ib_buffer_pool
2022-11-04 10:42:41 0 [Note] Server socket created on IP: '::'.
2022-11-04 10:42:41 0 [Note] Server socket created on IP: '0.0.0.0'.
2022-11-04 10:42:41 0 [Note] InnoDB: Buffer pool(s) load completed at 221104 10:42:41
2022-11-04 10:42:41 0 [Note] mysqld: ready for connections.
Version: '10.9.3-MariaDB'  socket: ''  port: 3306  mariadb.org binary distribution
2
```

ここにエラーメッセージがなければ実行できています。

終了は`Ctrl-C`を数回叩きます。

万が一、以下のエラーが出た際は、一旦終了して`mysql-init.txt`を見直して修正してください。

```text
ERROR: 1105  Bootstrap file error, return code (0). Nearest query: 'ALTER USER (略)
```

動画では、不要になったmysql-init.txtを削除していますが、再インストールする際に必要になってくると考えて削除せずにそのまま残しています。

## 6.MariaDBサービスを起動する。

終了していたMariaDBサービスを起動します。

```bat
net START MariaDB
```

## 7.mysqlコマンドを起動する

これで、問題なく`mysql`コマンドを叩けます。

```bat
mysql -u root -p
```

```text
(略)>mysql -u root -p
Enter password: ********
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.9.3-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)]> exit
```

無事、起動できました。
おめでとうございます！

# 最後に

MariaDBをWindowsで動かしている人って少数なのかなぁ…
何はともあれ、良きMariaDBライフを！