zoukankan      html  css  js  c++  java
  • mysql学习笔记四 —— AB复制

    要点:
    ab复制

    mysql集群架构流程:

    ABB(主从复制)-->MHA(实现mysql高可用、读写分离、脚本控制vip飘逸)-->haproxy(对slave集群实现分发,负载均衡)-->keepalive(预防一台haproxy单点故障,对两台及以上的haproxy实现高可用)

    1、MySQL复制特性 --MySQL AB复制,即主从复制 master slave
    备份(容灾)
    减轻master压力 AB 读写分离
    拓展: AA master-master 主主复制
    ABBB 一主多从

    1.1 AB复制过程(原理)
    是一种异步复制,5.5版本之后可以实现半同步复制。
    master将所有的增删改(DML)的操作写入到binlog中;
    slave上的IO线程登陆到master上拉取binlog并写入到relay log(中继日志)中;
    slave上的SQL线程读取中继日志并将SQL语句在本地执行,这样数据同步。

    slave上的两个线程:
    io线程:读取master上的binglog日志,并写入到本机上的relay log中
    SQL线程:读取relay log,并将其(SQL语句)应用到本地

    1.2 搭建AB复制
    1.2.1 分析都需要做什么
    a.master和slave确定身份(server_id:越小越优先)
    b.master开启binglog日志
    c.master设置复制账户和赋权
    d.slave确定从binglog的什么位置开始应用sql语句

    ip规划:
    251 master
    241 slave

    1.2.2 步骤
    master:
    1) 开启binglog
    vim /etc/my.cnf
    server-id=1 //确定身份,id小的优先作为master
    log-bin=binlog
    log-bin_index=binlog.index

    2) 创建专用复制用户,允许从slave上连过来的复制用户
    grant replication slave on *.* to 'repl'@'192.168.19.241' identified by '123';
    flush privileges;
    show grants for jeck@13.1.1.2;

    3)查看master当前的binglog日志及位置信息
    show master statusG
    mysql> show master statusG
    *************************** 1. row ***************************
    File: binlog.000003
    Position: 258


    slave:
    1)确定身份,可选的设置中继日志名和中继日志索引
    server-id=3
    relay-log=/var/lib/mysql/relay_log    #也可以不写,mysql默认开启中继日志
    relay-log_index=/var/lib/mysql/relay_log.index

    2)设置slave找谁拉取binglog,从哪个位置开始拉...(在拉之前需要关闭slave,拉完之后再开启)
    change master to...
    mysql> change master to master_host='192.168.19.251', master_port=3306, master_user='repl', master_password='123', master_log_file='binlog.000003', master_log_pos=4;


    3) 开启slave
    start slave; 


    4)查看slave状态
    show slave statusG
    Slave_IO_State: Waiting for master to send event binlog event :二进制事件,即master上产生的增删改的操作
    Master_Host: 192.168.19.251
    Master_User: repl
    Master_Port: 3306
    Connect_Retry: 60
    Master_Log_File: binlog.000003 //master上的当前的binglog日志
    Read_Master_Log_Pos: 518 //读取到的binglog的位置
    Relay_Log_File: relay_log.000002 //本地中继日志文件
    Relay_Log_Pos: 508 //本地中级日志位置
    Relay_Master_Log_File: binlog.000003*** //当前中继日志中记录的是master上的哪一个binlog日志文件
    Slave_IO_Running: Yes //IO 线程状态
    Slave_SQL_Running: Yes //SQL线程状态
    Replicate_Do_DB:
    Replicate_Ignore_DB:
    Replicate_Do_Table:
    Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
    Replicate_Wild_Ignore_Table:
    Last_Errno: 0
    Last_Error:
    Skip_Counter: 0
    Exec_Master_Log_Pos: 518*** //执行到的binglog的位置,去对比show master statusG 看到的位置,可以得出有没有延迟

    5) 测试
    在master上创建库和表并插入数据,然后到slave上看下有没有同步过来

    问题:
    A已经运行了一段时间,才想着搭建AB复制:
    1、A上全库备份,并恢复到B上
    2、B再去 change master to

    实验过程:
    在master上
    a.全库备份
    mysqldump --all-databases -x > /opt/all.sql
    b.编辑配置文件与之前相同

    c.设置复制专用用户及权限

    同上...

    看一下master状态:
    同上...

    在slave上
    先获得master上的全库备份,并恢复在本地
    mysql < /opt/all.sql

    后面就一样的


  • 相关阅读:
    UIScrollView设置滑动的距离
    iOS动画效果和实现
    cmd 编码 utf8
    详细的ifcfg-eth0配置详解
    Centos下 Nginx安装与配置
    linux安装目录
    utf8 和 UTF-8 的区别
    后台添加搜索功能讲解
    移动端 禁横向滚动
    PC端 $_SERVER 说明
  • 原文地址:https://www.cnblogs.com/dannylinux/p/8031712.html
Copyright © 2011-2022 走看看