Skip to content

DockerでMySQL 8.4を起動する際の「unknown variable」エラーの解決

問題説明

Docker Composeを使用してMySQL 8.4コンテナを起動しようとすると、次のエラーが発生します:

unknown variable 'default-authentication-plugin=mysql_native_password'

このエラーはDocker Compose設定ファイル(docker-compose.yml)とMySQL設定ファイル(my.cnf)の両方でdefault-authentication-pluginパラメータが指定されている場合に発生します。MySQL 8.4では、このパラメータ名が変更されたため、従来の設定を使用すると互換性エラーが生じます。

エラーが発生する典型的な設定例:

docker-compose.yml(問題のある部分):

yaml
command: ["mysqld", "--default-authentication-plugin=mysql_native_password"]

my.cnf(問題のある部分):

ini
[mysqld]
default-authentication-plugin=mysql_native_password

解決方法

MySQL 8.4では認証プラグイン設定のパラメータ名が変更されています。以下の2ステップで修正できます。

ステップ1: docker-compose.ymlの修正

commandラインで使用しているパラメータ名を新しい形式に変更します:

yaml
db:
    image: mysql:8.4
    # 変更前: 古いパラメータ名
    # command: ["mysqld", "--default-authentication-plugin=mysql_native_password"]
    # 変更後: 新しいパラメータ名を使用
    command: ["mysqld", "--mysql-native-password=ON"]
    restart: unless-stopped
    ports:
        - 3306:3306
    environment:
        MYSQL_RANDOM_ROOT_PASSWORD: yes
        MYSQL_AUTHENTICATION_PLUGIN: mysql_native_password
        MYSQL_DATABASE: ${MYSQL_DATABASE:-learn}
        MYSQL_USER: ${MYSQL_USER:-learn}
        MYSQL_PASSWORD: ${MYSQL_PASSWORD:-test2024}
    volumes:
        - mysql_dev:/var/lib/mysql
        - ./docker/laravel/config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    # ヘルスチェック設定は省略...

ステップ2: my.cnf設定ファイルの修正

設定ファイルから互換性のないパラメータを削除(またはコメントアウト)します:

ini
[mysqld]
mysql_native_password=ON
# 削除: MySQL 8.4で認識されないパラメータ
# default-authentication-plugin=mysql_native_password
general_log = 0
general_log_file = /var/lib/mysql/general.log
default_time_zone='+00:00'

TIP

MySQLの公式ドキュメントでサポートされているパラメータを確認するには、コンテナ内で次のコマンドを実行します:

bash
docker-compose exec db mysqld --verbose --help

変更の理由

MySQL 8.4では認証プラグインの設定方法が変更されました:

  • default-authentication-pluginパラメータは廃止され、非推奨に
  • 代わりにmysql-native-passwordパラメータを使用
  • 可能な値はON, OFF, FORCE

新しいパラメータの公式説明:

--mysql-native-password[=name] 
  ネイティブパスワード認証プラグインの状態管理
  有効値: ON(プラグイン有効), OFF(無効), FORCE(ロード失敗時は起動中止)

再起動と動作確認

変更を適用した後、コンテナを再起動します:

bash
docker-compose down
docker-compose up -d

正常に起動したことを確認するには:

bash
docker-compose logs db | grep 'mysqld: ready for connections'

WARNING

MySQLのバージョンアップ後は既存データの互換性問題が発生する可能性があります。重要なデータがある場合はダンプを作成してからアップグレードしてください。

この修正により、MySQLの新しいバージョンでもmysql_native_password認証方式を維持しつつ、エラーなくコンテナを起動できます。