• mysql主从复制


    为什么要搭建主从架构

    1. 主库出现问题,可以快速切换到从库提供服务。
    2. 读写分离,降低主库的访问压力。
    3. 可以在从库中执行备份,以避免备份期间影响主库的服务。

    主从复制原理

    在这里插入图片描述

    1. Master将数据变化记录到binlog。
    2. Slaver通过一个IO线程来拉取Master上的binlog,写到relaylog中。
    3. Slaver的Sql线程将relaylog中的数据重放到从库中。

    搭建主从架构

    主节点

    创建文件夹和配置文件

    mkdir /uni/docker/mysql/master/data
    mkdir /uni/docker/mysql/master/conf
    
    #配置master节点
    vi /uni/docker/mysql/master/conf/my.cnf
    
    [mysqld]
    #同一局域网内的server-id必须唯一
    server-id=1
    #开启二进制日志功能,并设置日志文件名,文件名可以随便取名(关键)
    log-bin=mysql-bin
    
    
    ##启动master节点
    docker run -idt --privileged=true --name=mysql-master -p 3301:3306 -v /uni/docker/mysql/master/data:/var/lib/mysql -v /uni/docker/mysql/master/conf/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    mysql执行下面的指令

    mysql> create user 'master'@'%' identified  WITH 'mysql_native_password'  by '123456'; ---创建一个用户用于从节点连接进行拉取备份
    Query OK, 0 rows affected (0.01 sec)
    mysql> grant replication slave,replication client on *.* to 'master'@'%';  ---授予用户备份权限
    Query OK, 0 rows affected (0.00 sec)
    
    mysql>  show master status;  --查询主节点的状态,重点关注Position 
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000003 |      157 |              |                  |                   |
    +---------------+----------+--------------+------------------+-------------------+
    1 row in set (0.01 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    从节点

    mkdir -p /uni/docker/mysql/slave_01/data
    mkdir -p /uni/docker/mysql/slave_01/conf
    touch /uni/docker/mysql/slave_01/conf/my.cnf
    
    [client]
    default-character-set=utf8
    
    [mysqld]
    character-set-server=utf8
    #同一个局域网内server-id必须具有唯一性
    server-id=2
    #开启binlog功能,以备作为其他slave的master
    log-bin=mysql-slave-bin
    #指定中继日志
    relay-log=slave_01-relay-bin
    
    ##启动slave-01节点
    docker run -idt --privileged=true --name=mysql-slave-01 -p 3302:3306 -v /uni/docker/mysql/slave_01/data:/var/lib/mysql -v /uni/docker/mysql/slave_01/conf/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    从节点mysql执行:

    -- 关闭同步
    stop slave;
    -- 设置同步信息
    change master to master_host='172.17.0.4' ,master_port=3306,master_user='master',master_password='123456',master_log_file='binlog.000003',master_log_pos=157,master_connect_retry=30;
    -- 开启同步
    start slave;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    docker inspect --format=‘{{.NetworkSettings.IPAddress}}’ mysql-master 查询容器mysql-master的内网ip

    检查slave状态:

    show slave status;
    
    • 1

    关注这两个属性如图即为开启了
    在这里插入图片描述

    遗留问题

    在my.cnf中配置的binlog_ignore_db和binlog_do_db都没生效,不知道为什么。

  • 相关阅读:
    [Shell详解-5]:test命令与判断符号[]
    Java 单例模式——双检锁
    Android 驾车出行路线规划
    centos7使用docker-compose一键搭建mysql高可用主从集群
    仿大众点评——秒杀系统部分02
    Redis--线程模型详解
    matlab simulink 电网扫频仿真和分析
    Collection集合体系(ArrayList,LinekdList,HashSet,LinkedHashSet,TreeSet,Collections)
    Linux学习 - vi/vim编辑器
    计算机网络 传输层
  • 原文地址:https://blog.csdn.net/qq1049545450/article/details/133035186