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