要直接在服务器上安装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"目录中:
开启外部访问权限
我重新试了下,这一步不需要做了,上面创建完容器之后,外部访问已经开启了!
如果没有开启,可以按以下步骤开启:
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"挂载到宿主机本地了。如果不挂载,当容器删除时,数据就丢失了!
原文链接:https://blog.csdn.net/xujingyiss/article/details/123332363?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171836884016800178552552%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171836884016800178552552&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-22-123332363-null-null.nonecase&utm_term=docker%E9%83%A8%E7%BD%B2