2012/05/08

MySQL WindowsバイナリのZIP版でサービス起動時にシステムエラー

MySQL WindowsバイナリのZIP版をインストールした直後にサービスが起動できなくてちょっとはまったので記録します。




発生状況

ZIP版は以下のような手順でインストールします。
  1. MySQLのサイトからWindowsバイナリのZIP版をダウンロードし解凍し今回は D:\mysql に置いたとします。
  2. システム環境変数のPathに D:\mysql\bin を追加します。
  3. my.ini を適切に記述し、データディレクトリのフォルダなどを適切に配置します。
    (サックリ1行で書いてますけど本当はここが一番神経使うんですよね。キリがないので今回は省略します。)
  4. コマンドプロンプトで「mysqld --install MySQL5」と実行してサービスをインストールします。
    「MySQL5」は任意のサービス名です。以下の文章中の「MySQL5」はすべてここで指定したサービス名に置き換えて読んでください。
    また、my.iniファイルを通常と別の場所に置く場合は「--defaults-file=~」のオプションの指定も必要ですが、ここでは「D:\mysql\my.ini」に置くことを前提として省略しています。
    ここの省略をする/しないによって今回の問題が変わることはありません。
  5. 「Service successfully installed.」と出たらサービスのインストールは成功です。
  6. コマンドプロンプトで「net start MySQL5」と実行してサービスを起動してみます。

エラー発生

「システム エラー2 が発生しました。指定されたファイルが見つかりません。」
おっと。


トラブルシュート

きっとmy.iniの設定ミスです。・・・って指定したフォルダも全部作ってあるし、データディレクトリにデータもコピーしてあるし。
そんなときはMySQLのエラーログです。・・・ってmy.ini をきれいに設定してもmysqlのエラーログが作られません。
よし、そんな時はOSのイベントログ・・・ほら出てる!どれどれ?
「MySQL5 サービスを、次のエラーが原因で開始できませんでした:指定されたファイルが見つかりません。」
・・・と、詳細を見てもなんのファイルが見つからないのかわかりません。

ぐるぐると苦しんだあと、インストールされたサービスのプロパティを見てみると、「実行ファイルのパス」が
"C:\Program Files\MySQL\MySQL Server 5.5\mysqld" MySQL5
になってました。なんでダヨ・・・


原因

どうやらシステム環境変数のPathが通ってるからと言って何も考えずに
「mysqld --install [サービス名]」
してしまうと勝手にMySQLが決めたデフォルトの値が使われるようです。
MSI版じゃなくても!


対処方法

サービスはとりあえずアンインストールします。
「mysqld --remove MySQL5」
(「sc delete MySQL5」とやっても削除できますが、「--remove」の方が安全です。)
「Service successfully removed.」と出たら正しくアンインストールされたので
「CD /D D:\mysql\bin」してから
もう一度「mysqld --install MySQL5」します。
それだけです!


余談

「環境変数のPathへの追加」は設定しないでもMySQLを使うことが可能です。
ただ追加しないと相当不便なのは知っていたので「どうせあとから必要になるから」と思って先に環境変数のPathに追加してしまった結果、落とし穴にはまったわけですね。


おまけ ドライブレターの話

コマンドプロンプトの表示上で、「d:\mysql\bin>」とドライブレターが小文字になっている状態で
上記コマンドでサービスをインストールすると、
「実行ファイルのパス」も「d:\mysql\bin MySQL5」となってしまいどうにも気持ちが悪いので、
「D:\mysql\bin」とドライブレターが大文字になっている状態でインストールしましょう。

5 件のコメント:

  1. ZIP版のMySQLのサービス化で困っており
    非常に助かりました。
    ありがとうございます。

    返信削除
    返信
    1. コメントありがとうございます。
      お役に立てて光栄です。

      削除
  2. 貴重な情報、ありがとうございました。。(_ _;)
    この情報を探し当てるまで試行錯誤2日間を無駄に過ごしてしまいました。

    私のところは、以下のexe名でサービス登録されてました。
    mysqld-sharewere.exe ってなんダヨ...orz

    返信削除
    返信
    1. コメントありがとうございます。お役に立てて光栄です。
      「mysqld-sharewere.exe」で検索してもかなーーり古い情報しか出てこないですね。なんでしょう??

      削除
  3. 助かりました。「どうせあとから必要になるから」と思って…っく

    返信削除