My開発メモ

XAMPPのMariaDBをWindowsのサービスに登録して、MariaDBを自動で終了させる

XAMPPを使っていると、mysql.dbがよく壊れることがある。
これはどうやら、mysqlを停止せずにWindowsを終了させることで起こるみたい。

そこで、Windowsのサービスに登録したら、Windowsはシステムの終了時に
サービスを終了させてくれる(にちがいない 笑)

追記 (2024.04.03)

下に書いている方法ではなく、XAMPPコントロールパネルのボタンをクリックすることで、
簡単に service に登録できることがわかった。(^_^;

このパネルの左の “Modules Service” の ☓印 をクリックすることで、以下のようにサービスに登録できた。

ただ、C:\xampp\mysql\installservice.bat の中の 「C:\xampp\mysql\bin\mysqld」のままで
うまくいくかどうかは、やってみないとわからない。
下に書いているように、「C:\xampp\mysql\bin\mysqld.exe」とする必要があるかもしれないし、
必要ないかもしれない。

以前に記述した内容

MariaDBをサービスに追加する手順

(1) 管理者権限でコマンドプロンプトを立ち上げる。
(2) > cd c:\xampp\mysql
(3) > mysql_installservice.bat

これでサービスに登録され、Windowsの起動時に自動的に MariaDB が動作する。

サービスから削除したいときは、

mysql_uninstallservice.bat を実行すればよい。

XAMPPコントロールパネルを見てみる

XAMPPコントロールパネルがすでに起動している場合は、”Quit” として
いったん終了させ、コントロールパネルを起動しなおす。

MySQLが起動しているはずである。
このコントロールパネルから制御できるのは変わらない。

なにやらエラーが・・・

ぼくの場合、次のようなエラーが出ていた。

MySQL Service detected with wrong path
Change XAMPP MySQL and Control Panel settings or
Uninstall/disable the other service manually first
Found Path: C:\xampp\mysql\bin\mysqld --defaults-file=C:\xampp\mysql\bin\my.ini mysql
Expected Path: c:\xampp\mysql\bin\mysqld.exe --defaults-file=c:\xampp\mysql\bin\my.ini mysql
Problem detected!
Port 3306 in use by "C:\xampp\mysql\bin\mysqld --defaults-file=C:\xampp\mysql\bin\my.ini mysql"!
MySQL WILL NOT start without the configured ports free!
You need to uninstall/disable/reconfigure the blocking application
or reconfigure MySQL and the Control Panel to listen on a different port
(グーグル翻訳)
MySQL サービスが間違ったパスで検出されました
XAMPP MySQL とコントロール パネルの設定を変更するか、
最初に他のサービスを手動でアンインストール/無効化します
見つかったパス: C:\xampp\mysql\bin\mysqld --defaults-file=C:\xampp\mysql\bin\my.ini mysql
予期されるパス: c:\xampp\mysql\bin\mysqld.exe --defaults-file=c:\xampp\mysql\bin\my.ini mysql
問題が検出されました!
ポート 3306 は「C:\xampp\mysql\bin\mysqld --defaults-file=C:\xampp\mysql\bin\my.ini mysql」によって使用されています。
MySQL は、設定されたポートが解放されないと起動しません。
ブロックしているアプリケーションをアンインストール/無効化/再設定する必要があります
または、別のポートでリッスンするように MySQL とコントロール パネルを再構成します。

“MySQL Service detected with wrong path xampp” で検索してみると、以下の
サイトが見つかった。

XAMPPの環境設定でFound Path: ” ” -k runservice Expected Path: ” ” -k runservice とエラーが出た時の対処法

このページでは、以下の対処で解決できたとあるが・・・

(1) 管理者権限でコマンドプロンプトを起動
(2) c:\Windows\System32> sc delete MySQL
[SC] DeleteService SUCCESS

これを実行してみたら、サービスからmysqlを削除することができたが、
それだけのことで、上記のエラーは消えなかった。

レジストリを編集したらエラー解消

上記のページで紹介されているページを見てみた。

Apache Service detected with wrong path

ここに以下のようなことが書かれていた。

I just encountered the exact same problem a few days ago and was having a hard time finding the fix, but I finally able to fix it.

Here's my fix:

    1. Win + R and type regedit then enter
    3. Open this directory HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Apache2.4
    3. Right-click on the "ImagePath" and choose "Modify"
    4. Change the Value Data field with your current installed path of apache in XAMPP
    5. In my case, the value is "D:\apps\xampp\apache\bin\httpd.exe" -k runservice
    6. For the question poster case, change the value to "C:\xampp\apache\bin\httpd.exe" -k runservice

I know it's an old post, but some people might still need this in the future. I hope it can help :)
(1) "Win + R" で regedit と入力し、レジストリエディタを起動する。
(2) "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mysql" を開く。
(3) "ImagePath" をダブルクリックして編集する。
(4) エラーに出ていた "Expected Path" の値にする。

ぼくの場合は、以下のように出ていた。

Found Path: C:\xampp\mysql\bin\mysqld --defaults-file=C:\xampp\mysql\bin\my.ini mysql
Expected Path: c:\xampp\mysql\bin\mysqld.exe --defaults-file=c:\xampp\mysql\bin\my.ini mysql

ちがっているのは、”mysqld” と “mysqld.exe” なので、
レジストリの”ImagePath”の値を “mysqld.exe” にした。(.exeを追加しただけ)

これで、コントロールパネルに表示されていたエラーは消えた。

レジストリを編集しなくても、これでいいのでは!?

上記では、レジストリを編集したが、以下のファイルを修正することで、レジストリをさわらなくても、うまくいくはず。

C:\xampp\mysql\mysql_installservice.bat

28 :MainNT
29 echo Installing MySQL as an Service 
30 copy "%cd%\bin\my.cnf" /-y %windir%\my.ini
31 bin\mysqld --install mysql --defaults-file="%cd%\bin\my.ini"
32 echo Try to start the MySQL deamon as service ... 
33 net start MySQL 

これの 31行目の “bin\mysqld” を “bin\mysqld.exe” に変更すればよい。

そして、この mysql_installservice.bat を管理者権限で実行すれば、エラーは出ない。

ここで注意
mysql_installservice.bat を管理者権限で実行するには、以下の手順でおこなう必要がある。

  1. コマンドプロンプトを管理者権限で起動する。
  2. > cd C:\xampp\mysql <RETURN>
  3. > mysql_installservice.bat <RETURN>

C:\xampp\mysql フォルダの mysql_installservice.bat を右クリックして ”管理者権限で実行” とすると、うまくいかない。

ちなみに、同じフォルダにある “mysql-uninstallservice.bat”は、

14 bin\mysqld.exe --remove mysql

となっていたので、こちらは編集しなくても大丈夫。

要するに、Windowsは、拡張子に”.exe”がついている実行ファイルをサービスに登録しているってことね。

カテゴリー: mariadb, memo, mysql, XAMPP

タグ: auto stop, mariadb, mysql, service, xampp, サービス, 自動停止

カウント: 206