mysql-binlog
简介:

  1. mysql的二进制日志记录了所有DDL和DML(除select)
  2. 开启binlog日志后会有1%左右的的性能损耗
  3. 二进制日志包括两类
    1. 索引文件 XXXX.index
    2. 日志文件 xxx.0000*

应用场景:

  1. master(主) 和 slavas(从) 主从保持数据同步
  2. 使用mysqlbinlog工具来恢复数据

日志更换策略:

  1. 服务器重启
  2. 服务器被更新
  3. 日志达到最长长度 max_binlog_size 默认为 1G
  4. 日志被刷新 mysql> flush logs

日志格式:

  1. statement level (基于SQL语句的复制)

    • 每一条会修改数据的SQL都会记录到binlog中
    • 优点: 不需要记录SQL与每一行的数据变化,这样binlog日志比较少,减少磁盘IO,提高性能
    • 缺点: 某些情况会导致主从不一致
  2. row level (基于行的复制)
    • 不记录SQL语句上下文,仅记录那些行那些数据被修改了,修改成什么样子了
    • 优点: 不会出现出现某些情况下的存储过程,function,trigger 无法被正确复制的情况
    • 缺点: 会产生大量的日志数据,比如 alter table 会让日志暴涨
  3. mixed (混合模式复制)
    • 以上两种模式的混合使用,一般的复制使用statement模式,对于statement无法复制的操作使用row模式保存,mysql会自动根据SQL语句来现在日志的保存方式
  4. 从官网来看
    • version < 5.1.5 之前只有statement
    • version < 5.1.8 且 > 5.1.5 有 row 和 statement 两种
    • version > 5.1.8 mixed 、 row 、 statement

配置:

[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 其他 slaveId 重复
expire_log_days = 7 # 设置binlog清理时间
max_binlog_size = 100m # 设置binlog每个文件大小
binlog_cache_size = 4m # binlog缓存大小
max_binlog_cache_size = 512m # 最大binlog缓存大小

相关命令:

 show variables like "%log_bin%"; 
Variable_name Value
log_bin ON
log_bin_basename /var/lib/mysql/mysql-bin
log_bin_index /var/lib/mysql/mysql-bin.index
log_bin_trust_function_creators OFF
log_bin_use_v1_row_events OFF
sql_log_bin ON

    log_bin -> ON 表示binlog 日志已经开启

 show binlog events; # 只查看第一个binlog文件的内容
show binlog events in 'mysql-bin.000004'; # 查看指定binlog文件的内容
show binary logs; # 获取binlog文件列表
Log_name File_size
mysql-bin.000001 3159
mysql-bin.000002 154
mysql-bin.000003 177
mysql-bin.000004 1609
mysql-bin.000005 201
mysql-bin.000006 154

  show master status; # 查看当前正在写入的binlog文件 
File Position Binlog_Do_DB Binlog_Ignore_DB Executed_Gtid_Set
mysql-bin.000006 154      

使用mysqlbinlog工具 mysqlbinlog是一个查看mysql二进制的工具,可以把mysql上面的所有操作记录从日志导出

 mysqlbinlog /var/lib/mysql/mysql-bin.000004 -r /tmp/outMysql.sql
  reset master; # 清除master上的binlog 
  reset slave; # 清除slave上的binlog 

入门理解mysql-binlog的更多相关文章

  1. Mysql binlog

    理解Mysql binlog 日志的三种模式   本文介绍下,mysql中binlog日志的三种模式,了解了各种模式的不同之处,才能更好地应用.有需要的朋友建议参考下.   一,模式1 Row Lev ...

  2. 理解MySQL——索引与优化

    转自:理解MySQL——索引与优化 写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存 ...

  3. MySQL binlog的格式解析

    我搜集到了一些资料,对理解代码比较有帮助. 在头文件中binlog_event.h中,有描述 class Log_event_header class Log_event_footer 参见[Myst ...

  4. [转]mysql binlog in realtime

    原文:http://guweigang.com/blog/2013/11/18/mysql-binlog-in-realtime/ 众所周知,MySQL是最受欢迎的互联网数据库(没有之一)—————— ...

  5. Mysql binlog日志解析

    1. 摘要: Mysql日志抽取与解析正如名字所将的那样,分抽取和解析两个部分.这里Mysql日志主要是指binlog日志.二进制日志由配置文件的log-bin选项负责启用,Mysql服务器将在数据根 ...

  6. mysql binlog解析概要

    1,dump协议: 根据数据库的ip+port创建socket,如果创建成功,说明链接建立成功,接下来是使用dump协议订阅binlog 链接建立成功之后,服务端会主动向客户端发送如下问候信息gree ...

  7. 一个分布式 MySQL Binlog 存储系统的架构设计

    1. kingbus简介 1.1 kingbus是什么? kingbus是一个基于raft强一致协议实现的分布式MySQL binlog 存储系统.它能够充当一个MySQL Slave从真正的Mast ...

  8. 深入理解MySQL的并发控制、锁和事务【转】

    本文主要是针对MySQL/InnoDB的并发控制和加锁技术做一个比较深入的剖析,并且对其中涉及到的重要的概念,如多版本并发控制(MVCC),脏读(dirty read),幻读(phantom read ...

  9. 采用OpenReplicator解析MySQL binlog

    Open Replicator是一个用Java编写的MySQL binlog分析程序.Open Replicator 首先连接到MySQL(就像一个普通的MySQL Slave一样),然后接收和分析b ...

  10. canal+kafka订阅Mysql binlog将数据异构到elasticsearch(或其他存储方式)

    canal本质就是"冒充"从库,通过订阅mysql bin-log来获取数据库的更改信息. mysql配置(my.cnf) mysql需要配置my.cnf开启bin-log日志并且 ...

随机推荐

  1. Laravel配置全局公共函数

    在Laravel项目中我们常常需要定义一些全局的公共函数,通常我们会将这些公共函数定义在一个单独的文件里,如helpers.php中.我们在app目录下创建一个名为helpers.php的文件(app ...

  2. C# WebClient,HttpClient,WebRequest

    static void WebClientDemo() { string url = "https://www.cnblogs.com/Fred1987/p/11843418.html&qu ...

  3. C#WinForm解决跨线程访问控件属性报错

    方式一(在程序初始化构造函数中加一行代码): public Form1() { InitializeComponent(); Control.CheckForIllegalCrossThreadCal ...

  4. CDN(Content Delivery Network)原理

    CDN即内容分发网络,一般包括分发服务系统,负载均衡系统和管理系统. 分发服务系统,其基本的工作单元就是各个cache服务器.负责直接响应用户请求,将内容快速分发到用户:同时还负责内容更新,保证和源站 ...

  5. 自定义Vue组件打包、发布到npm以及使用

    本文将帮助:将自己写的Vue组件打包到npm进行代码托管,以及正常发布之后如何使用自己的组件. 本文讲述的仅仅是最基础的实现,其他复杂的操作需要非常熟悉webpack的相关知识,作者将继续学习. 先附 ...

  6. arcgis api for javascript 学习(五) 实现地图绘制工具

    1.本文实现的功能为鼠标与地图之间的交互,能够在地图上绘制不同形状的图形 2.代码部分主要讲到的为Graphic函数的相关功能 <!DOCTYPE html> <html> & ...

  7. IOS 11 下适配UITableView

    9月份苹果发布了IOS11和Iphone X,这一操作系统一硬件对于开发者适配上面还是造作了不少蛋疼的地方.先来看看IOS 11,这些蛋疼的需要适配的地方: 1.UIScrollView及其子类在IO ...

  8. 论文学习-混沌系统以及机器学习模型-11-29-wlg

    混沌系统以及机器学习模型 概述: 必要条件下: negative values of the sub-Lyapunov exponents. 通过rc方法, 可以在参数不匹配的情况下,实现输入信号,混 ...

  9. JavaScript—图片与base64编码互相转换

    图片转换为base64编码 <input type = "file" id = "file" onchange="popFileName(thi ...

  10. OSI网络模型和网络连接设备

    OSI网络模型和网络连接设备 OSI模型 7层之间传输的协议传输单元(PDU)的专业叫法. 第7-5层(应用层)传输的pdu叫:data 第4层(传输层)传输的pdu叫:segment(数据段) 第3 ...