我有使用mysql / mysql-server docker image的问题 . 我想连接到mysql服务器,创建db,具有所有PRIVILEGES的用户能够创建新模式并在将来运行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
当我做 docker ps
我看到它试图运行liquibase(使用root / qwe123)它失败了:
[错误]无法执行目标org.codehaus.mojo:sql-maven-plugin:1.5:在项目db:null上执行(default-cli),来自服务器的消息:“主机'172.17.0.1'不允许连接到这个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
如果admin用户在创建新架构时出错,则看起来admin只能访问测试数据库:
[错误]无法执行目标org.codehaus.mojo:sql-maven-plugin:1.5:在项目数据库上执行(default-cli):拒绝用户'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;'
在这种情况下root用户有错误:
[错误]无法执行目标org.codehaus.mojo:sql-maven-plugin:1.5:在项目db:null上执行(default-cli),来自服务器的消息:“主机'172.17.0.1'不允许连接到这个MySQL服务器“ - > [帮助1]
对于管理员 - 以下:
12:13:57 [错误]成功发送到服务器的最后一个数据包是0毫秒前 . 驱动程序未收到来自服务器的任何数据包 . 无法读取服务器的响应 . 预计读取4个字节,在连接意外丢失之前读取0个字节 .
还尝试使用localhost和127.0.0.1作为DB的主机,始终有连接错误 . 有任何想法吗?
1 回答
您应该允许MySQL中的用户从主机的IP连接 . 在MySQL中更改用户后不要忘记刷新权限
GRANT CREATE USER ON *.* TO 'root'@'%';
并重新启动mysql实例
还有机会通过my.cnf将mysql绑定到127.0.0.1 . 如果是这样 - 将绑定更改为0.0.0.0以通过任何IP访问它