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
認証方式を維持しつつ、エラーなくコンテナを起動できます。