MySQL复制是基于主库上的二进制日志来完成,复制是异步的,可能存在延迟

MySQL日志分为:

  1、服务层日志:二进制日志、通用日志、慢查日志

  2、存储引擎层日志:innodb中重做日志和回滚日志

二进制日志:

  记录了所有对数据库修改的事件,包括DML和DDL,但是不包含因为出错回滚的日志。二进制日志格式分类:

STATMENT:SBR

基于段的格式binlog_format=STATMENT,MySQL5.7之前默认

在数据修改时执行的SQL语句,不论使用的时那种日志格式,在使用DDL语句都是基于段的格式

优点:

  日志记录量相对较小,解决磁盘及网络I/O,因为只是记录SQL语句,而不是每一行数据的变化

  不强制要求主从数据库的表的定义完全相同

缺点:

  必须要记录上下文信息,保证语句在从数据库上执行结果和主数据库上相同

  特定函数如UUID(),user()这类函数还是无法复制,会在主从数据库上产生差异

  对于存储过程、触发器,自定义函数在主从数据库进行的修改可能造成数据不一致

  相比基于row的复制方式需要更多地行锁

SHOW VARIABLES LIKE 'binlog_format';    //查看binlog是否开启,使用的是哪种
SET SESSION binlog_format=statement; //设置binlog使用statement
SHOW BINARY LOGS; //查看binlog文件有哪些
mysqlbinlog binlog.000097; //查看binlog文件,通过cmd或者在Linux环境使用,无法在连接工具上使用
SHOW BINLOG EVENTS in 'binlog.000097'; //查看binlog文件,在连接工具上使用
FLUSH LOGS; //刷新logs,新产生一个binlog文件
//下面是SQL语句
DROP TABLE IF EXISTS temp;
CREATE TABLE temp(id int, name VARCHAR(10));
INSERT INTO temp VALUES(1, 'sam');
INSERT INTO temp VALUES(2, 'jesen'); SHOW BINLOG EVENTS in 'binlog.000103'; //查看binlog.000103文件内容

 

ROW:RBR

  基于行的日志格式,如果因为误操作而修改了数据库中的数据,同时又没有备份可以恢复,通过日志中记录的日志操作,进行反向处理达到

数据恢复的目的

优点:

  主从复制更加安全,适用于任何SQL的使用,包括存储过程、触发器,自定义函数等

  对每行数据的修改比基于段的复制高效,减少从数据库锁的使用

缺点:

  要求主从表结构一致

  无法在从服务器上单独执行触发器

  记录日志量很大,因为这个问题,在MySQL5.7版本之后,通过参数binlog_row_image=[FULL|MINIMAL|NOBLOB]

Full:代表记录一行中所有列,无论这个列是否被修改,默认

Minimal:只记录修改的列

NoBlob:和full差不多,只是如果blob/text没有被修改,不会记录该列

PS:对于row的格式,如果通过mysqlbinlog查看日志,需要-vv参数,否则显示内容人工无法识别,例如:mysqlbinlog -vv binlog.000097;

mixed:

  混合日志格式binlog_format=mixed,根据SQL语句由系统决定使用基于row还是statement

综上:

  建议使用row,而非statement

MySQL系列(五)--二进制日志对主从复制的影响的更多相关文章

  1. MySQL基于二进制日志的主从复制

    一.什么是MySQL的主从复制? MySQL可以将一个数据库设置为主库,另一个数据库设置为该主库的从库,当主库发生了变更,会同步到从库中.MySQL的主从架构,可以是星型的,也可以是线型的. 星型架构 ...

  2. MySQL和Mariadb二进制日志binlog详解

    Mariadb/mysql提供了4中不同的日志,分别是错误日志(error.log).普通日志(general log).慢日志(slow log)以及二进制日志(binlog).错误日志记录了系统启 ...

  3. mysql运维-二进制日志BINARY LOG清理

       1.1 方法1:PURGE MASTER LOGS     语法: PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetim ...

  4. MySQL 5.7二进制日志

    简介 二进制日志是MySQL服务器用来记录数据修改事件的,比如INSERT.UPDATE.DELETE等会导致数据发生变化的语句,SELECT语句不会被记录在内.MySQL必须先执行完一条语句才能知道 ...

  5. MySQL复制(二):二进制日志、二进制日志的结构和内容

    通常只有即将执行完毕的语句才会写入到二进制日志中.但是一些特殊情况:语句附加的信息或直接代替语句被写入. 二进制日志记录的内容 作用:记录数据库中表的更变,用于复制和PITP(即时恢复) 基于语句SB ...

  6. MySQL第五天——日志

    日志 log_error(错误日志) 用于记录 MySQL 运行过程中的错误信息,如,无法加载 MySQL数据库的数据文件,或权限不正确等都会被记录在此. 默认情况下,错误日志是开启的,且无法禁止. ...

  7. 如何选择普通索引和唯一索引《死磕MySQL系列 五》

    系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强 ...

  8. Mysql系列五:数据库分库分表中间件mycat的安装和mycat配置详解

    一.mycat的安装 环境准备:准备一台虚拟机192.168.152.128 1. 下载mycat cd /softwarewget http:-linux.tar.gz 2. 解压mycat tar ...

  9. mysql系列五、mysql中having的用法

    HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 和 SELECT 的交互方式类似.WHERE 搜索条件在进行分组操作之前应用:而HAVING 搜索条件在进行分组操作之后应用. ...

随机推荐

  1. HTML中被废弃的标签<b><u><i><s>

    <strong>代替<b>给文字加粗 <ins>代替<u>给文本添加下划线 <em>代替<i>将文本倾斜 <del> ...

  2. Java开发系列-注解

    概述 在JDK5之后提供了一个新特性,和类.接口同级.定义时使用的关键字是@interface.注解主要有三个作用,分别是编译检查.替代配置文件.定义注解(元注解).分析代码(用到反射).注解的本质就 ...

  3. Nand Flash 控制器中的硬件 ECC 介绍

    ECC 产生方法 ECC 是用于对存储器之间传送数据正确进行校验的一种算法,分硬件 ECC 和软件 ECC 算法两种,在 S3C2410 的 Nand Flash 控制器中实现了由硬件电路(ECC 生 ...

  4. LINUX用户和用户组操作命令

    Id Finger Pwck 检查/etc/passwd配置文件内的信息与实际主文件夹是否存在,还可比较/etc/passwd和/etc/shadow的信息是否一致,另外如果/etc/passwd中的 ...

  5. minutia cylinder code MCC lSSR 匹配算法

    图一 是LSS匹配算法, 图二是LSSR 匹配算法,数据采用MCC SDK自带的十个人的数据.LSS EER6.0%左右,LSSR EER 0%

  6. 以代码的方式管理quartz定时任务的暂停、重启、删除、添加等

    [前言]在项目的管理功能中,对定时任务的管理有时会很常见.因为我们不能指望只在配置文件中配置好定时任务就行了,因为如果要控制定时任务的 “暂停” 呢?暂停之后又要在某个时间点 “重启” 该定时任务呢? ...

  7. 深入理解Java虚拟机(类加载机制)

    文章首发于微信公众号:BaronTalk 上一篇文章我们介绍了「类文件结构」,这一篇我们来看看虚拟机是如何加载类的. 我们的源代码经过编译器编译成字节码之后,最终都需要加载到虚拟机之后才能运行.虚拟机 ...

  8. MyEclipse如何使用debug模式

    知道如何打断点,如何进入debug与debug模式的视图,还有工具栏的使用和快捷键的使用 https://blog.csdn.net/menglanyingfei/article/details/55 ...

  9. 使用Ajax获取多选框用户选择的值问题

    目录 说明 正文 说明 在web开发过程中,将多选框的值提交到django后台,有两种提交方式: form表单提交 ajax异步提交 我需要使用ajax将复选框的值提交到后台,记录一下当时碰到的问题 ...

  10. Maven实战08_仓库

    何为Maven仓库 在Maven世界中.任何一个依赖.插件或者项目构建的输出,都可以称之为构件.例如依赖log4j-1.2.15.jar是一个构件,差价maven-compile-plugin-2.0 ...