容器数据卷,Docker安装Mysql5.7以及MySQL主从搭建过程

容器数据卷

  • 容器卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,容器卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷

  • 有点类似Redis里面的rdbaof,将docker容器里面数据保存进宿主机 磁盘中

  • Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。

  • 为了能保存数据在docker中我们使用卷。

  • 大致公式:docker run -it –privileged=true -v /宿主机绝对路径目录: / 容器内目录 镜像名

  • 特点

    • 数据卷可在容器之间共享或重用数据
    1. 卷中的更改可以直接实时生效
    2. 数据卷中的更改不会包含在镜像的更新中
    3. 数据卷的生命周期一直持续到没有容器使用它为止
  1. Docker挂载主机目录访问如果出现cannot open directory.:Permission denied

    1. 解决办法:在挂载目录后多加一个--privileged-=true(CentOS7安全模块会比之前系统版本加强,所以目录挂载的情况被默认为不安全的行为,--privileged-=true扩大容器的权限解决挂载目录没有权限的问题
  2. 查看数据卷是否挂载成功:docker inspect 容器ID (Mounts[“Source”: “目的地址”, “Destination”: “源地址”])

  3. 读写规则rw(读写)和 ro(只读)

    • 读写(默认):docker run -it –privileged=true -v /宿主机绝对路径目录: /容器内目录:rw 镜像名
    • 只读(容器实例只能读取,不能写入):docker run -it –privileged=true -v /宿主机绝对路径目录😕容器内目录:ro 镜像名
  4. 容器卷间的继承

    • docker run -it –privileged=true -volumes-from 父类 --name=容器名(子类) 镜像名
    • 子类容器继承了父类容器的数据卷(规则),当父类 挂了不影响 子类与宿主机间的数据共享,当父类再次运行时还是可以共享数据卷中内容

Docker安装Mysql5.7

#启动容器
1. docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
2. docker run -d -p 3306:3306 --privileged=true \
-v /zzyyuse/mysql/log:/var/log/mysql \
-v /zzyyuse/mysql/data:/var/lib/mysql \
-v /zzyyuse/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql \
mysql:5.7
#查看容器状态
docker ps
#进入容器
 docker exec -it 6a76da3ddcf5 /bin/bash
 
 #进入 Mysql 
 mysql -uroot -p
 
 

在这里插入图片描述

在这里插入图片描述

  1. 插入中文如下图报错(docker 上默认字符集编码 隐患)

  2. 在这里插入图片描述

  3. 进mysql 容器里执行:SHOW VARIABLES LIKE 'character%';

    在这里插入图片描述

  4. docker run -d -p 3306:3306 --privileged=true \
    -v /zzyyuse/mysql/log:/var/log/mysql \
    -v /zzyyuse/mysql/data:/var/lib/mysql \
    -v /zzyyuse/mysql/conf:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=123456 \
    --name mysql \
    mysql:5.7
    
    
    
    #直接进入到/zzyyuse/mysql/conf 创建一个 my.cnf  的文件写入内容如下
    [client]
    default_character_set=utf8
    [mysqld]
    collation_server=utf8_general_ci
    character_set_server=utf8
    
    
    
  5. 在这里插入图片描述

  6. 变为UTF8,就可以正常插入中文了, 因为挂载了数据卷(/zzyyuse/mysql/data:/var/lib/mysql), 当容器被删除时,在重新创建一个新容器,挂载与被删除容器一样的数据卷可达到还原数据的效果

MySQL主从搭建过程

  1. 新建主服务器容器实例(3307)

    • docker run -p 3307:3306 --name mysql-master \
      -v /mydata/mysql-master/log:/var/log/mysql \				#日志
      -v/mydata/mysql-master/data:/var/lib/mysql \				#数据
      -v/mydata/mysql-master/conf:/etc/mysql \					#配置文件
      -e MYSQL_ROOT_PASSWORD=root \
      -d mysql:5.7
      
  2. 进入**/mydata/mysqI-master/conf** 目录下新建my.cnf (vim my.cnf)

    • [mysqld]
      ##置server_id, 同一局域网中需要唯一
      server_id=101
      ##定不需要同步的数据库名称
      binlog-ignore-db=mysql
      ##启二进制日志功能
      log-bin=mall-mysql-bin
      ##置二进制日志使用内存大小(事务)
      binlog_cache_size=1M
      ##置使用的二进制日志格式(mixed,statement,row)
      binlog_format=mixed
      ##二进制日志过期清理时间。默认值为0,表示不自动清理。
      expire_logs_days=7
      ##跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
      ##如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
      slave_skip_errors=1062
      
  3. 修改完配置后重启master实例

    • docker restart mysql-master
  4. 进入mysql-master 容器

    • docker exec -it mysql-master /bin/bash
    • mysql -uroot -proot
  5. master容器实例内创建数据同步用户

    • CREATE USER ‘slave’@‘%’ IDENTIFIED BY ‘123456’; #创建用户
    • GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘slave’@‘%’; #授权
    • 在这里插入图片描述
  6. 新建从服务器容器实例(3308)

    • docker run -p 3308:3306 --name mysql-slave \
      -v /mydata/mysql-slave/log:/var/log/mysql \
      -v /mydata/mysql-slave/data:/var/lib/mysql \
      -v /mydata/mysql-slave/conf:/etc/mysql \
      -e MYSQL_ROOT_PASSWORD=root \
      -d mysql:5.7
      
  7. 进入**/mydata/mysqI-slave/conf** 目录下新建my.cnf (vim my.cnf)

    • [mysqld]
      ## 设置server_id,同一局域网中需要唯一
      server_id=102
      ## 指定不需要同步的数据库名称
      binlog-ignore-db=mysql
      ## 开启二进制日志功能,以备Slave作为其它数据库实例的Mastert时使用
      log-bin=mall-mysql-slave1-bin
      ## 设置二进制日志使用内存大小(事务)
      binlog_cache_size=1M
      ## 设置使用的二进制日志格式(mixed,statement,row)
      binlog_format=mixed
      ## 二进制日志过期清理时间。默认值为0,表示不自动清理。
      expire_logs_days=7
      ##跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
      ##如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
      slave_skip_errors=1062
      ## relay_Llog配置中继日志
      relay_log=mall-mysql-relay-bin
      ## log_slave_updates表示slave将复制事件写进自己的二进制日志
      log_slave_updates=1
      ## slave设置为只读(具有super权限的用户除外)
      read_only=1
      
  8. 修改完配置后重启master实例

    • docker restart mysql-slave
  9. 主数据库中查看主从同步状态

    • show master status;
    • 在这里插入图片描述
  10. 进入从数据库(mysql-slave容器)

    • docker exec -it mysql-slave /bin/bash
    • mysql -uroot -proot
  11. 从数据库中配置主从复制

    • 相关参数:
      master_host:  主数据库的lP地址;
      master_port:  主数据库的运行端口;
      master_user:  在主数据库创建的用于同步数据的用户账号;
      master_password:在主数据库创建的用于同步数据的用户密码;
      master_log_fle:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
      master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
      master_connect_retry:.连接失败重试的时间间隔,单位为秒。
      
      具体命令:change master to master_host='宿主机IP',master_port=3307(主库端口号),master_user='slave(主库创建的用户)',master_password='123456',master_log_file='mall-mysql-bin.000002(show master status; 查看的相关刻度)',master_log_pos=154,master_connect_retry=30;
      
  12. 从数据库中查看主从同步状态

    • show slave status \G; #show slave status;
    • 在这里插入图片描述
  13. 从数据库中开启主从同步

    • start slave;
  14. 查看从数据库状态有没有同步

    • show slave status \G;

    • 在这里插入图片描述

    • 可能出现Slave_SQL_Running: No(一般是事务回滚造成的)

    • 结局方法:1.stop slave ; 2. set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 3. start slave ;

  15. 主从测试,主库建表插数据,从库查看

    • 主库

    • 在这里插入图片描述

    • 从库

    • 在这里插入图片描述

  16. docker基本命令及介绍 【传送门】

  17. dockerFile基础笔记(传送门)https://blog.csdn.net/qq_46567096/article/details/124847910?spm=1001.2014.3001.5501

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值