docker安装mysql8

7 阅读1分钟

一、拉取镜像

docker pull mysql:8.0.20

二、创建数据目录

mkdir -vp /usr/local/docker/myMysql
cd /usr/local/docker/myMysql
mkdir data logs conf

三、启动

docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.20

四、复制配置文件

docker cp mysql:/etc/mysql /usr/local/docker/myMysql/conf 
docker cp mysql:/var/lib/mysql /usr/local/docker/myMysql/data

五、停止并删除容器

docker stop mysql
docker rm -f mysql

六、正儿八经启动

docker run  -d  -p 3306:3306 \
--name mysql \
--privileged=true \
--restart=unless-stopped \
-v /usr/local/docker/myMysql/conf/mysql/conf.d:/etc/mysql/conf.d \
-v /usr/local/docker/myMysql/logs:/var/log/mysql \
-v /usr/local/docker/myMysql/data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0.20

七、拒绝连接解决方法

# 1、无法连接(不允许远程连接)
docker exec -it mysql /bin/bash
mysql -u root -p
use mysql 
# 更新root - localhost 为 root - %
update user set host = '%' where user = 'root' and host='localhost'; 
# 设置允许远程用户访问
GRANT ALL ON *.* TO 'root'@'%'; 
flush privileges;# 刷新权限
#更新用户加密方式,mysql8默认的加密方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';

七.1、更新如果报错 ERROR 1062 (23000): Duplicate entry '%-root' for key 'user.PRIMARY'

# 查询
SELECT host, user FROM mysql.user WHERE user = 'root';

# 如果看到这个表示我们可能要删除一个
+-----------+------+
| host      | user |
+-----------+------+
| %         | root |   -- 已经存在一个 host 为 % 的记录
| localhost | root |
+-----------+------+


# 删除 localhost 的记录(如果你确定不需要它)
DELETE FROM mysql.user WHERE user = 'root' AND host = 'localhost';
# 或者删除 % 的记录(如果你只想保留 localhost)
DELETE FROM mysql.user WHERE user = 'root' AND host = '%';
# 刷新权限
FLUSH PRIVILEGES;

原文章:docker安裝mysql(8.0.20)并且指定配置文件和数据存放位置_docker启动mysql指定配置文件-CSDN博客