Docker安装mysql8及远程链接

Docker安装

1
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.23

docker mysql官方文档

不过我们一般讲mysql的数据文件挂载在容器外,这样重启容器不会数据。

对应脚本docker_run.sh

1
2
3
4
5
6
7
8
9
#!/bin/bash
docker stop mysql8
docker rm mysql8

docker run --name mysql8 \
-p 3306:3306 \
-v /docker/services/mysql8/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456\
-d mysql:8.0.23

也可以使用docker-compose安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: '3.1'

services:
db:
image: mysql:8.0.23
volumes:
- /docker/services/mysql8/data:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
command: --default-authentication-plugin=mysql_native_password
ports:
- 3307:3306
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456

远程链接

安装后,mysql用户默认用户root只允许localhost本地链接。

可以通过如下方式查看。

1
2
3
# 查看版本
select version();
select host,user from mysql.user;

如果我们希望能够远程链接,需要分配权限。%,代表不限制链接客户端地址。

1
grant all privileges on *.* to root@'%' identified by '123345';

Docker 启动失败

Data Dictionary initialization failed.

Sequel pro远程链接失败

用在IDEA工具中,可以连接。使用mysql -u root -p 也能登陆

但是使用客户端工具Sequel pro,缺提示MySQL said: Authentication plugin 'caching_sha2_password' cannot be loaded...

原因

安全模块中的身份验证机制默认使用caching_sha2_password方式,以前的版本机制是mysql_native_password方式。

如果是5.x版本升级到8.x.x的版本,那么原有的用户身份验证机制是不会变的。

但是有新用户加入,则就需要注意了,新用户将用使用caching_sha2_password身份验证机制。

可以查看

1
select host,user,authentication_string,plugin from user;

image-20210327124014467

解决方案

我们可以修改对应的身份验证机制

1
2
alter user 'root'@'%' identified with mysql_native_password by '123456';
flush privileges;

image-20210327124055682

sequel Pro 不支持mysql8

可能出现连接成功后,无法使用的情况。无法显示数据库。这是因为下载版本sequel不支持mysql8,可以下载新 版本。

下载Sequel Pro test版本 https://sequelpro.com/test-builds

更新Docker Desktop后启动失败

更新Docker Desktop后启动MySQL报Data Dictionary initialization failed错误

这个问题是由于文件共享格式造成的。

应该不止MySQL一个容器会存在这个问题,理论上可以通过改变容器的数据格式或修改Docker Desktop配置来解决问题,考虑到改变容器比较麻烦而且会带来各种问题,所以还是直接修改Docker Desktop配置好了。

打开Docker Desktop点右上角的“Settings”图标在“General”栏。

去掉 勾选“Use gRPC FUSE for file sharing”(Uncheck to use the legacy osxfs file sharing instead.)

然后点右下角的“Apply&Restart”等启动完再docker start mysql就可以正常运行MySQL容器了。

image-20210327170304280

螃蟹 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!