
開発用のWindows 11上で稼働していた MySQL 8.0 の環境を別サーバへ移行するため、同じバージョンのMySQLサーバをインストールして以下のディレクトリを旧Windows機から新Windows機コピーした。
C:\ProgramData\MySQL\MySQL Server 8.0
その後、サービス一覧から MySQL80 を起動しようとすると、以下のエラーが表示された。
サービスは起動直後に停止してしまう状態だった。
ローカル コンピューター上の MySQL80 サービスは起動して停止しました。サービスの中には、ほかのサービスやプログラムで使用されていない場合は自動的に停止するものがあります。
最初に確認したこと
まず管理者権限で以下を実行した。
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --console
すると次のエラーが表示された。
MySQL がデフォルトの data ディレクトリを探しており、移植したデータディレクトリを参照できていないことが判明した。
Failed to set datadir to
'C:\Program Files\MySQL\MySQL Server 8.0\data\'
(OS errno: 2 - No such file or directory)
my.ini を指定して起動
次に設定ファイルを明示的に指定して起動した。
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" --console
すると今度は正常に起動した。
InnoDB initialization has ended.
ready for connections.
Version: '8.0.43'
つまり、下記のことが確認できた。
- データファイルは壊れていない
- InnoDBも正常
- my.iniも正しく読めている
サービス設定を確認
サービス設定を確認した。
sc qc MySQL80
結果は以下。サービスは NetworkService アカウントで実行されていた。
SERVICE_NAME: MySQL80
BINARY_PATH_NAME :
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe"
--defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini"
MySQL80
SERVICE_START_NAME :
NT AUTHORITY\NetworkService
原因
コンソール起動では成功するのにサービス起動では失敗する。
この差から権限問題を疑った。
別サーバからフォルダをコピーすると、NTFSアクセス権が元サーバのSIDを引き継ぐ場合がある。
今回コピーしたディレクトリには NetworkService の権限が付与されていなかった。
そのため、下記のような状態になっていた。
- 管理者ユーザー → アクセス可能
- NetworkService → アクセス不可
対応方法
管理者権限のコマンドプロンプトで以下を実行した。
icacls "C:\ProgramData\MySQL\MySQL Server 8.0" /grant "NT AUTHORITY\NETWORK SERVICE:(OI)(CI)F" /T
実行結果。無事に処理されたっぽい。
399 個のファイルが正常に処理されました。
0 個のファイルを処理できませんでした
その後サービスを起動。
net start MySQL80
結果、無事起動した。
MySQL80 サービスを開始します。
MySQL80 サービスは正常に開始されました。
学んだこと
MySQL のデータディレクトリを物理コピーで移行する場合は、データファイルだけでなく NTFS 権限も重要である。
特に Windows 環境では、
NT AUTHORITY\NetworkService
または
NT AUTHORITY\SYSTEM
に必要な権限が付与されているか確認する必要がある。
チェックポイント
移行後に MySQL サービスが起動しない場合は次を確認する。
1. サービス設定
sc qc MySQL80
2. 設定ファイルを指定して起動
mysqld.exe --defaults-file=... --console
3. エラーログ確認
C:\ProgramData\MySQL\MySQL Server 8.0\Data\*.err
4. NTFS権限確認
icacls "C:\ProgramData\MySQL\MySQL Server 8.0"
5. NetworkServiceへの権限付与
icacls "C:\ProgramData\MySQL\MySQL Server 8.0" /grant "NT AUTHORITY\NETWORK SERVICE:(OI)(CI)F" /T
まとめ
今回の原因は MySQL のデータ破損やバージョン差異ではなく、コピー後の NTFS アクセス権だった。
コンソール起動では正常なのにサービス起動だけ失敗する場合は、まずサービス実行アカウントの権限を疑うと解決が早い。
