docker容器部署的mysql

207 阅读2分钟

拉取镜像

docker pull mysql:8.0.20
复制代码

运行容器

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

参数说明:

-   --name 指定容器名称
-   -e 设置环境变量,这里设置了mysql root用户的初始密码
-   -d damon的缩写,指在后台运行
-   -p 3306:3306,将容器内mysql的3306端口映射到宿主机的3306端口

如果容器密码忘记或者连接不上、可以看下面的教程

忘记mysql容器的root密码

首先进入容器

docker ps 

CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS                          PORTS     NAMES
8079fe557b0a   mysql:8.0   "docker-entrypoint.s…"   3 minutes ago   Exited (1) About a minute ago             mysql8.0

#进入容器
docker exec -it 8079fe557b0a /bin/bash

下载vim编辑器(mysql镜像中默认没有安装vi或vi)

#更新apt
apt-get update

#安装vim
apt-get install vim

编辑mysql配置文件跳过密码

vim /etc/mysql/conf.d/docker.cnf
#如果保存的时候报错、则是没有这个docker.cnf文件
vim 的强制退出命令: qa!

#我的容器里只有:/etc/mysql这个文件目录,
#进入目录:
cd etc/mysql
#创建文件夹
mkdir conf.d
#进入conf.d文件夹
cd conf.d
#创建docker.cnf文件
touch docker.cnf
# vim编辑
vim docker.cnf
#配置跳过密码
在mysql配置文件中添加:skip-grant-tables

重启容器

docker restart 8079fe557b0a

重新进入容器

docker exec -it 8079fe557b0a /bin/bash

修改密码

mysql -u root -p
Enter password:   # 不用输入密码直接回车enter
mysql> use mysql;
mysql> update user set authentication_string='' where user="root";
# 如果需要给root用户设置密码
mysql> update user set plugin='mysql_native_password' where user='root'; #更改加密方式
mysql> alter user 'root'@'localhost' IDENTIFIED BY 'youPassword';#设置密码
mysql> FLUSH PRIVILEGES;
# 退出数据库
mysql> exit

删除配置,重启服务

vim /etc/mysql/conf.d/docker.cnf
删除: skip-grant-tables

# 退出容器
docker restart 8079fe557b0a

报错:not allowed to connect to this MySQL server

(针对以下错误: null, message from server: "Host '172.18.0.1' is not allowed to connect to this MySQL server" n)

修改用户权限

mysql> use mysql;
mysql> update user set host= '%' WHERE user = 'root';
Query OK, 1 row affected (0.03 sec)
#刷新权限到内存
mysql> flush privileges;