10 : mysql 主从复制

摘要:
只有在倒计时结束后,SQL线程才会将数据同步到从属数据库SQL_延迟:60SQL_剩余延迟:56……停止延迟:mysql˃停止保存;mysql˃CHANGEMASTERTOMASTER_DELAY=0;mysql˃startslave;--------------------------------------------模拟失败并思考:0。总数据大小为500G。从正常备份恢复需要1.5-2小时。1.配置3600秒的延迟。MySQL˃CHANGEMASTERTOMASTER_DELAY=3600;2.主数据库为dropdatabasedb;3.如何延迟从数据库恢复数据?企业3-6小时)mysql-S/data/3308/mysql.sockshowslavestausGmysql˃stopsave;mysql˃CHANGEMASTERTOMASTER_DELAY=300;mysql˃startslave;主数据库:mysql-S/data/3307/mysql.sockuseworld;createtablec3select*fromcity;从mysql.user创建表c4select*;2.销毁,模拟数据库删除失败。)mysql-S/data/3307/mysql.sockdropdatabaseworld;3.从数据库中,关闭SQL线程mysql-S/data/3308/mysql.sockstopslavesql_thread;(在5分钟内停止sql线程,否则它将在超过5分钟后同步到从属数据库。)4。截取中继日志起点:cd/data/3308/data/catlay log。信息/db01继电器箱。0000002283终点:mysql-S/data/3308/mysql.sockshowrelaylogevents in'db01 relay bin。0000002'(查找drop语句的前一个位置。

延时从库

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

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

延时从库?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;

免责声明:文章转载自《10 : mysql 主从复制》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IDEA 单元测试 导入JUnit4到项目Java的访问修饰符的作用范围下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ajax jsonp函数调用

jsonp数据 jsonpHandler({name:"liujinyu",age:"24"}) ajax调用 $.ajax({type:'GET',url:"http://10.14.85.90/data/people.html",dataType:'jsonp',cache:true,async:true,//jsonp: "jsonpHandler"...

Windows下Redmine 的安装步骤

本文介绍Windows下Redmine的安装步骤。1、给DOS添加ruby运行环境(下载并安装rubyinstaller-1.8.7-p249-rc2.exe)下载地址:http://rubyforge.org/frs/?group_id=167&release_id=42563(在下载页面中已经找不到1.8.7-p249了,应该下载rubyins...

mysql,oracle查询当天的数据

mysql: DATEDIFF() 函数返回两个日期之间的时间。 比如查询今天打卡的人员信息,只需要条件是打卡时间和当前时间差值为零就可以了 SELECT t.* FROM t_dkxq t WHERE DATEDIFF(t.dksj, NOW()) = 0  oracle: 原文链接:oracle 查询当天数据的sql条件写法...

Java多线程:向线程传递参数的三种方法

在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果。但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别。由于线程的运行和结束是不可预料的,因此,在传递和返回数据时就无法象函数一样通过函数参数和return语句来返回数据。本文就以上原因介绍了几种用于向线程传递数据的方法...

分享一些 Kafka 消费数据的小经验

前言 之前写过一篇《从源码分析如何优雅的使用 Kafka 生产者》 ,有生产者自然也就有消费者。 建议对 Kakfa 还比较陌生的朋友可以先看看。 就我的使用经验来说,大部分情况都是处于数据下游的消费者角色。也用 Kafka 消费过日均过亿的消息(不得不佩服 Kakfa 的设计),本文将借助我使用 Kakfa 消费数据的经验来聊聊如何高效的消费数据。...

21-CPU案例:如何提高LLC(最后一级缓存)的命中率

面两讲中,我介绍了性能优化的六大原则和十大策略。从今天开始,我们来通过具体案例的解决方案讲解,了解这些原则和策略是如何应用的。 首先,我们要来探讨的是一个CPU相关的性能优化案例。 这个性能案例,是关于CPU的最后一级缓存的。你应该知道,最后一级缓存(一般也就是L3),如果命中率不高的话,对系统性能会有极坏的影响(相关基础知识建议回顾第15讲)。所以对这一...