入门理解mysql-binlog
mysql-binlog
简介:
- mysql的二进制日志记录了所有DDL和DML(除select)
- 开启binlog日志后会有1%左右的的性能损耗
- 二进制日志包括两类
- 索引文件 XXXX.index
- 日志文件 xxx.0000*
应用场景:
- master(主) 和 slavas(从) 主从保持数据同步
- 使用mysqlbinlog工具来恢复数据
日志更换策略:
- 服务器重启
- 服务器被更新
- 日志达到最长长度 max_binlog_size 默认为 1G
- 日志被刷新 mysql> flush logs
日志格式:
- statement level (基于SQL语句的复制)
- 每一条会修改数据的SQL都会记录到binlog中
- 优点: 不需要记录SQL与每一行的数据变化,这样binlog日志比较少,减少磁盘IO,提高性能
- 缺点: 某些情况会导致主从不一致
- row level (基于行的复制)
- 不记录SQL语句上下文,仅记录那些行那些数据被修改了,修改成什么样子了
- 优点: 不会出现出现某些情况下的存储过程,function,trigger 无法被正确复制的情况
- 缺点: 会产生大量的日志数据,比如 alter table 会让日志暴涨
- mixed (混合模式复制)
- 以上两种模式的混合使用,一般的复制使用statement模式,对于statement无法复制的操作使用row模式保存,mysql会自动根据SQL语句来现在日志的保存方式
- 从官网来看
- 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的更多相关文章
- Mysql binlog
理解Mysql binlog 日志的三种模式 本文介绍下,mysql中binlog日志的三种模式,了解了各种模式的不同之处,才能更好地应用.有需要的朋友建议参考下. 一,模式1 Row Lev ...
- 理解MySQL——索引与优化
转自:理解MySQL——索引与优化 写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存 ...
- MySQL binlog的格式解析
我搜集到了一些资料,对理解代码比较有帮助. 在头文件中binlog_event.h中,有描述 class Log_event_header class Log_event_footer 参见[Myst ...
- [转]mysql binlog in realtime
原文:http://guweigang.com/blog/2013/11/18/mysql-binlog-in-realtime/ 众所周知,MySQL是最受欢迎的互联网数据库(没有之一)—————— ...
- Mysql binlog日志解析
1. 摘要: Mysql日志抽取与解析正如名字所将的那样,分抽取和解析两个部分.这里Mysql日志主要是指binlog日志.二进制日志由配置文件的log-bin选项负责启用,Mysql服务器将在数据根 ...
- mysql binlog解析概要
1,dump协议: 根据数据库的ip+port创建socket,如果创建成功,说明链接建立成功,接下来是使用dump协议订阅binlog 链接建立成功之后,服务端会主动向客户端发送如下问候信息gree ...
- 一个分布式 MySQL Binlog 存储系统的架构设计
1. kingbus简介 1.1 kingbus是什么? kingbus是一个基于raft强一致协议实现的分布式MySQL binlog 存储系统.它能够充当一个MySQL Slave从真正的Mast ...
- 深入理解MySQL的并发控制、锁和事务【转】
本文主要是针对MySQL/InnoDB的并发控制和加锁技术做一个比较深入的剖析,并且对其中涉及到的重要的概念,如多版本并发控制(MVCC),脏读(dirty read),幻读(phantom read ...
- 采用OpenReplicator解析MySQL binlog
Open Replicator是一个用Java编写的MySQL binlog分析程序.Open Replicator 首先连接到MySQL(就像一个普通的MySQL Slave一样),然后接收和分析b ...
- canal+kafka订阅Mysql binlog将数据异构到elasticsearch(或其他存储方式)
canal本质就是"冒充"从库,通过订阅mysql bin-log来获取数据库的更改信息. mysql配置(my.cnf) mysql需要配置my.cnf开启bin-log日志并且 ...
随机推荐
- 【zibbix自定义监控】zabbix服务自定义监控mysql的状态信息
由于mysql我安装在zabbix_server服务的主机上,所以下面操作在zabbix服务主机上进行,注意服务主机已经安装了监控服务 实现步骤: 1.修改 zabbix_agentd.conf,添加 ...
- JVM GC系列 — GC算法
一.前言 从本篇文章开始,将开始一个新的系列JVM.JVM是一个非常庞大且复制的技术体系,但是对于程序猿的升级,走向更高阶所必要经历的,曾经也下决心要好好学习一番,然而毅力不足都中途放弃. GC的作用 ...
- FastJson中的ObjectMapper对象的使用详解
写在前面:开发中经常用到json和对象的相互转换,下面将列出FastJson中ObjectMapper对象的API的使用 一.maven工程中pom导入<dependency> <g ...
- 屏幕输入转换为int//方法大注释
可以使用两种方法: using System; namespace 方法测试 { class Program { static void Main(string[] args) { Console.W ...
- 你见过的最全面的 Python 重点
由于总结了太多的东西,所以篇幅有点长,这也是我"缝缝补补"总结了好久的东西. Py2 VS Py3 print成为了函数,python2是关键字 不再有unicode对象,默认st ...
- 转:用 Python 一键分析你的上网行为, 看是在认真工作还是摸鱼
简介 想看看你最近一年都在干嘛?看看你平时上网是在摸鱼还是认真工作?想写年度汇报总结,但是苦于没有数据?现在,它来了. 这是一个能让你了解自己的浏览历史的Chrome浏览历史记录分析程序,当然了,他仅 ...
- Python【day 15-3】函数部分
'''''' ''' 一.函数 1.函数定义 对功能或者动作的封装 在类中定义,就是方法 在类之外定义,就是函数 2.函数写法 1.定义或者申明函数 def 函数名(形参列表): 函数体(return ...
- WebLogic任意文件上传漏洞复现与分析 -【CVE-2018-2894 】
CVE-2018-2894 漏洞影响版本:10.3.6.0, 12.1.3.0, 12.2.1.2, 12.2.1.3 下载地址:http://download.oracle.com/otn/nt/m ...
- HttpClient的使用今天遇到一个巨坑——HttpEntity内容取不出来
在使用HttpPost httpPost = new HttpPost(postUrl);的post请求后,拿到返回的response,response返回200成功. 到此没有任何问题. respo ...
- ORACLE ORA-1652的解决方法
原创 Oracle 作者:wzq609 时间:2015-02-04 22:11:07 17183 0 前言:在检查数据库的alert日志,发现数据库报了ORA-1652: unable to exte ...