下载 MySQL 镜像

1
docker pull mysql

创建挂载目录

创建 data 目录用来挂载数据库文件,创建 conf 目录用来挂载配置文件

第一次启动 MySQL

1
docker run -p 3306:3306 --name mysql -v D:/Docker/MySQL/conf:/etc/mysql/conf.d -v D:/Docker/MySQL/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

解释下这条命令的参数

-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

-d: 后台运行容器,并返回容器 ID;

-i: 以交互模式运行容器,通常与 -t 同时使用;

-P: 随机端口映射,容器内部端口随机映射到主机的端口

-p: 指定端口映射,格式为:主机 (宿主) 端口: 容器端口

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

–name=”nginx-lb”: 为容器指定一个名称;

–dns 8.8.8.8: 指定容器使用的 DNS 服务器,默认和宿主一致;

–dns-search example.com: 指定容器 DNS 搜索域名,默认和宿主一致;

-h “mars”: 指定容器的 hostname;

-e username=”ritchie”: 设置环境变量;

–env-file=[]: 从指定文件读入环境变量;

–cpuset=”0-2” or –cpuset=”0,1,2”: 绑定容器到指定 CPU 运行;

**-m :**设置容器使用内存最大值;

–net=”bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;

–link=[]: 添加链接到另一个容器;

–expose=[]: 开放一个端口或一组端口;

–volume , -v 本地目录:容器目录: 绑定一个卷,将容器目录挂载到本地目录

启动 Mysqldocker 容器

利用 docker ps 命令可以查看当前运行的容器,docker ps -a 查看所有容器(包括停止的容器)

可以命令 停止和启动 docker 容器

停止容器:docker stop [CONTAINER ID]

启动 容器:docker start [CONTAINER ID]

也可以在 windows 的 docker 桌面版里启动

进入容器

命令 docker exec -it [NAMES] bash,这里 names 可以用那么也可以使用容器 ID 即 Container ID

进入数据库

使用 mysql -uroot -p123456 进入数据库

使用 show databases; 查看数据库

use mysql 进入名为 mysql 的数据库,show tables 可以查看当前数据库有哪些表

使用 SQL

1
source /etc/mysql/conf.d/kaoqin.sql

创建账户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建用户并开启远程登录

CREATE USER ' 你的账号 '@'%' IDENTIFIED BY ' 你的密码 ';

# 创建数据库并设置字符集

CREATE DATABASE `库名` CHARACTER SET 'utf8mb4';

# 给账号授权数据库

GRANT ALL PRIVILEGES ON 库名.* TO ' 你的账号 '@'%';

# 刷新权限

flush privileges;

为了方便以后远程连接,需要下面操作

需要修改 user 表中的 user 为 root 变为 %。这里没有修改成功,因为一开始就是 %

exit 关掉,利用 service mysqld restart 重新启动 mysql 服务。

如何远程连接 Docker 的 Mysql 容器

首先查看 dockers 镜像 ip,在终端输如 ifconfig,如果出现 bash: ifconfig: command not found,则需要安装一些东西 sudo apt-get install net-tools,现在就可以访问 ifconfig

现在还不能连接成功,给 root 用户分配权限

1
alter user 'root'@'%' identified with mysql_native_password by '123456';

刷新权限

1
flush privileges;

遇到的问题

新装了 mysql8.0 后再用 navicat 链接就会报 2059 的错误。

上网查了发现是 8.0 之后 mysql 更改了密码的加密规则,只要在命令窗口把加密方法改回去即可。

首先使用以下命令进入 MySQL 的 docker 容器

1
docker exec -it MYSQL8.0 bash

然后登录 MySQL

1
mysql -uroot -p123456

然后运行以下 SQL 即可

1
2
3
alter user 'root'@'%' identified by '123456' password expire never;
alter user 'root'@'%' identified with mysql_native_password by '123456';
flush privileges;

参考

写最好的Docker安装最新版MySQL8(mysql-8.0.31)教程(参考Docker Hub和MySQL官方文档)_docker 安装mysql8_大白有点菜的博客-CSDN博客