zoukankan      html  css  js  c++  java
  • mysql 延时从库

    延时从库

    普通的主从复制可能存在不足
    1)逻辑损坏怎么办?
    2)不能保证主库的操作,从库一定能做
    3)高可用?自动failover?
    4)过滤复制
    
    企业中一般会延时3-6小时
    延时从库配置方法
    
    #停止主从
    mysql>stop slave;
    
    #设置延时为180秒
    mysql>CHANGE MASTER TO MASTER_DELAY = 180;
    
    #开启主从
    mysql>start slave;
    
    #查看状态
    mysql> show slave status G
    SQL_Delay: 60
    
    3.延时从库停止方法
    #停止主从
    mysql> stop slave;
    
    #设置延时为0
    mysql> CHANGE MASTER TO MASTER_DELAY = 0;
    
    #开启主从
    mysql> start slave;
    

    延时从库恢复数据案例

    0.思考

    #延时从库到底在哪里延时的?
    	当配置了延时从库,延时从库是在sql线程进行的延时,主库执行完sql语句,
            IO线程已经将binlog拿到了从库的relay-log,只不过sql线程没有执行,需要等待设置的延时时间归0后执行语句
    

    1.场景

    总数据量级500G,正常备份去恢复需要1.5-2小时
    1.配置延时3600秒
    mysql> CHANGE MASTER TO MASTER_DELAY = 3600;
    2.主库
    drop database db;
    3.怎么利用延时从库,恢复数据?
    
    提示:
    1.从库relaylog存放在datadir目录下
    2.mysqlbinlog 可以截取relaylog内容
    3.show relaylog events in 'db01-relay-bin.000001';
    

    2.环境准备

    1.日常备份
    	[root@db01 ~]# mysqldump -uroot -p123 -A -R --triggers --single-transaction --master-data=2 > /tmp/full$(date +%F).sql
    	
    2.设置延时从库
    	mysql> stop slave;
    	mysql> change master to master_delay=3600;
    	mysql> start slave;
    
    3.插入新数据
    	mysql> use master;
    	mysql> insert test values(100),(200);
    

    3.模拟删除数据库

    mysql> drop database master;
    

    4.使用延时从库恢复数据

    1.停止从库的sql线程
    	mysql> stop slave sql_thread;
    
    2.查看状态
    	mysql> show slave statusG
                 Slave_IO_Running: Yes
                Slave_SQL_Running: No
    
    3.导出从库相应的库
    	[root@db02 ~]# mysqldump -uroot -p123 -B master > /tmp/master.sql
    	
    4.截取relay-log位置点
    	1)确认起始位置点
    		[root@db02 ~]# cat /usr/local/mysql/data/relay-log.info
    		./db02-relay-bin.000002
    		283
    	2)确认结束位置点
    		[root@db02 ~]# mysqlbinlog /usr/local/mysql/data/db02-relay-bin.000002
    		COMMIT/*!*/;
    		# at 504
    	3)截取数据
    		[root@db02 ~]# mysqlbinlog --start-position=283 --stop-position=504 /usr/local/mysql/data/db02-relay-bin.000002 > /tmp/huifu.sql
    		
    5.将sql文件推送至主库
    	[root@db02 ~]# scp /tmp/master.sql 172.16.1.51:/tmp
    	[root@db02 ~]# scp /tmp/huifu.sql 172.16.1.51:/tmp
    	
    6.恢复数据到主库
    	mysql> source /tmp/master.sql;
    	mysql> source /tmp/huifu.sql;
    	
    7.查看主库数据是否恢复
    8.开启从库的sql线程
    	mysql> start slave sql_thread;
    
    #注意,有时为了数据准确在主库恢复数据时我们会关闭binlog,要是使用延时从库恢复数据,主库千万不要关闭binlog
    
  • 相关阅读:
    HDU4529 郑厂长系列故事——N骑士问题 —— 状压DP
    POJ1185 炮兵阵地 —— 状压DP
    BZOJ1415 聪聪和可可 —— 期望 记忆化搜索
    TopCoder SRM420 Div1 RedIsGood —— 期望
    LightOJ
    LightOJ
    后缀数组小结
    URAL
    POJ3581 Sequence —— 后缀数组
    hdu 5269 ZYB loves Xor I
  • 原文地址:https://www.cnblogs.com/xiaolang666/p/13932272.html
Copyright © 2011-2022 走看看