MySql复制与日志 原理摘要

关于MySql复制 概述

MySql的复制主要使用二进制日志来完成。

原理

主数据库通过开启二进制日志(sync_binglog=1),将每次的数据更改事件写入二进制日志,备份数据库通过新开的IO线程不断读取主数据库的二进制日志到自己的中继日志,然后重放事件到自身,来实现复制,同时,备份数据库也可以开启二进制服务器,再次同步给其他数据库。
几点注意:
1. 二进制日志的记录分为两种:基于SQL语句的复制(逻辑复制)和基于行数据的,基于SQL语句的会将所有在主数据库执行的SQL语句记录下来,在备份数据库重放,而基于行数据的,则只会将数据的变化记录下来,供备份数据库重放。二者有以下优缺点:
* 基于语句的日志体积更小,可移植性更高(因为执行语句),并且日志文件可读性更高,但是语句执行成功还可能依靠外界因素,比如服务器变量,时间等。此外,基于语句的在触发器,存储过程的复制上存在一些问题
* 基于行的,虽然日志文件可读性不好,但是每次更新需要锁定的数据可能更少,效率更高,同时一定精准
2. 关于配置:主库和备库都要指定ID以防找不到服务器,循环复制等情况,然后主备数据库配置好复制的专门帐号,此外每次复制开始,备库上需要实行复制的起始index

拥有有一个事件的备份和自那个时间以来的二进制日志,就可以恢复数据库

关于InnoDB日志

InnoDB事务日志是循环记录的,若干的日志文件头尾连接,当日志写满后,循环从头再次覆盖写。
* InnoDB通过日志提高效率,通过先顺序写事务日志,后批量将数据写磁盘的方式提高IO效率,但是日志写入也是有缓存的,通过innodb_flush_at_trx_commit可以设置InnoDB是写日志到缓冲,每一秒钟刷新一次缓存到磁盘(取值0),每一个事务写入刷新一次缓存到磁盘(取值1,最安全),还是每次事务写一次缓存,每秒刷新到磁盘(取值2)

关于InnoDB写数据

InnoDB使用双写缓冲来写入数据,双写缓冲是在表空间中单独开辟的一块连续区域(共享表空间),数据修改都会先写这块连续区域,然后再写磁盘中的各表,因此数据写磁盘要写两次。使用双写的目的是为了避免写入磁盘时的意外,因为缓冲并不能原子性的写入到磁盘,如果写入时失败,块损坏,那么数据就丢失了,所以通过先写一个共享空间,写共享表空间是原子的.如果写共享空间失败了,InnoDB会使用事务日志计算,用磁盘上的原始数据中写回共享空间;如果写数据失败了,可以从共享空间恢复.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值