zoukankan      html  css  js  c++  java
  • 基于 Docker 搭建 MySQL 主从复制

    搭建环境

    • Docker 18.09.2
    • MySQL 5.7.13
    • Mac

    安装Docker

    • 验证:docker version

    启动Docker

    安装MySQL

    • 使用Docker拉取MySQL镜像:docker pull mysql:5.7.13
    • 运行主容器
    # --name 为容器指定名称,这里是master
    # -p 将容器的指定端口映射到主机的指定端口,这里是将容器的3306端口映射到主机的3306端口
    # -e 设置环境变量,这里是指定root账号的密码为root
    # -d 后台运行容器,并返回容器ID mysql:5.7.13 指定运行的mysql版本
    docker run --name master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13
    docker run --name slave1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13
    
    • 验证是否启动成功:docker ps -a

    创建master的复制账号

    • 使用Navicat登录
      • 连接名 Master
      • 主机名或IP地址 127.0.0.1
      • 端口号 3306
      • 用户名 root
      • 密码 root
    • 创建账号
    GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%' IDENTIFIED BY 'backup';
    FLUSH PRIVILEHES;
    SHOW GRANTS FOR 'backup'@'%';
    

    修复MySQL配置信息

    • 创建目录
      • /opt/mysql/master
      • /opt/mysql/slave1
    • 从容器中拷贝一份MySQL配置
    docker cp master:/etc/mysql/my.cnf /opt/mysql/master
    docker cp slave1:/etc/mysql/my.cnf /opt/mysql/slave1
    
    • 修改/opt/mysql/master/my.cnf
    #[mysqld] 在该节点后加上
    #log-bin=mysql-bin使用binary logging,mysql-bin是log文件名的前缀
    #server-id=1唯一服务器ID
    log-bin=mysql-bin
    server-id=1
    
    • 修改/opt/mysql/slave1/my.cnf
    #[mysqld] 在该节点后加上
    log-bin=mysql-bin
    server-id=2
    
    • 将修改后的文件覆盖Docker中MySQL配置文件
    docker cp /opt/mysql/master/my.cnf  master:/etc/mysql/my.cnf
    docker cp /opt/mysql/slave1/my.cnf  slave1:/etc/mysql/my.cnf
    
    • 重启Docker 让配置生效
    docker restart master
    docker restart slave1
    

    配置主从复制

    • 使用Navicat登录
      • 连接名 Slave1
      • 主机名或IP地址 127.0.0.1
      • 端口号 3307
      • 用户名 root
      • 密码 root
    • 执行以下SQL
    #查看容器运行的各种数据 docker inspect master
    #MASTER_HOST的IP可以通过 docker inspect master 查看
    CHANGE MASTER TO MASTER_HOST='172.17.0.2',MASTER_PORT=3306,MASTER_USER='backup',MASTER_PASSWORD='backup';
    START SLAVE;
    
    
    • 验证,检查配置是否成功
    # Slave_IO_State字段状态
    #Waiting for master to send event 正常
    #Connecting to master 配置失败,具体原因查看日志追踪 docker logs slave1 -f 
    # Slave_IO_Running  字段为 Yes
    # Slave_SQL_Running 字段为 Yes
    SHOW SLAVE STATUS;
    

    测试

    在master上创建数据库、表、插入数据,看看再salve1上是否存在。

  • 相关阅读:
    Oracle11g聚合函数
    和为S的连续正数数列,动态规划,C++
    统计一个数组在排序数组中出现的次数,C++,二分查找
    寻找两个链表的第一个公共子节点,C++
    二维数组中的查找
    数组中的逆序对,C++,分治算法
    得到从小到大的第N个丑数的三种方式(C++)一维动态规划
    连续字数组的最大和(Java)一个int数组,求其中的最大的连续数的和
    n个整数,求这中间最小的k个整数(Java)
    两个字符串的最长公共子串求法(C++、动态规划)
  • 原文地址:https://www.cnblogs.com/zendwang/p/docker-install-mysql-master-slave.html
Copyright © 2011-2022 走看看