Docker Flyway MySQL 8:客户端不支持服务器请求的认证协议。考虑升级 MariaDB 客户端
Docker Flyway MySQL 8 : Client does not support authentication protocol requested by server. Consider upgrading MariaDB client
我是 运行 我在 docker 容器中的应用程序,其中 flyway 迁移工具在连接到 MySQL DB (8.0.11) 时出错:
这是完整的错误:
Unable to obtain connection from database (jdbc:mysql://docker-mysql:3306) for user 'deepti':
Client does not support authentication protocol requested by server.
Consider upgrading MariaDB client. plugin was = caching_sha2_password
这是我的 docker-compose.yml :
version: '3'
services:
docker-mysql:
image: mysql:8.0.11
environment:
- MYSQL_ROOT_PASSWORD=...
- MYSQL_DATABASE=test1
- MYSQL_USER=...
- MYSQL_PASSWORD=...
flyway-service-i:
image: boxfuse/flyway
command: -url=jdbc:mysql://docker-mysql:3306 -schemas=test1 -user=... -password=... migrate
volumes:
- "../resources/db/migration:/flyway/sql"
depends_on:
- docker-mysql
spring-boot-jpa-docker-webapp:
image: deepti/spring-boot-docker
depends_on:
- docker-mysql
ports:
- 8080:8080
environment:
- DATABASE_HOST=docker-mysql
- DATABASE_USER=...
- DATABASE_PASSWORD=...
- DATABASE_NAME=test1
- DATABASE_PORT=3306
谁能帮我解决这个问题。谢谢
MySQL 中的默认身份验证方法更改为 version 8.0.4. It doesn't look like the MariaDB connector supports it 中的 caching_sha2_password
。
您可以通过添加如下所示的 command
将 default authentication plugin 还原为旧版本:
version: '3'
services:
docker-mysql:
image: mysql:8.0.11
command: --default-authentication-plugin=mysql_native_password
environment:
...
对于已经使用 caching_sha2_password
身份验证方法创建的数据库中的任何现有用户,您可以更改用户以使用 mysql_native_password
:
ALTER USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password BY 'password';
或者只删除带有 docker-compose rm
的现有容器。
我在 this repository 中创建了一个工作示例。这是成功的输出:
Flyway Community Edition 5.1.4 by Boxfuse
Database: jdbc:mysql://docker-mysql:3306/test1 (MySQL 8.0)
WARNING: You are connected to a MySQL database using the MariaDB driver. This is known to cause issues. An upgrade to Oracle's MySQL JDBC driver is highly recommended.
Successfully validated 1 migration (execution time 00:00.010s)
Creating Schema History table: `test1`.`flyway_schema_history`
Current version of schema `test1`: << Empty Schema >>
Migrating schema `test1` to version 1.0 - init
Successfully applied 1 migration to schema `test1` (execution time 00:00.290s)
如您所见,虽然它可以工作,但有一条关于使用 MariaDB 驱动程序与 MySQL 的问题的警告。
另一种选择是下载官方 MySQL JDBC driver,将其添加到 ./drivers
目录并将其安装在 Flyway 容器中:
flyway-service-i:
image: boxfuse/flyway
command: ...
volumes:
- "./sql:/flyway/sql"
- "./drivers:/flyway/drivers"
这也有效:
Flyway Community Edition 5.1.4 by Boxfuse
Database: jdbc:mysql://docker-mysql:3306/test1 (MySQL 8.0)
Successfully validated 1 migration (execution time 00:00.011s)
Creating Schema History table: `test1`.`flyway_schema_history`
Current version of schema `test1`: << Empty Schema >>
Migrating schema `test1` to version 1.0 - init
Successfully applied 1 migration to schema `test1` (execution time 00:00.229s)
但要去掉下面的警告:
WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
我确实需要将 verifyServerCertificate=false
和 useSSL=true
添加到 jdbc url:
jdbc:mysql://docker-mysql:3306/test1?verifyServerCertificate=false&useSSL=true
我是 运行 我在 docker 容器中的应用程序,其中 flyway 迁移工具在连接到 MySQL DB (8.0.11) 时出错: 这是完整的错误:
Unable to obtain connection from database (jdbc:mysql://docker-mysql:3306) for user 'deepti': Client does not support authentication protocol requested by server. Consider upgrading MariaDB client. plugin was = caching_sha2_password
这是我的 docker-compose.yml :
version: '3' services: docker-mysql: image: mysql:8.0.11 environment: - MYSQL_ROOT_PASSWORD=... - MYSQL_DATABASE=test1 - MYSQL_USER=... - MYSQL_PASSWORD=... flyway-service-i: image: boxfuse/flyway command: -url=jdbc:mysql://docker-mysql:3306 -schemas=test1 -user=... -password=... migrate volumes: - "../resources/db/migration:/flyway/sql" depends_on: - docker-mysql spring-boot-jpa-docker-webapp: image: deepti/spring-boot-docker depends_on: - docker-mysql ports: - 8080:8080 environment: - DATABASE_HOST=docker-mysql - DATABASE_USER=... - DATABASE_PASSWORD=... - DATABASE_NAME=test1 - DATABASE_PORT=3306
谁能帮我解决这个问题。谢谢
MySQL 中的默认身份验证方法更改为 version 8.0.4. It doesn't look like the MariaDB connector supports it 中的 caching_sha2_password
。
您可以通过添加如下所示的 command
将 default authentication plugin 还原为旧版本:
version: '3'
services:
docker-mysql:
image: mysql:8.0.11
command: --default-authentication-plugin=mysql_native_password
environment:
...
对于已经使用 caching_sha2_password
身份验证方法创建的数据库中的任何现有用户,您可以更改用户以使用 mysql_native_password
:
ALTER USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password BY 'password';
或者只删除带有 docker-compose rm
的现有容器。
我在 this repository 中创建了一个工作示例。这是成功的输出:
Flyway Community Edition 5.1.4 by Boxfuse
Database: jdbc:mysql://docker-mysql:3306/test1 (MySQL 8.0)
WARNING: You are connected to a MySQL database using the MariaDB driver. This is known to cause issues. An upgrade to Oracle's MySQL JDBC driver is highly recommended.
Successfully validated 1 migration (execution time 00:00.010s)
Creating Schema History table: `test1`.`flyway_schema_history`
Current version of schema `test1`: << Empty Schema >>
Migrating schema `test1` to version 1.0 - init
Successfully applied 1 migration to schema `test1` (execution time 00:00.290s)
如您所见,虽然它可以工作,但有一条关于使用 MariaDB 驱动程序与 MySQL 的问题的警告。
另一种选择是下载官方 MySQL JDBC driver,将其添加到 ./drivers
目录并将其安装在 Flyway 容器中:
flyway-service-i:
image: boxfuse/flyway
command: ...
volumes:
- "./sql:/flyway/sql"
- "./drivers:/flyway/drivers"
这也有效:
Flyway Community Edition 5.1.4 by Boxfuse
Database: jdbc:mysql://docker-mysql:3306/test1 (MySQL 8.0)
Successfully validated 1 migration (execution time 00:00.011s)
Creating Schema History table: `test1`.`flyway_schema_history`
Current version of schema `test1`: << Empty Schema >>
Migrating schema `test1` to version 1.0 - init
Successfully applied 1 migration to schema `test1` (execution time 00:00.229s)
但要去掉下面的警告:
WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
我确实需要将 verifyServerCertificate=false
和 useSSL=true
添加到 jdbc url:
jdbc:mysql://docker-mysql:3306/test1?verifyServerCertificate=false&useSSL=true