Docker 安装 mysql8.0
设置镜像源
国内的网络环境,使用官方的镜像源,下载速度很慢,所以我们需要使用国内的镜像源。
|
|
如果没有daemon.json
文件可以手动创建一个。可以设置中国区镜像或是网易镜像,也可以设置阿里云镜像(推荐使用阿里云的加速器,因为快🤣)。
- 中国区镜像
|
|
- 网易镜像
|
|
- 阿里云镜像
设置完成后,重启docker服务。
|
|
可以通过 docker info
查看镜像源是否设置成功。
|
|
下载镜像
可以去 https://hub.docker.com/_/mysql/tags 仓库找需要的 mysql 版本👇
通过 docker pull
下载需要的镜像。
配置并启动容器
主机挂载目录
|
|
将my.cnf
文件中写入以下配置
|
|
具体可以参考https://github.com/docker-library/mysql/blob/master/8.0/config/my.cnf
secure-file-priv
设置为 /var/lib/mysql
是为了解决 MySQL 8 docker-compose :Failed to access directory for –secure-file-priv 问题。
启动容器
|
|
这里还可以在启动容器时初始化一些工作,比如建库建表,可以把 sql 或是 sh 文件放在容器的/docker-entrypoint-initdb.d
目录下,可以直接通过宿主机映射到容器目录,比如
|
|
开启远程连接
如果不能远程连接可以进入容器后连接数据库,修改 mysql 库的 user 表。
|
|
查看 user 表中的user='root'
的账号的 host 是否是%
,如果不是则设置为%
。如果已存在多个 root 账号,其中只要有一个的 host 为%
就可以了。
|
|
如果修改了用户需要执行
|
|
这样在不重启的 mysql 服务的情况下就可以生效。
修改密码
|
|
FAQ
- ❓ secure-file-priv
|
|
宿主机的映射目录需要设置用户和用户组为999:999
,因为 docker 容器里的用户也是 999,可以启动一个临时容器进去查看。
- ❓ flush privileges
flush privileges
命令本质上的作用是将当前 user 和 privilige 表中的用户信息/权限设置从 mysql 库中提取到内存里。
MySQL 用户数据和权限有修改后,希望在不重启MySQL服务的情况下直接生效,就可以执行这个命令。