由于最新版Mysql采用了新的加密方式(例如 Mysql8),所以远程连接需要设置Mysql的配置。以下方法在Navicat上链接成功。
1. Mac上安装Docker和Mysql的Docker略去,见上一篇。
2. 运行镜像,设置root账号初始密码(123456),映射本地宿主机端口3306到Docker端口3306。
$ docker run -it –rm –name test_mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql
3. 查看已运行的容器:
$ docker ps -a
4. 进入test_mysql容器:
docker exec -it test_mysql bash
5. 在容器内登陆Mysql
mysql -uroot -p123456
6. 查看root等用户信息
mysql> select user,host,authentication_string from mysql.user;
7. 为root分配权限,以便可以远程连接:
mysql> grant all PRIVILEGES on *.* to root@‘%’ WITH GRANT OPTION;
8. 使用Navicat链接会提示链接失败。因为Mysql5.6以上的版本修改了Password算法,这里需要更新密码算法,操作步骤如下:
mysql> ALTER user ‘root’@‘%’ IDENTIFIED BY ‘123456’ PASSWORD EXPIRE NEVER;
mysql> ALTER user ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
mysql> FLUSH PRIVILEGES;
9. 再次使用Navicat链接,提示成功。
10. 如果使用php链接
$mysqli = new mysqli("mysql的docker的ip", "root", "123456");
如需转载请注明: 转载自26点的博客
本文链接地址: MAC上连接Docker下的最新版Mysql
转载请注明:26点的博客 » MAC上连接Docker下的最新版Mysql
博主您好,我在mac上安装了docker,docker里面也安装了mysql 5.8。
我可以使用Navicat连接docker里的mysql,使用phpstorm内置的数据库连接也可以。但是我在写php连接mysql的时候发现连接不上,用了您说的方法,我找到了docker的ip,实际情况是mac ping不通docker,端口映射是这样的:主机的3307映射docker的3306
php语句:
$link = mysqli_connect(‘172.17.0.2′,’root’,’root’,’test’,’3306′);//执行超时,连接不上
$link = mysqli_connect(‘localhost,’root’,’root’,’test’,’3307′);//报错
php应该是没有在docker上吧,链接mysql用 127.0.01试试,端口是3307;172.17.0.2是docker之间的ip地址,可用理解为docke之间有个局域网,宿主机和docker之间是不能直接链接的;Navicat用的是ip地址吧~