主备流程图
过程简介:主库A,从库B
从库B启动两个线程,第一个线程:io-thread 用于接收主库A发送的binlog数据,然后写入临时文件 relay log。第二个线程sql-thread用来读取relay log文件并解析后执行sql。
binlog 的三种格式
每个日志第一行为:server id,用来区分是那台机器生成的binlog日志。
例外:当执行的语句是重放语句时,则生成binlog的server id是重放前的(与重放的id保持一致)。用来解决mysql架构为双M架构时的日志循环。
statement
记录的就是 SQL 语句的原文
缺陷:可能主备不一致
例如:delete from t where a>=4 and t_modified<=‘2018-11-10’ limit 1;
假设在主库执行时使用的a索引字段进行删除一条数据,在从库上执行时使用t_modified字段进行删除一条记录。(同时符合这两个条件的有多条)
注意点: 当执行语句有依赖上下文时,回放binlog时注意在上下文参数下执行。例如:新增数据某条字段为时间类型:输入值为now();
row
记录的是sql执行的内容
例如:当前语句( delete from t where a>=4 and t_modified<=‘2018-11-10’ limit 1; )在binlog中如果以row格式存储,存储的是:具体删除了ID是多少的数据。
缺陷:如果删除修改数据量很大 ,则binlog文件会越来越大。
优势:恢复数据
执行错delete