Oks*_*kul 5 mysql liquibase jenkins docker docker-container
我在使用 mysql/mysql-server docker 映像时遇到问题。我想连接到 mysql 服务器,创建数据库,拥有所有特权的用户,以便将来能够创建新模式并运行 liquibase。
我像这样运行容器:
sudo docker run --name db -e MYSQL_ROOT_PASSWORD=qwe123 -e MYSQL_DATABASE=test \
-d -p 3306:3306 mysql/mysql-server:5.6 --lower-case-table-names=1
Run Code Online (Sandbox Code Playgroud)
当我这样做时,docker ps我看到它正在运行,但是当我尝试运行 liquibase(使用 root/qwe123)时,它失败了:
[错误] 无法执行目标 org.codehaus.mojo:sql-maven-plugin:1.5:execute (default-cli) on project db: null,来自服务器的消息:“Host '172.17.0.1' is not allowed to connect to此 MySQL 服务器”-> [帮助 1]
与用户一起尝试:
sudo docker run --name db -e MYSQL_ROOT_PASSWORD=qwe123 -e MYSQL_DATABASE=test \
-e MYSQL_USER=admin -e MYSQL_PASSWORD=qwe123 -d -p 3306:3306 \
mysql/mysql-server:5.6 --lower_case_table_names=1
Run Code Online (Sandbox Code Playgroud)
管理员用户在创建新架构时出错,看起来管理员只能访问测试数据库:
[错误] 无法在项目 db 上执行目标 org.codehaus.mojo:sql-maven-plugin:1.5:execute (default-cli): Access denied for user 'admin'@'%' 到数据库 'test2' -> [帮助 1]
使用 root 出现以下错误:
[ERROR] 最后一个成功发送到服务器的数据包是 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。无法从服务器读取响应。预期读取 4 个字节,在连接意外丢失之前读取 0 个字节。
还尝试在 init 命令中为 admin 设置权限:
docker run --name db -e MYSQL_ROOT_PASSWORD=qwe123 -e MYSQL_DATABASE=test -d \
-p 3306:3306 mysql/mysql-server:5.6 --lower_case_table_names=1 \
'--init-connect=CREATE USER `admin`@`localhost` IDENTIFIED BY "qwe123"; GRANT ALL PRIVILEGES ON *.* TO `admin`@`localhost` WITH GRANT OPTION; CREATE USER `admin`@`%` IDENTIFIED BY "qwe123";GRANT ALL PRIVILEGES ON *.* TO `admin`@`%` WITH GRANT OPTION;FLUSH PRIVILEGES;'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,root 用户有错误:
[错误] 无法执行目标 org.codehaus.mojo:sql-maven-plugin:1.5:execute (default-cli) on project db: null,来自服务器的消息:“Host '172.17.0.1' is not allowed to connect to此 MySQL 服务器”-> [帮助 1]
对于管理员 - 以下内容:
12:13:57 [ERROR] 最后一个成功发送到服务器的数据包是 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。无法从服务器读取响应。预期读取 4 个字节,在连接意外丢失之前读取 0 个字节。
还尝试使用 localhost 和 127.0.0.1 作为数据库的主机,总是有连接错误。有任何想法吗?
您应该允许 MySQL 中的用户从您主机的 IP 进行连接。在 MySQL 中更改用户后不要忘记刷新权限
GRANT CREATE USER ON *.* TO 'root'@'%';
并重启mysql实例
也有机会通过 my.cnf 将 mysql 绑定到 127.0.0.1。如果是这样 - 将绑定更改为 0.0.0.0 以通过任何 IP 访问它