zoukankan      html  css  js  c++  java
  • Docker中mysql数据同步

    Docker实现mysql单向主从同步

    1.在Docker中下载mysql镜像

    docker pull mysql:5.7
    

    2.创建mysql容器

    #创建主节点mysql与外部服务器3307端口映射,同时做数据挂载实现与本地服务器数据持久同步化
    ➜ ~ docker run -d -p 3307:3306 -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql_master mysql:5.7
    
    #创建子节点mysql与外部服务器3308端口映射
    ➜ ~ docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql_slave mysql:5.7
    

    3.查看容器

    4.配置主节点mysql

    # 进入 msyql_master 容器内部
    docker exec -it mysql_master /bin/bash
    
    # 同步时间
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    echo 'Asia/Shanghai' >/etc/timezone
    
    # 更换源
    mv /etc/apt/sources.list /etc/apt/sources.list.bak
    echo "deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free" >> /etc/apt/sources.list
    echo "deb http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free" >>/etc/apt/sources.list
    
    # 安装vim
    apt-get update
    apt-get install vim -y
    
    # 修改 my.cnf
    vim /etc/mysql/my.cnf
    
    my.cnf 添加内容:
    
    [mysqld]
    # 同一局域网内唯一ID
    server-id=1
    # 开启二进制日志功能
    log-bin=mysql-bin
    # 开启日志
    # general_log = 1
    # general_log_file = /var/log/mysql/general_sql.log
    # 需要忽略的库,忽略后不同步此库
    binlog-ignore-db=information_schema
    binlog-ignore-db=cluster
    binlog-ignore-db=mysql
    # 需要同步的库
    # binlog-do-db=test
    
    #退出容器并重启容器
    docker restart mysql_master
    
    #进入数据库
    mysql -uroot -p123456
    
    #查看server id(这个id是在my.cnf文件中进行更改)
    show variables like 'server_id';
    

    #查看 master 的 binlog,此时需要保证Master库不能做任何操作,否则将会引起状态变化
    show master status;
    

    #创建数据同步用户
    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT on *.* TO 'slave'@'%';
    
    #验证是否授权成功
    show grants for slave;
    

    使用创建用户进行登录测试

    mysql -uslave -p123456
    

    5.配置子节点mysql

    # 进入 slave 容器内部
    docker exec -it mysql_slave /bin/bash
    
    # 同步时间
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    echo 'Asia/Shanghai' >/etc/timezone
    
    # 更换源
    mv /etc/apt/sources.list /etc/apt/sources.list.bak
    echo "deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free" >> /etc/apt/sources.list
    echo "deb http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free" >>/etc/apt/sources.list
    
    # 安装vim
    apt-get update
    apt-get install vim -y
    
    # 修改 my.cnf
    vim /etc/mysql/my.cnf
    
    my.cnf 添加内容:
    
    [mysqld]
    # 同一局域网内唯一ID
    server-id=2
    # 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
    log-bin=mysql-slave-bin
    # relay_log配置中继日志
    relay_log=mysql-relay-bin
    # 开启日志
    # general_log = 1
    # general_log_file = /var/log/mysql/general_sql.log
    # 需要忽略的库,忽略后不同步此库
    binlog-ignore-db=information_schema
    binlog-ignore-db=cluster
    binlog-ignore-db=mysql
    replicate-ignore-db=mysql
    # 需要复制的库
    # replicate-do-db=ufind_db
    log-slave-updates
    slave-skip-errors=all
    slave-net-timeout=60
    

    重启容器

    docker restart slave_mysql
    
    #进入数据库
    mysql -uroot -p123456
    
    #查看server id(这个id是在my.cnf文件中进行更改)
    show variables like 'server_id';
    

    #在容器外部使用docker命令查询主节点容器的独立IP
    docker inspect --format='{{.NetworkSettings.IPAddress}}'  master_mysql
    
    #在子节点数据库中进行与主节点的链接配置
    CHANGE MASTER TO MASTER_HOST='172.17.0.3', MASTER_PORT=3306,  MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154, MASTER_CONNECT_RETRY=30, MASTER_BIND='';
    #字段解释
    master_host: Master的地址
    master_port: Master的端口号
    master_user: 用于数据同步的用户
    master_password: 用于同步的用户的密码
    master_log_file: 指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
    master_log_pos: 从哪个 Position 开始读,即上文中提到的 Position 字段的值
    master_connect_retry: 如果连接失败,重试的时间间隔,单位是秒,默认是60秒
    

    #启动子节点
    start slave user='slave' password='123456';
    *如果 slave 报错:  [ERROR] [MY-010584] [Repl] Slave I/O for channel , 尝试使用 root
    start slave user='root' password='123456';
    

    查看 slave 状态
    show slave statusG
    

    查看连接错误时的日志: docker logs -f slave_mysql

    6.测试

    在主节点数据库建库建表插入数据,在子节点数据库进行查看,但由于是单向的主从同步在子节点数据库进行增删改操作时无法同步到主节点数据库中。(在项目中写入操作在主库中完成,而查询操作可以在子库中进行以减轻主库的压力)

  • 相关阅读:
    KMP的next[]数组
    [Gauss]HDOJ3976 Electric resistance
    [Gauss]POJ2065 SETI
    [Gauss]POJ2947 Widget Factory
    更好的 SQL 模式的 10 条规则
    BZOJ2460: [BeiJing2011]元素
    BZOJ2115: [Wc2011] Xor
    洛谷P3164 [CQOI2014]和谐矩阵
    POJ1222熄灯问题
    POJ1830开关问题
  • 原文地址:https://www.cnblogs.com/A-Nan-q/p/15095774.html
Copyright © 2011-2022 走看看