本文在CSDN原有作者小小小小真的基础上,对其进行修改,整合,原文链接:https://blog.csdn.net/a1150499208/article/details/131437199
1、下载mysql8.0.20镜像
docker pull mysql:8.0.20
2、启动镜像
docker run -p 3307:3306 –name mysql8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.20
备注:
-p:3307:3306:映射端口到外部机器的3307端口
–name mysql8 docker的启动名称为mysql8
–MYSQL_ROOT_PASSWORD=123456 密码为123456
–d mysql:8.0.20 以detached 模式运行容器/后台运行,指定镜像为mysql,版本为8.0.20
查看运行状态
docker ps
3、配置挂载
mkdir -p /docker/mysql8.0.20/
新建文件夹
docker cp mysql8:/etc/mysql /docker/mysql8.0.20/
拷贝配置文件到创建的目录下
docker stop mysql8
停止原有的mysql容器
docker rm -f mysql8
删除原有容器
4、启动mysql挂载配置文件,数据持久化宿主主机
4.1切换到指定路径下:
cd /docker/mysql8.0.20/mysql/conf.d
4.2修改配置文件
vim mysql.cnf
输入内容
这里需要注意,原文件中最下面已经有了[mysqld],我下面的代码是上面下面都有[mysqld]的,看你需要删除上面的还是下面的[mysqld],
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
[client]
default-character-set=utf8
[mysql]
即保证内容为如下所示:
4.3创建bash脚本
创建一个 sh 脚本、把 docker 启动 mysql 的命令放到脚本里面。因为后续如果想找到当时启动 mysql 时候所设置的一些参数和信息、可以查看这个脚本里面是怎么写的。
vim docker_insert_mysql8.0.20.sh
按键盘i,输入内容
#!/bin/sh
docker run \
-p 3307:3306 \
–name mysql8 \
–privileged=true \
–restart unless-stopped \
-v /docker/mysql8.0.20/mysql:/etc/mysql \
-v /docker/mysql8.0.20/logs:/logs \
-v /docker/mysql8.0.20/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0.20
-p 端口映射 【这里有个特殊的地方是把3306映射给了3307、后续链接数据库的时候用3307链接不用3306】
–name mysql8 名称是mysql8
–privileged=true 挂载文件权限设置
–restart unless-stopped 设置 开机后自动重启容器
-v /docker/mysql8.0.20/mysql:/etc/mysql \ 挂载配置文件【路径是上面创建的挂载路径】
-v /docker/mysql8.0.20/logs:/logs \ 挂载日志【路径是上面创建的挂载路径】
-v /docker/mysql8.0.20/data:/var/lib/mysql \ 挂载数据文件 持久化到主机【路径是上面创建的挂载路径】
-v /etc/localtime:/etc/localtime 容器时间与宿主机同步
-e MYSQL_ROOT_PASSWORD=123456 设置密码
-d mysql:8.0.20 后台启动,mysql
4.4运行
bash命令运行
sh docker_insert_mysql8.0.20.sh
4.5查看运行状态
docker ps
5、配置mysql
5.1、进入容器
docker exec -it mysql8 bash
5.2、登录容器
输入密码,密码和前面保持一致,上面是123456,这里也是123456,需要注意的是,输入密码不会有显示的,输入完回车即可
mysql -u root -p
5.3、设置权限(为 root 分配权限,以便可以远程连接)
grant all PRIVILEGES on *.* to root@’%’ WITH GRANT OPTION;
此命令允许 root
用户从任何地点(%
)以最高权限操作所有数据库和表,并可进一步分配权限给他人。
use mysql
update user set host=’%’ where user=’root’;
use mysql:切换当前操作的数据库为 mysql 系统数据库。
update user set host=’%’ where user=’root’;MySQL 安装后,root 用户的 host 通常是 localhost,表示仅允许从本机连接。