Docker 之九实战使用 Docker 官方的 MySQL 镜像

Docker 官方 MySQL 镜像的使用说明文档

使用 Docker 官方的 MySQL 镜像

  • 系统时区设置:-e TZ=Asia/Shanghai
  • 数据库密码设置:-e MYSQL_ROOT_PASSWORD=123456
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 搜索所有可用的MySQL镜像
# docker search mysql

# 下载Docker官方提供的MySQL5.7镜像(基于Debian-Stretch)
# docker pull mysql:5.7

# 创建并启动(以后台方式)MySQL容器,同时挂载MySQL的数据文件目录
# docker run -p 3308:3306 --name mysql5.7 \
-v /container/mysql5.7/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai \
-d mysql:5.7

# 或者挂载MySQL的配置文件目录、数据文件目录、日志文件目录
# docker run -p 3308:3306 --name mysql5.7 \
-v /container/mysql5.7/conf:/etc/mysql/conf.d \
-v /container/mysql5.7/data:/var/lib/mysql \
-v /container/mysql5.7/logs:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai \
-d mysql:5.7

# 查看当前所有正在运行的容器
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7485feae5c64 mysql:5.7 "docker-entrypoint.s…" 7 seconds ago Up 5 seconds 33060/tcp, 0.0.0.0:3308->3306/tcp mysql5.7

# 连接到Docker容器,连接之后如果想断开连接,在容器内的终端直接执行"exit"命令即可,连接断开后容器不会停止运行
# docker exec -it mysql5.7 /bin/bash

# MySQL相关文件目录说明:
# 默认日志文件目录:/var/log/mysql
# 默认数据文件目录:/var/lib/mysql
# 默认配置文件路径:/etc/mysql/my.cnf
# 同时默认配置文件my.cnf会分别加载/etc/mysql/conf.d 和 /etc/mysql/mysql.conf.d目录下的自定义配置文件

验证 MySQL 服务器是否可用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 在容器内执行登录MySQL服务器的命令
# docker exec -it mysql5.7 mysql -h localhost -u root -p

# 创建数据库
mysql> create database bbs default character set utf8;

# 创建表
mysql> create table bbs.user(id bigint(20) not null auto_increment primary key, name varchar(25) not null) engine=innodb auto_increment=3 default charset=utf8;

# 插入表数据
mysql> insert into bbs.user(name) values("peter");

# 查询表数据
mysql> select * from bbs.user;
+----+-------+
| id | name |
+----+-------+
| 3 | peter |
+----+-------+
1 row in set (0.00 sec)

# 退出登录
mysql> exit

开启 MySQL 远程访问的权限(仅供演示,出于数据库安全考虑,强烈不建议开启 root 用户的远程访问权限)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 在容器内执行登录MySQL服务器的命令
# docker exec -it mysql5.7 mysql -h localhost -u root -p

# 切换数据库
mysql> use mysql;

# 用户授权
mysql> grant all privileges on *.* to root@'%' identified by "123456";

# 更新授权信息
mysql> flush privileges;

# 退出登录
mysql> exit

# 如果以后想在宿主机上或者外部通过MySQL客户端连接到Docker容器内的MySQL服务器,使用以下命令即可;其中192.168.1.198是Docker容器所在宿主机的IP,3308是宿主机的MySQL映射端口
# mysql -h 192.168.1.198 -u root -P 3308 -p

# 完成MySQL授权后,如果外部依然无法连接Docker容器内的MySQL服务器,务必检查宿主机的防火墙是否开放了MySQL的映射端口(如上面的3308端口)

备份 MySQL 数据库的数据

1
2
# 备份MySQL所有数据库的数据
# docker exec mysql5.7 sh -c 'exec mysqldump --all-databases -uroot -p"123456"'> ~/all-databases.sql

查看 MySQL 的日志信息

1
2
3
4
5
6
7
# 显示所有日志信息
# docker logs mysql5.7

# 跟踪显示日志信息
# docker logs -t -f --tail 5 mysql5.7

# 或者进入MySQL容器内的日志目录/var/log/mysql,进一步分析日志信息

更改系统的镜像源地址,基于 Debian 9(Stretch)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 连接到Docker容器,连接之后如果想断开连接,在容器内的终端直接执行"exit"命令即可,连接断开后容器不会停止运行
# docker exec -it mysql5.7 /bin/bash

# 使用阿里云镜像站
# cp /etc/apt/sources.list /etc/apt/backup.sources.list
# echo "deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib" > /etc/apt/sources.list
# echo "deb http://mirrors.aliyun.com/debian-security stretch/updates main" >> /etc/apt/sources.list
# echo "deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib" >> /etc/apt/sources.list
# echo "deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib" >> /etc/apt/sources.list

# 更新软件索引
# apt-get update

# 升级系统(非必须)
# apt-get upgrade

# 安装软件(非必须)
# apt-get -y install vim htop net-tools