Я пытаюсь запустить контейнер MySQL с помощью Docker Compose и получаю ошибку
неизвестная переменная 'default-authentication-plugin=mysql_native_password'.
У меня это есть в моем docker-compose.yml
db:
image: mysql:8.4
command: ["mysqld", "--default-authentication-plugin=mysql_native_password"]
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
healthcheck:
test: [ "CMD", 'mysqladmin', 'ping', '-h', 'localhost', '-u', '$$MYSQl_USER', '-p$$MYSQL_PASSWORD' ]
timeout: 20s
retries: 2
И в файле my.cnf у меня есть это:
[mysqld]
mysql_native_password=ON
default-authentication-plugin=mysql_native_password
general_log = 0
general_log_file = /var/lib/mysql/general.log
default_time_zone='+00:00'
Я попытался изменить версию образа MySQL, но это не сработало. Если я понизлю версию до 5.7 и изменю имя тома, это сработает, но я хочу обновить версию MySQL.
В Mysql 8.4 нет параметра default-authentication-plugin
. Вы можете получить все параметры mysqld
и описание для --mysql-native-password
, как показано ниже.
mysqld --verbose --help
...
--mysql-native-password[=name]
Enable or disable mysql_native_password plugin. Possible
values are ON, OFF, FORCE (don't start if the plugin
fails to load).
...
Итак, для вашего docker-compose.yml измените строку с
command: ["mysqld", "--default-authentication-plugin=mysql_native_password"]
к
command: ["mysqld", "--mysql-native-password=ON"]
и закомментируйте default-authentication-plugin
в my.cnf
[mysqld]
mysql_native_password=ON
#default-authentication-plugin=mysql_native_password
general_log = 0
general_log_file = /var/lib/mysql/general.log
default_time_zone='+00:00'
Затем попробуйте еще раз перезагрузить контейнер; он должен работать.