配置文件
将以下内容存为 stack.yml
,此处为了不与本机已有的 MySQL 5.x 冲突,重新映射了端口。
需要提前建好 /www/server/mysql8/mysql
目录和 my.cnf
文件。
version: '3.1'
services:
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: yourPassword
ports:
- '3307:3306'
volumes:
- '/www/server/mysql8/mysql:/var/lib/mysql'
- '/www/server/mysql8/my.cnf:/etc/mysql/my.cnf'
- '/etc/localtime:/etc/localtime:ro'
启动容器
docker-compose -f stack.yml up
配置远程访问
MySQL 安装完成后只支持 localhost 访问,我们必须设置一下才可以远程访问,另外还有一些 MySQL 8.0 连接时的一些问题。(巨坑)
查看容器列表
docker container ls
进入容器
docker exec -it yourContainerId bash
登录到 MySQL
mysql -u root -p
开始施法
use mysql;
select host, user, authentication_string, plugin from user;
# 查看表格中 root 用户的 host,默认应该显示的 localhost,只支持本地访问,不允许远程访问。
GRANT ALL ON *.* TO 'root'@'%';
# GRANT ALL ON 表示所有权限,% 表示通配所有 host,可以访问远程。
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'yourPassword';
flush privileges;
# 刷新权限
测试连接
mysql -h 127.0.0.1 -P 3307 -u root -p