验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

Docker怎么挂载mysql

阅读:421 来源:乙速云 作者:代码code

Docker怎么挂载mysql

      Docker挂载mysql

      我们在VMware上的Linux系统上安装启动mysql服务后,可以在本机Windows系统上通过Navicat远程访问,可以进行数据库表的增删改查,但是会存在一个问题

      此时如果通过docker关闭MySQL容器,就会导致数据丢失(可以理解为数据库中的提交事务,未提交事务会导致数据没保存成功 ),因此修改容器之后需要保存或者挂载mysql数据库

      1.下载镜像

      # 最新版本
      docker pull mysql
       
      # 如 5.7 版本 本文基于5.7版本
      docker pull mysql:5.7

      2.启动mysql容器

      # 运行mysql命名容器名称为mysql并且设置root账号初始密码为root
      docker run  -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD="root" -d mysql:5.7

      3.确定mysql配置文件路径

      #进入docker容器,mysql为刚安装的容器名称
      docker exec -it mysql或者mysql容器ID /bin/bash
       
      # 查找Docker内,MySQL配置文件my.cnf的位置
      mysql --help | grep my.cnf
       
      # 会输出数据文件的存放路径 /var/lib/mysql/
      show variables like '%datadir%';

      Docker怎么挂载mysql

      Docker怎么挂载mysql

      4.创建本地路径并挂载Docker内数据

      拷贝MySQL容器配置文件

      mkdir -p /usr/local/mysql/conf && mkdir -p /usr/local/mysql/data
       
      # 将容器的配置复制到服务器
      docker cp mysql:/etc/mysql/* /usr/local/mysql/conf/
      或
      docker cp mysql:/etc/mysql/. /usr/local/mysql/conf/
       
      # 修改字符集
      vim /usr/local/mysql/conf/my.cnf
      character-set-server=utf8

      如果遇到如下错误:

      /usr/bin/docker-current:Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2/1b1d4a0234ee4caxxxxx/merged: invalid argument.
       
      See '/usr/bin/docker-current run --help'.

      这个是因为用的overlay2文件系统,而系统默认只能识别overlay文件系统,更新文件系统即可

      systemctl stop docker      //停掉docker服务
      
      rm -rf /var/lib/docker        //注意会清掉docker images的镜像
      
      vim /etc/sysconfig/docker-storage      
      
      //将文件里的overlay2改成overlay即可

      如:DOCKER_STORAGE_OPTIONS="--storage-driver overlay"

      vim /etc/sysconfig/docker         //去掉option后面的--selinux-enabled

      然后启动docker即可:systemctl start docker

      5.重新启动mysql容器

      docker stop mysql
       
      docker rm mysql
       
      docker run --name mysql 
      -p 3306:3306 
      -v /usr/local/mysql/conf/my.cnf:/etc/mysql/my.cnf 
      -v /usr/local/mysql/data:/var/lib/mysql   
      -v /usr/local/mysql/log:/logs 
      -e MYSQL_ROOT_PASSWORD=admin123456 
      --restart=always 
      -d mysql:5.7
       
      docker run --name mysql -p 3306:3306 -v /usr/local/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/log:/logs -e MYSQL_ROOT_PASSWORD=admin123456 --restart=always -d mysql

      映射MySQL数据文件后,删除或者停止mysql容器后能保留数据库文件,不至于导致数据库丢失

      初识Docker挂载mysql挂载备份

      首先下载一个mysql:docker pull mysql

      运行mysql容器,需要做数据挂载(挂载就是将mysql中的文件,挂载到linux中,下次修改mysql配置文件,就不需要进入mysql,也可以备份mysql的数据):##安装启动mysql,需要配置密码:

      docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=自己设置的密码 --name mysql01 mysql
      • -d 后台启动

      • -p 端口映射,将3306映射到外部端口

      • -v 卷挂载,将mysql内部文件同步到linux的文件中,做到备份

      • -e 环境配置,这里配置的是mysql密码

      • --name 容器名称

      挂载方式有具名挂载和匿名挂载

      #查看所有volume(卷挂载)的情况 :docker volume ls

      #匿名挂载:-v 容器内路径

      docker run -d -P --name mysql01 -v /etc/mysql mysql

      (-P 随机映射端口)

      #具名挂载:

      docker run -d -P --name mysql02 -v juming-mysql:/etc/mysql mysql

      (具名挂载名称:juming-mysql)

      #通过 -v 卷名:容器内路径

      #查看一下这个卷:

      docker volume inspect juming-mysql

      Docker怎么挂载mysql

      #所有的docker容器卷,在没有指定目录的情况下,都存储在 /var/lib/docker/volumes/xxx/_data

      **如何确定是具名挂载还是匿名挂载,还是指定路径挂载!**
      				
      	-v 容器内路径		#匿名挂载
      	-v 卷名:容器内路径		#具名挂载
      	-v /宿主机路径:容器内路径		#指定路径挂载

      拓展

      #通过 -v 容器内路径:ro	rw	改变读写权限
      ro	readonly	#只读
      rw	readwrite	#可读可写
      
      #一旦设置了容器权限,容器对我们挂载出来的内容就有限定
      docker run -d -P --name mysql02 -v juming-mysql:/etc/mysql:ro mysql
      docker run -d -P --name mysql02 -v juming-mysql:/etc/mysql:rw mysql
      
      #ro,只要看到ro就说明这个路径只能通过宿主机操作,容器内部是无法操作的!

      在测试的时候发现,如果一个文件名,如juming-mysql挂载过一次,删除容器后,再使用这个名字时,会无法挂载上,原因是docker 里面的volumes缓存没有清除:

      可以使用 docker --help 可以看到命令

      Docker怎么挂载mysql

      再使用:docker system --help

      Docker怎么挂载mysql

      这个就是docker清理volumes缓存的选项,输入docker system prune 确定时输入y,即可删除 挂载缓存

      Docker怎么挂载mysql

    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>