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のデータベースがぶっ壊れることは無いはずです!