关系型数据库保持数据一致性

这个问题是再研究公司项目时想到的为什么能达到一致性。

主从间实现交叉执行sql命令的的步骤:

Master主服务器将对数据的操作记录到二进制日志中(Binary log),MySQL将事务串行(交叉执行)的写入二进制日志;

 Slave从服务器将二进制日志(Binary log)copy到中继日志当中(Relay log)。首先,slave开始一个工作线程——I/O线程。

  • slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接;
  • 开始binlog dump process;
  • 如果binlog dump process已经跟上master,它会睡眠并等待master产生新的事件。
  • I/O线程将这些事件写入中继日志;
  •  SQL slave thread(SQL从线程)从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致

若是失败了呢:

做一个简单的模拟,若一个shell脚本在执行时自动提交由于脚本编辑有错误的地方,这个错误条的前一条sql执行插入的数据入库了,但因为sql脚本插入报错了所以后续本来可以插入的数据因为此条停止了插入这种情况下,关闭自动提交用代码来模拟采取手动提交的方式使数据入库,入库报错不执行或有别的库成功就进行同步回滚。

简单说将主从库操作都记录下来在其他主或从中再次执行若失败进行回滚。成功共同写入

posted @ 2021-09-08 11:31  小裴和他的接口们  阅读(171)  评论(0)    收藏  举报