要直接在服务器上安装mysql,还是很难的。不过有了docker,就方便了。

本文简单介绍下通过docker来部署mysql的方法。

拉取镜像

直接去dockerhub上找一个最新的mysql5.7版本的镜像,然后拉取下来

docker pull mysql:5.7.37

创建Mysql容器

docker run -d -p 3307:3306 --name demo -v /usr/local/mysql/data:/var/lib/mysql -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.37

参数说明:

-d:容器后台运行

-p 3307:3306:宿主机上3307端口对应容器中3306端口,在外部访问时用的是宿主机上的端口

--name demo:给容器起个名字,方便查找和使用

-v /usr/local/mysql/data:/var/lib/mysql:将宿主机"/usr/local/mysql/data"目录挂载到容器的"/var/lib/mysql"目录(具体使用宿主机上哪个目录,自行定义),使得mysql数据文件能在宿主机上进行保存。这一步很重要,如果不挂载的话,一旦容器删除了,那么数据就丢失了!

-v /etc/localtime:/etc/localtime:将宿主机时间挂载到容器中,使容器中时间和宿主机同步

-e MYSQL_ROOT_PASSWORD=123456:给root用户设置默认密码为123456

mysql:5.7.37:镜像名

如果有需要自定义mysql配置文件的,可以自己写好配置文件,然后通过-v命令挂载到容器中,替换默认的配置文件。容器中是在"/etc/mysql"目录中:

docker mysql 不生效 配置 docker mysql部署_docker mysql 不生效 配置

开启外部访问权限

我重新试了下,这一步不需要做了,上面创建完容器之后,外部访问已经开启了!

如果没有开启,可以按以下步骤开启:

1) 进入容器并以root用户登录

docker exec -it demo bash
mysql -uroot -p
123456

2) 执行下面几条命令以开启外部访问权限

注意:如果是高版本mysql,这里命令有点不一样,需要拆开来,先创建用户,再赋予权限

use mysql;
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;

这边改完,就能使用navicat连接这个mysql了。

容器重启后,数据是否还在?

插入点数据,然后重启容器来验证:

docker stop demo
docker start demo

查看数据,发现数据还在。

事实上,如果只是重启容器的话,就算不将"/var/lib/mysql"挂载到宿主机,数据还是能继续访问的。只有将容器删除后,数据才会丢失。

删除容器,再重新创建,数据是否还在?

执行命令彻底删除容器,再重新创建容器:

docker stop demo
docker rm demo
docker run -d -p 3307:3306 --name demo -v /usr/local/mysql/data:/var/lib/mysql -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.37

容器创建完后,发现直接能连接mysql,不用再重新开启外部方法了。而且之前的数据也还保留着。

这是因为将容器中的mysql数据目录"/var/lib/mysql"挂载到宿主机本地了。如果不挂载,当容器删除时,数据就丢失了!