Docker 安装模拟 MySQL 主从复制集群(一主一从)

1、创建 Master 实例并启动

  1. 下载MySQL容器,并启动容器

    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. 参数说明:

    • -p 3307:3306:将容器的 3306 端口映射到主机的 3307 端口
    • -v /mydata/mysql/master/conf:/etc/mysql:将配置文件夹挂在到主机
    • -v /mydata/mysql/master/log:/var/log/mysql:将日志文件夹挂载到主机
    • -v /mydata/mysql/master/data:/var/lib/mysql/:将配置文件夹挂载到主机
    • -e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
  3. 修改 master 基本配置

    vim /mydata/mysql/master/conf/my.cnf
    #内容入下:
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    [mysqld]
    init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake
    skip-name-resolve
    #注意:skip-name-resolve 一定要加,不然连接 mysql 会超级慢
    
  4. 继续往my.cnf下(早[mysqld] 下加),添加 master 主从复制部分配置

    #server id 每个节点不能相同
    server-id=1
    #记录日志方式
    log-bin=mysql-bin
    #不是只读
    read-only=0
    binlog_format=row
    #主从同步的数据库
    binlog-do-db=canal
    binlog-do-db=gulimall_ums
    binlog-do-db=gulimall_pms
    binlog-do-db=gulimall_oms
    binlog-do-db=gulimall_sms
    binlog-do-db=gulimall_wms
    binlog-do-db=gulimall_admin
    
    #主从不同步的忽略的数据库
    replicate-ignore-db=mysql
    replicate-ignore-db=sys
    replicate-ignore-db=information_schema
    replicate-ignore-db=performance_schema
    
  5. 重启 master

    docker restart 容器id
    

2、创建 Slave 实例并启动

  1. 启动容器

    docker run -p 3317:3306 --name mysql-slaver-01 
    \ -v /mydata/mysql/slaver/log:/var/log/mysql 
    \ -v /mydata/mysql/slaver/data:/var/lib/mysql 
    \ -v /mydata/mysql/slaver/conf:/etc/mysql 
    \ -e MYSQL_ROOT_PASSWORD=root 
    \ -d mysql:5.7
    
  2. 参数说明:

    • -p 3317:3306:将容器的 3306 端口映射到主机的 3307 端口
    • -v /mydata/mysql/slaver/conf:/etc/mysql:将配置文件夹挂在到主机
    • -v /mydata/mysql/slaver/log:/var/log/mysql:将日志文件夹挂载到主机
    • -v /mydata/mysql/slaver/data:/var/lib/mysql/:将配置文件夹挂载到主机
    • -e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
  3. 修改 master 基本配置

    vim /mydata/mysql/master/conf/my.cnf
    #内容入下:
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    [mysqld]
    init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake
    skip-name-resolve
    #注意:skip-name-resolve 一定要加,不然连接 mysql 会超级慢
    
  4. 继续往my.cnf下(早[mysqld] 下加),添加 master 主从复制部分配置

    #从机的server id
    server_id=2
    #记录日志方式
    log-bin=mysql-bin
    #只读
    read-only=1
    #需要同步主节点的数据库
    binlog-do-db=gulimall_ums
    binlog-do-db=gulimall_pms
    binlog-do-db=gulimall_oms
    binlog-do-db=gulimall_sms
    binlog-do-db=gulimall_wms
    binlog-do-db=gulimall_admin
    #不需要同步主节点的数据库,也无需别人同步
    replicate-ignore-db=mysql
    replicate-ignore-db=sys
    replicate-ignore-db=information_schema
    replicate-ignore-db=performance_schema
    
  5. 重启 master

    docker restart 容器id
    

3、为 master 授权用户来他的同步数据

  1. 进入 master 容器或者使用Navicat连接后。
    docker exec -it mysql /bin/bash
    
  2. 进入 mysql 内部 (mysql –uroot -p)或使用SQL命令。
    • 授权 root 可以远程访问( 主从无关,为了方便我们远程连接 mysql)

       -- 授权root可以远程访问,使用Navicat连接需要先执行
      grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
      -- 刷新
      flush privileges;
      
    • 添加用来同步的用户

      GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456';
      
  3. 查看 master 状态
    show master status;
    

在这里插入图片描述

4、配置 slaver 同步 master 数据

  1. 进入 slaver 容器或者使用Navicat连接后。

    docker exec -it mysql-slaver-01 /bin/bash
    
  2. 进入 mysql 内部(mysql –uroot -p)或者使用Navicat连接。

    • 授权 root 可以远程访问( 主从无关,为了方便我们远程连接 mysql)
       -- 授权root可以远程访问,使用Navicat连接需要先执行
      grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
      -- 刷新
      flush privileges;
      
  3. 设置主库连接

    CHANGE MASTER TO 
    master_host = '192.168.56.10',-- master节点主机
    master_user = 'backup',-- master的复制数据账号密码
    master_password = '123456',
    master_log_file = 'mysql-bin.000003',-- 从主节点的那个日志记录文件开始同步
    master_log_pos = 0,-- 从日志的第几行开始同步
    master_port = 3306;-- 主机端口号
    
  4. 启动从库同步

    start slave;
    
  5. 查看从库状态

    show slave status;
    

    在这里插入图片描述

  6. 其他命令

    -- 停止从库同步
    STOP slave;
    #跳过一条记录日志
    SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
    #启动服务
    START slave;
    #查看从节点状态是否为yes
    SHOW SLAVE STATUS; 
    
  7. 创库创表创数据,进行验证。

你可能感兴趣的:(mysql,docker,数据库)