◀ 3.

mysqld: Can't change dir のエラー対処 (Windows)

▶
この記事の要点
  • Windows で mysqld を起動したときに出る Can't change dir to '...\data\' (OS errno 2)
  • 原因: mysqld が探しに行ったデータディレクトリ(data フォルダ)が存在しない
  • ZIP 版の MySQL は data フォルダが同梱されていないため、初回は mysqld --initialize で初期化が必須
  • 空の data フォルダを手で作るだけでは起動しない(システムテーブルが無い)
  • インストーラ版なら data は ProgramData 側にある。my.ini の datadir 指定や --defaults-file の付け忘れを確認する

エラー内容

mysqld: Can't change dir to '...\MySQL\MySQL Server X.X\data\' (OS errno 2 - No such file or directory)

多くの場合、続けて [ERROR] Aborting が表示され、mysqld はすぐに終了します。OS errno 2 は Windows の「指定されたファイル(フォルダ)が見つからない」に相当するエラー番号です。

原因: data フォルダが見つからない

mysqld.exe は起動時に、設定ファイルの datadir、指定が無ければ basedir\data(インストール先直下の data)をデータディレクトリとして開きます。そのフォルダが存在しないとこのエラーになります。よくあるパターンは次の通りです。

パターン状況
ZIP 版を展開しただけMySQL 5.7 以降の ZIP アーカイブには data フォルダが入っていない。初期化を実行していない
インストーラ版で mysqld を直接実行インストーラ版のデータは通常 C:\ProgramData\MySQL\MySQL Server X.X\Data にあり、my.ini もそこにある。設定ファイルを指定せずに起動すると、Program Files 側の data を探して失敗する
my.ini のパスの誤りdatadir のフォルダ名の打ち間違い、存在しないドライブを指定している
data フォルダの移動・削除アンインストールや手作業の整理で data が消えた

対処法 1: ZIP 版で初めて使う場合(初期化する)

データディレクトリは「空フォルダ」ではなく、システムテーブル(mysql データベースなど)が入った状態でなければ起動できません。初期化コマンドで作成します。管理者として起動したコマンドプロンプトで実行してください。

  1. MySQL の bin フォルダへ移動する
    cd "C:\Program Files\MySQL\MySQL Server 8.4\bin"
    (フォルダ名は実際のバージョン・展開先に合わせる)
  2. データディレクトリを初期化する
    mysqld --initialize --console
    data フォルダが自動で作られ、root の一時パスワードがコンソールに表示されます。メモしておきます。パスワード無しの root で始めたい開発用途なら --initialize-insecure を使います。
  3. 起動する
    mysqld --console
    「ready for connections」と表示されれば成功です。別のコマンドプロンプトから mysql -u root -p で接続し、一時パスワードを使った場合は最初に ALTER USER でパスワードを変更します。

手順 2 の前に data フォルダを自分で作る場合は、中身が完全に空である必要があります。何かファイルが入っていると初期化は失敗します。

対処法 2: インストーラ版・設定ファイルを使う場合

my.ini で場所を指定しているなら、起動時にその設定ファイルを読み込ませます。

mysqld --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" --console

my.ini 側では、パスを正しく書けているか確認します。Windows のパスはスラッシュで書くか、バックスラッシュを 2 つ重ねると安全です。

[mysqld]
basedir="C:/Program Files/MySQL/MySQL Server 8.0"
datadir="C:/ProgramData/MySQL/MySQL Server 8.0/Data"

普段は Windows サービスとして動かしている場合、コマンドから mysqld を直接起動する必要はありません。「サービス」画面か net start MySQL80(サービス名は環境による)で起動します。

落とし穴

  • 既存データがあるのに初期化しない: 以前のデータが別の場所に残っているなら、--initialize で新しく作るのではなく datadir をそこに向ける。初期化すると空の DB から始まる
  • ProgramData は隠しフォルダ: エクスプローラーで見えない場合は、アドレスバーに直接パスを入力するか、隠しファイルの表示を有効にする
  • 権限不足: Program Files 配下に data を作る場合、管理者権限のないコマンドプロンプトでは書き込みに失敗する
  • バージョン違いの data を流用: 異なるメジャーバージョンの data フォルダをコピーして使うと、別のエラーで起動しないことがある

確認方法

  • data フォルダの中に mysql・performance_schema・sys などのフォルダや ibdata1 があるか
  • data フォルダ内の ホスト名.err(エラーログ)に新しいエラーが出ていないか
  • 接続後に次の SQL で、実際に使われているデータディレクトリを確認できる
SHOW VARIABLES LIKE 'datadir';

関連

Post Share
子ページ

子ページはありません

同階層のページ
  1. 1071 Specified key was too long; max key length is 767 bytes
  2. ERROR 1063 (42000): Incorrect column specifier for column '~'
  3. mysqld: Can't change dir to '...\MySQL\MySQL Server X.X\data\' (OS errno 2 - No such file or directory)
  4. Install/Remove of the Service Denied!
  5. Datetime 型が NULL に見える
  6. Warning: World-writable config file '/etc/mysql/my.cnf' is ignored
  7. ERROR 1698 (28000): Access denied for user 'root'@'localhost'
  8. Exception: Wrong MySQL configuration
  9. [Warning] TIMESTAMP with implicit DEFAULT value is deprecated.
  10. ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
  11. ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
  12. Incorrect column specifier for column 'カラム名'
  13. BLOB/TEXT column 'description' used in key specification without a key length
  14. ERROR: /bin/sh: mysql_config: コマンドが見つかりません
  15. Host '...' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
  16. CSVエクスポート時に「ERROR 1045 (28000): Access denied for user 'username'@'localhost'」エラーが表示される
  17. Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT
  18. SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value: ~