数据库杂谈之-MySQL延时复制库

前言:

我相信很多人都遭遇过MySQL主从复制延迟的问题,处理方案基本上就是你能搜索到的那些,那么我今天却要说说如何让MySQL延迟复制。对于刚组建的团队来说,这可能会救了你的项目。

 简单的说延迟复制就是设置一个固定的延迟时间,比如1个小时,让从库落后主库一个小时。

延迟复制作用

存在即合理,延迟复制可以用来解决以下三类问题:

 1.用来在数据库误操作后,快速的恢复数据。

  比如有人误操作的表,那么这个操作在延迟时间内,从库的数据并没有发生变化,可以用从库的数据进行快速恢复。

  把服务停了,把从库的表直接导入主库,补binlog,binglog不能恢复表

 2.用来做延迟测试

  比如你做好的数据库读写分离,把从库作为读库,那么你想知道当数据产生延迟的时候到底会发生什么。那么你就可以使用这个特性也模拟延迟。

  压力不大的时候,延迟会很小,延迟比较大的时候是什么样子?主从延迟5分钟是什么样子?

 3.用于老数据的查询等需求

  比如你经常需要查看某天前一个表或者字段的数值,你可能需要把备份恢复后进行查看,

  如果有延迟从库,比如延迟一周,那么就可以解决这样类似的需求。 当然,并不是所有团队都有这样的需求

设置延迟复制

延迟复制配置,通过设置Slave上的MASTER TO MASTER_DELAY参数实现:

CHANGE MASTER TO MASTER_DELAY = N;

N为多少秒,该语句设置从数据库延时N秒后,再与主数据库进行数据同步复制。

具体操作:

   登陆到Slave数据库服务器

mysql>stop slave;
mysql>CHANGE MASTER TO MASTER_DELAY = 600;
mysql>start slave;
mysql>show slave status \G;

查看SQL_Delay的值为600,表示设置成功。

 

命令注释:

SQL_Delay:一个非负整数,表示秒数,Slave滞后多少秒于master。

SQL_Remaining_Delay:当 Slave_SQL_Running_State 等待,直到MASTER_DELAY秒后,Master执行的事件,

此字段包含一个整数,表示有多少秒左右的延迟。在其他时候,这个字段是0。

  好的,这就是今天的内容,小知识,短而美,长篇的干货,非常棒,但是我们真正学会的确比较少。把这个小知识积累起来吧。

生产应用mysql用户,不允许delete

1、只有insert、update、select
2、删除最佳实践?

  1. 没有让开发
  2. 就是在数据库中加一个删除标识字段,如: isdel=1 这样就代码删除的字段了
  3. 直接限制mysql删除

启动MySQL的时候加上参数 -U-U, --safe-updates Only allow UPDATE and DELETE that uses keys.

他的作用是防止执行delete的时候没带有条件语句,如果没加上where则语句不执行。

3、生产案例

1、数据对不上了

  被入侵?运维删除?开发删除?有权限的人太多了
2、安全没最做好

3、多收钱了

有条件的情况下,做一个延迟1小时的从库

1、不是为了做恢复,
2、我要上线一个功能,要知道之前是什么样子(相当模拟上线功能),要update很多东西,备份可以,但是备份不直观

devops

1、所有DML必须备份有dml_backup.sh和table_name

2、数据库操作必须有数据回滚脚本和修改脚本两个脚本,
  哪怕一年都用不上,没有这个政策频繁出现故障

案例

1、update一个字段涉及到5行
2、update没有备份机制,改回去

  1. 把昨天的备份拉出来恢复一边
  2. 把昨天的binglog恢复回去
  3. 再查看有没有操作
posted @ 2018-03-04 13:35  活的潇洒80  阅读(558)  评论(0编辑  收藏  举报