zoukankan      html  css  js  c++  java
  • 10 : mysql 主从复制

    延时从库

    主从复制很好的解决了物理损坏,但是如果主库有个误删除写入的操作怎么办?

    正常情况下从库也会同步这个错误的,企业中应该怎么避免这个情况?
    这个时候就需要使用延时同步来解决:

    延时从库?delay(延时)从节点同步数据。

    对SQL线程进行延时设置。IO线程正常的执行。
    企业中一般延迟3-6小时

    延时从库的配置过程:
    mysql>stop slave;
    mysql>CHANGE MASTER TO MASTER_DELAY = 60; (延时60s)
    mysql>start slave;
    mysql> show slave status G
    Master_UUID: c1bc62f5-e643-11e9-8060-000c29d5441f
    Master_Info_File: /data/3308/data/master.info
    SQL_Delay: 60
    SQL_Remaining_Delay: NULL (没有数据的时候显示NULL)

    主库执行个插入数据,会发现开始倒计时。倒计时结束sql线程才会把数据同步到从库里面
    ... ...
    SQL_Delay: 60
    SQL_Remaining_Delay: 56 (倒计时秒速)
    ... ...


    停止延时:
    mysql> stop slave;
    mysql> CHANGE MASTER TO MASTER_DELAY = 0;
    mysql> start slave;


    --------------------------------------------
    模拟故障,思考:
    0、总数据量级500G,正常备份去恢复需要1.5-2小时
    1、配置延时3600秒
    mysql>CHANGE MASTER TO MASTER_DELAY = 3600;
    2、主库做了drop database db;
    3、怎么利用延时从库,恢复数据?
    -------------------------------------------
    提示:
    1、从库relaylog存放在/data/3308/data
    2、mysqlbinlog 可以截取relaylog内容
    3、show relay log events in 'db01-relay-bin.000001';

    处理的思路:
    1、停止SQL线程
    mysql> stop slave sql_thread;

    2、截取relaylog到误删除之前点

    (1)relay-log.info 获取到上次运行到的位置点,作为恢复起点
    (2)分析relay-log的文件内容。,获取到误删除之前position

    ----------------------------------------
    ****** 模拟故障处理过程,并利用延时从库处理故障

    0、关闭延时
    mysql -S /data/3308/mysql.sock
    mysql> stop slave;
    mysql> CHANGE MASTER TO MASTER_DELAY = 0;
    mysql> start slave;


    模拟数据:

    mysql -S /data/3307/mysql.sock
    source /root/world.sql
    use world;
    create table c1 select * from city;
    create table c2 select * from city;

    1、开启从库延时5分钟(这里是模拟,所以时间短。企业是3-6小时)

    mysql -S /data/3308/mysql.sock
    show slave status G

    mysql>stop slave;
    mysql>CHANGE MASTER TO MASTER_DELAY = 300;
    mysql>start slave;

    主库:
    mysql -S /data/3307/mysql.sock
    use world;
    create table c3 select * from city;(把word库的city表数据给c3)
    create table c4 select * from mysql.user;(把mysql库的user表数据给c4)


    2、破坏,模拟删库故障。(以下步骤在5分钟内操作完成。)

    mysql -S /data/3307/mysql.sock
    drop database world;


    3、从库,关闭SQL线程(从库这时候会倒计时,在倒计时之前关闭sql线程)
    mysql -S /data/3308/mysql.sock
    stop slave sql_thread; (在5分钟内停掉sql线程,不然超过5分就同步到从库 了。)

    4、截取relay-log
    起点:(relaylog 的起始位置)
    cd /data/3308/data/
    cat relay-log.info
    ./db01-relay-bin.000002
    283

    终点:(执行drop那条语句的前一条位置)
    mysql -S /data/3308/mysql.sock
    show relaylog events in 'db01-relay-bin.000002' (找到drop语句的前一位置点条。)
    db01-relay-bin.000002 | 268047 | Query | 3307 | 1781140 | drop database word

    从relaylog里面导出这一段数据。
    mysqlbinlog --start-position=283 --stop-position=268047 /data/3308/data/db01-relay-bin.000002 >/tmp/relay.sql


    5、恢复relay.sql

    (1)取消从库身份:
    mysql> stop slave;
    mysql> reset slave all;
    (2)恢复数据(从库执行,这样从库就是一个完成的数据了,从变成主,)
    mysql> set sql_log_bin=0;
    mysql> source /tmp/relay.sql
    mysql> use world
    mysql> show tables;


    6 . 可以把从当做主库,就可以了。

    mysql -uroot -p123 -S /data/3308/mysql.sock
    mysql>stop slave;
    mysql>reset slave all;

  • 相关阅读:
    Python网络编程学习_Day9
    Python基础知识学习_Day8
    Python基础知识学习_Day7
    Python基础知识学习_Day6
    Python基础知识学习_Day5
    Python基础知识学习_Day4
    Python基础知识学习_Day3
    Python基础知识学习_Day2
    Python基础知识学习_Day1
    如何使用ssh工具便于远程管理
  • 原文地址:https://www.cnblogs.com/jim-xu/p/11651259.html
Copyright © 2011-2022 走看看