一,MySQL主从配置原理
1. mysql支持的复制格式
基于语句复制(STATEMENT)
- (优点)基于statement复制的优点很明显,简单的记录执行语句同步到从库执行同样的语句,占用磁盘空间小,网络传输快,并且通过mysqlbinlog工具容易读懂其中的内容 。
- (缺点)并不是所有语句都能复制的比如:insert into table1(create_time) values(now()),取的是数据当前时间,不同的数据可能时间不一致,另外像存储过程和触发器也可能存在问题。
基于行复制(ROW)
- (优点)从MySQL5.1开始支持基于行的复制,最大的好处是可以正确地复制每一行数据。一些语句可以被更加有效地复制,另外就是几乎没有基于行的复制模式无法处理的场景,对于所有的SQL构造、触发器、存储过程等都能正确执行。
- (缺点)主要的缺点就是二进制日志可能会很大,比如:update table1 set name='admin' where id<1000,基于行复制可能需要复制1000条记录,而基于语句复制只有一条语句,另外一个缺点就是不直观,所以,你不能使用mysqlbinlog来查看二进制日志。
混合类型的复制(MIXED)
- 混合复制是借用语句复制和行复制的有点进行整合,MIXED也是MySQL默认使用的二进制日志记录方式,但MIXED格式默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。比如用到UUID()、USER()、CURRENT_USER()、ROW_COUNT()等无法确定的函数。
2. mysql主从复制作用
- 数据分布
- 主从分摊负载。
- 高可用性和故障切换。
- 数据备份。
- 利用从服务器做查询。
3. mysql主从复制原理
- binlog Events 我们知道binlog日志用于记录所有对MySQL的操作的变更,而这每一个变更都会对应的事件,也就是Event。index文件记录了所有的binlog位置 每个binlog会有heade, event,rotate三个event,binlog的结构如下。
常见event如下:
- Format_desc:一个全新的binlog日志文件event信息
- Rotate :日志分割时结束event。
- Table_map:表,列等元数据的event。
- Query:查询,就是DDL这类的Event,如果binlog格式为STATEMENT格式,增删改都属于Qeury event。
- Write_rows:Binlog为ROW格式时的插入event。
- Update_rows:Binlog为ROW格式时的更新event。
- Delete_rows:Binlog为ROW格式时的删除event。
我们也可以通过binlog 看到这些事件,通过mysql提供的工具查看binlog日志,如下: