XamppのMySQLデータベースが壊れたので対策を考える

WindowsPCで動作しているXamppのMySQLが以下のログを吐いて立ち上がりません。

2023-04-26 16:49:12 0 [Note] InnoDB: Initializing buffer pool, total size = 16M, instances = 1, chunk size = 16M
2023-04-26 16:49:12 0 [Note] InnoDB: Completed initialization of buffer pool
2023-04-26 16:49:12 0 [Note] InnoDB: 128 out of 128 rollback segments are active.
2023-04-26 16:49:12 0 [Note] InnoDB: Creating shared tablespace for temporary tables
2023-04-26 16:49:12 0 [Note] InnoDB: Setting file 'C:\xampp7.4\mysql\data\ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
2023-04-26 16:49:12 0 [Note] InnoDB: File 'C:\xampp7.4\mysql\data\ibtmp1' size is now 12 MB.
2023-04-26 16:49:12 0 [Note] InnoDB: Waiting for purge to start
2023-04-26 16:49:12 0 [Note] InnoDB: 10.4.19 started; log sequence number 83856261; transaction id 94540
2023-04-26 16:49:12 0 [Note] InnoDB: Loading buffer pool(s) from C:\xampp7.4\mysql\data\ib_buffer_pool
2023-04-26 16:49:12 0 [Note] Plugin 'FEEDBACK' is disabled.
2023-04-26 16:49:12 0 [Note] Server socket created on IP: '::'.

DBの修復をいろいろ試したのですが諦めて初期化しました。

DBが壊れたのはおそらくMySQLを停止することなくPCをシャットダウンしていたのが原因な気がします。Linuxサーバでもいきなり電源が落ちるとデータもハードもぶっ壊れる事が多いので。


Windowsのシャットダウン前にMySQLを停止する

Xamppのコントロールパネルから「Stop」ボタンを押せば良いのですが、面倒なのでWindowsのバッチファイルでMySQLを停止した後にWindowsをシャットダウンするコマンドを作ってみました。

@echo off
@echo;

::MYSQL停止

cd /D %~dp0

echo MySQL shutdown ...
cmd.exe /C start "" /MIN call "C:\xampp7.4\killprocess.bat" "mysqld.exe"
if not exist mysql\data\%computername%.pid GOTO apache
echo Delete %computername%.pid ...
del mysql\data\%computername%.pid

::APACHE停止
:apache

echo Apache shutdown ...
cd /D %~dp0
cmd.exe /C start "" /MIN call "C:\xampp7.4\killprocess.bat" "httpd.exe"
if not exist apache\logs\httpd.pid GOTO shutdown
del apache\logs\httpd.pid

::シャットダウン実行
:shutdown

@echo;
@echo Shutdown PC Now? (y/n)

SET /P input=

if "%input%"=="y" (
	GOTO poweroff
) else ( 
	GOTO end
)

:poweroff

shutdown.exe /s /f /t 10

:end

この内容を「シャットダウン.bat」として保存します。

ダブルクリックで実行すると「MySQL」と「Apache」をシャットダウンした後に、WindowsPCをシャットダウンしますか?と聞いてくるので「y」を押して「エンター」を押すと強制シャットダウンされます。

※「C:\xampp7.4」は各自のインストール環境に書き換えてください。


起動しているアプリケーションは強制終了されるので、全てのアプリを手動で閉じてから実行するのがよいです。

これでMySQLのデータベースがぶっ壊れることは無いはずです!