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
    
  • 相关阅读:
    因安装包依赖问题导致无法安装的解决办法!
    Ubuntu18.04安装qemu遇到问题-qemu : Depends: qemu-system (>= 1:2.11+dfsg-1ubuntu7)
    理解mount -t proc proc /proc
    printf "%.*s"
    Linux 内核内存分配函数devm_kmalloc()和devm_kzalloc()
    为什么 extern 使用 const 修饰的变量会编译不过?
    php openssl_sign 对应 C#版 RSA签名
    win7中用iis部署ssl服务
    找出windows系统上最大的文件
    windows 创建指定大小文件
  • 原文地址:https://www.cnblogs.com/xiaolang666/p/13932272.html
Copyright © 2011-2022 走看看