一、先来说说最普通的安装——单机版
docker hub上给出了mysql的安装方法:
所以我们只需要拉取镜像后再运行便可:
1.拉取mysql镜像(以5.7版本为例)
docker pull mysql:5.7
2.运行镜像生成容器(指定暴露端口以及密码)
docker run --name mysql -dp 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
3.确定运行之后便可进去到容器中
docker exec -it mysql /bin/bash
最后mysql -uroot -p便可以对数据库进行操作
但是:这样的安装有很大的问题
- 编码问题——可以看到,安装之后的数据库编码不是utf-8
- 数据丢失——如果不小心删除了容器,那么数据也会丢失,这是很危险的
所以我们需要使用第二种——通过docker数据卷的方式来保证持久化
二、指定数据卷安装
在docker run时指定数据卷:
docker run --name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/log:/var/log/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-dp 3306:3306 \
mysql:5.7
这里指定了三个数据卷:
-
-v /root/mysql/log:/var/log/mysql
-
-v /root/mysql/data:/var/lib/mysql
-
-v /root/mysql/conf:/etc/mysql/conf.d
因为:
- 在linux下,mysql想要改变编码,需要在/etc/mysql/conf.d下面新建my.conf文件,然后编写
- linux下的mysql数据库是在/var/lib/mysql目录下,日志信息是在/var/log/mysql下
所以我们可以在/root目录下创建数据卷,具体步骤如下:
1.在/etc/mysql/conf.d下新建my.conf文件指定编码(vim my.conf)
[client]
default_character_set=utf8
[mysql]
default_character_set=utf8
[mysqld]
character_set_server=utf8
2.重启mysql容器
docker restart mysql
3.进入容器
docker exec -it mysql /bin/bsah
mysql -urooot -p
此时再去查看mysql的编码,可以看到已经变为了utf-8
同时容器中的数据也通过数据卷挂载点的方式从/var/lib/mysql同步到了/root/mysql/data
这样即使容器不小心删除,那么再次指定数据卷启动,那么编码文件会自动生成
而且数据也会同步到容器的/var/lib/mysql,不会有乱码以及数据丢失的情况出现