mysql binlog sql统计_mysql的binlog详解

binlog是mysql记录操作的二进制日志文件,有三种格式可选,但是老旧的SBR已经不适合现在大多数业务需求,所以大多数都建议用MBR和RBR,即mixed或row,而解析他的原因,几乎都只有一个,就是恢复数据库,或者是反编译来恢复数据库,目的都是一样.

以下是基于mysql5.6的mysqlbinlog来描述的,请各位知照.

binlog使用方法

直接来看看例子:#可以在数据库界面操作一些命令

#只查看第一个binlog文件的内容(不建议)

mysql> show binlog events;

#查看指定binlog文件的内容(不建议)

mysql> show binlog events in 'mysql-bin.000002';

#查看当前正在写入的binlog文件

mysql> show master status\G

#获取binlog文件列表

mysql> show binary logs;

#直接用mysqlbinlog命令就更全面一些

#可以直接打开,可能不够直观,而且会不停刷屏,慎用

mysqlbinlog mysql-bin.000002

#查看row格式下的二进制日志

mysqlbinlog -vv --base64-output=decode-rows filename

#基于开始/结束时间的解析

mysqlbinlog --start-datetime='2013-09-10 00:00:00' --stop-datetime='2013-09-10 01:01:01' -d 库名 二进制文件

#基于pos值的解析

mysqlbinlog --start-position=107 --stop-position=1000 -d 库名 二进制文件

#恢复单一数据库的binlog

mysqlbinlog -d dbname  binlog.00002

#常用示例1:将一个row格式的binlog文件按特定时间段,特定库解析出来,导出到文件,-vv意思是把注释也打出来

mysqlbinlog -vv --base64-output=decode-rows --start-datetime='2016-06-15 20:00:00' --stop-datetime='2016-06-15 21:00:00' -d baiyang  mysql-bin.000011 > t.txt

#常用示例2:将解析出来的binlog文件进行增删改查统计

mysqlbinlog -vv --base64-output=decode-rows filename|awk '/###/ {if($0~/UPDATE|INSERT|SELECT/)count[$2" "$NF]++}END{for(i in count) print i,"\t",count[i]}' | column -t | sort -k3nr

参数说明:

--base64-output=value    使用base-64编码格式显示二进制日志内容,AUTO ("automatic") 或 UNSPEC ("unspecified") 参数自动显示二进制语句的内容,如果没有指定 --base64-output参数,则效果就相当于--base64-output=AUTO;NEVER参数会导致二进制语句不会显示;DECODE-ROWS解码处理二进制日志。比较常用的是--base64-output=DECODE-ROWS: 会显示出row模式带来的sql变更

--bind-address=name    绑定IP地址(用于一些异常IP访问的情况)

--character-sets-dir=name    字符集文件的目录路径(非正常字符集使用)

-C, --compress    启用压缩模式(减少带宽使用)

-d db_name,--database=db_name    只列出该数据库的条目(只用本地日志)。

--debug-check    检查内存和打开的文件使用情况并退出。

--debug-info    打印一些调试信息并退出。

--default-auth=name    默认的客户端身份验证插件路径

-D,disable-logs-bin    禁用二进制日志。如果使用--to-last-logs选项将输出发送给同一台MySQL服务器,可以避免无限循环。该选项在崩溃恢复时也很有用,可以避免复制已经记录的语句。注释:该选项要求有SUPER权限。

-F, --force-if-open    强制打开没有正常关闭的二进制日志文件,(默认开启,通过--skip-force-if-open关闭)

-f, --force-read    强制打开不能识别的二进制日志事件,如果使用该选项,mysqlbinlog预到不能识别的二进制日志事件,它会打印警告,忽略该事件并继续。没有该选项,mysqlbinlog读到此类事件则停止。

-H, --hexdump    在注释中显示日志的十六进制转储。该输出可以帮助复制过程中的调试。

-h, --host=name    获取给定主机上的MySQL服务器的二进制日志。

-l, --local-load=name    为指定目录中的LOAD DATA INFILE预处理本地临时文件。

-o, --offset=#    跳过前 N个条目。

-p, --password[=name]    连接服务器时使用密码。如果使用短选项形式(-p),选项和密码之间不能有空格。如果在命令行中–password或-p选项后面没有密码值,则提示输入一个密码。

--plugin-dir=name    客户端插件目录

-P, --port=#    用于连接远程服务器的TCP/IP端口号。

--protocol=name    使用那种连接协议,可以是:tcp, socket, pipe,memory

-R, --read-from-remote-server    从MySQL服务器读二进制日志。如果没有加入该选项,任何连接服务器的参数选项将无效。这些选项是–host、–password、–port、–protocol、–socket和–user。可代替read-from-remote-master=BINLOG-DUMP-NON-GTIDS.

--read-from-remote-master=name    从MySQL服务器读二进制日志.通过设置COM_BINLOG_DUMP或COM_BINLOG_DUMP_GTID命令来设定参数BINLOG-DUMP-NON-GTIDS或BINLOG-DUMP-GTIDS,如果设置--read-from-remote-master=BINLOG-DUMP-GTIDS并结合--exclude-gtids,可以省一些网络流量

--raw    需要配合-R使用。输出原始二进制日志数据,而不是SQL,并输出到日志文件。

-r, --result-file=name    将输出指向给定的文件。和--raw一起使用的话,这是一个文件前序.

--secure-auth    如果客户端低于pre-4.1.1,将拒绝连接,默认开启,可以通过--skip-secure-auth来关闭

--server-id=#    只提取给定服务器ID的二进制日志,指my.cnf的server-id的ID值

--server-id-bits=#    把server-id设置在显著位置

--set-charset=name    输出时添加SET NAMES character_set提示设定字符集

-s, --short-form    只显示日志中包含的语句,不显示其它信息。这仅用于测试,不应被使用在生产系统中。如果要禁止base64-output的输出,可以考虑使用--base64-output=never instead.

-S, --socket=name    使用套接字socket来连接,通常是本机

--ssl    使用ssl协议来连接(一般不会用)

--ssl-ca=name    使用ca证书方式的SLL来连接,同理,下面几个选项是各种证书和密钥验证方式的SSL登陆,就不一一介绍了.

--ssl-capath=name,--ssl-cert=name,--ssl-cipher=name,--ssl-key=name,--ssl-crl=name,--ssl-crlpath=name,--ssl-verify-server-cert

--start-datetime=datetime    从二进制日志中第1个日期时间等于或晚于datetime参量的事件开始读取。datetime值相对于运行mysqlbinlog的机器上的本地时区。该值格式应符合DATETIME或TIMESTAMP数据类型。例如:mysqlbinlog –start-datetime="2004-12-2511:25:56" binlog.000003

-j, --start-position=#    从二进制日志中第1个位置等于N参量时的事件开始读。

--stop-datetime=datetime    从二进制日志中第1个日期时间等于或晚于datetime参量的事件起停止读。和--start-datetime选项配合使用设定导出特定的时间段信息,有助于减少结果输出。

--stop-never    等待更多的日志传输而不是退出当前命令,直到断开服务器连接为止,隐式设置--to-last-log

--stop-never-slave-server-id=#    当前命令的从库ID值,当用到--read-from-remote-server或--stop-never时,命令就会像从库一样拉取binlog数据,所以需要一个唯一的server-id值来标识他.

--stop-position=#    从二进制日志中第1个位置等于和大于N参量时的事件起停止读。和--start-position选项配合使用设定导出特定的position间隔的binlog信息,有助于减少结果输出.

-t, --to-last-log    在MySQL服务器中请求的二进制日志的结尾处不停止,而是继续打印直到最后一个二进制日志的结尾。如果将输出发送给同一台MySQL服务器,会导致无限循环。该选项要求–read-from-remote-server。

-u, --user=name    连接远程服务器时使用的MySQL用户名。

-v, --verbose    详细模式,显示statement模式带来的sql语句,-vv表示增加列类型的注释.

-V, --version    显示版本信息并退出

--open-files-limit=#    指定要保留的打开的文件描述符的数量

-c, --verify-binlog-checksum    验证校验binlog日志

--binlog-row-event-max-size=#    最大binlog日志文件容量大小,此值必须是256的倍数。

--skip-gtids    不打印全局事务标识符信息(GTID),例如:SET GTID_NEXT=... etc

--include-gtids=name    打印给定值的GTID的信息

--exclude-gtids=name    打印给定值以外的GTID的信息

--rewrite-db=name    更新数据库时给出一个和原来不一样的数据库名,例如:rewrite-db='from->to'.

—help,-?    显示帮助消息并退出。

使用binlog恢复数据

由于binlog可以直接解析成sql语句的,一般来说直接执行是可行的.

但是有时候我们不想做的那么复杂,加上一个参数,直接执行,通过管道符就可以了.mysqlbinlog --start-position='530050688' --stop-position='601156037' -d test /opt/mysql-bin.000019 |mysql -uroot -p123 --binary-mode

binlog server的创建:

用过mysql的都知道mysql支持主从架构,有些时候我们单纯只想异地备份binlog日志,但是特地搭一个从库貌似不科学,而且mysql机制上也并不是把binlog拉下来就算,还要写进数据库占用一定空间,以前会引入blackhold引擎,而现在就方便多了,因为mysql5.6后引入了mysql的binlog server,相当方便,相当简单,binlog就被拉过来了,而且只要进程不掉,就一直拉.

因为方法很简单,就是一条命令过去,所以不用很紧张,至于参数的意思,请看上面

命令如下,记得加后台运行命令符噢:#先看看当前的master状态,可以忽略GTID,因为可以不用设置GTID

mysql> show master status\G

*************************** 1. row ***************************

File: mysql-bin.000007

Position: 56789

Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set: 3edae34c-6299-11e6-8999-8038bc0c67be:1-6754,

4cdc2a74-6299-7555-95ce-008cfaf595bc:1-7941248

1 row in set (0.00 sec)

#开启binlog server

mysqlbinlog -R --raw --host=*.*.*.* --user=root --password=x xxxxxxxxx --stop-never --stop-never-slave-server-id=56789 mysql-bin.000007 &

#binlog就过来了,看看目录

ll ./*

-rw-rw---- 1 root root 1073741921 5月  29 19:15 mysql-bin.000007

-rw-rw---- 1 root root 1073741954 6月   2 12:14 mysql-bin.000008

-rw-rw---- 1 root root 1073743557 6月   8 10:03 mysql-bin.000009

-rw-rw---- 1 root root 1073742035 6月  12 16:33 mysql-bin.000010

-rw-rw---- 1 root root 1073742000 6月  16 10:38 mysql-bin.000011

-rw-rw---- 1 root root 1073742053 6月  20 09:18 mysql-bin.000012

#看看进程,正在运行,这就完成了

ps aux |grep mysql

root     19683  0.0  0.2  59836  4764 pts/1    S    14:39   0:00 mysqlbinlog -R --raw --host=x.x.x.x -uroot -P3306 -px xxxxxxxxxxxxxx --stop-never --stop-never-slave-server-id=21305198 mysql-bin.000007

root     19697  0.0  0.0 112648   976 pts/1    S+   14:45   0:00 grep --color=auto mysql

原来我已经跑那么多了,呵呵~!

再看看数据库状态show processlist;

|    66379 | tencentroot | 10.*.*.*:47303   | NULL    | Binlog Dump | 6932150 | Master has sent all binlog to slave; waiting for binlog to be updated | NULL             |

| 14277762 | tencentroot | 127.0.0.1:53878     | NULL    | Sleep       |      25 |                                                                       | NULL             |

| 20949882 | root        | 10.*.*.*:2080  | NULL    | Binlog Dump | 2937110 | Master has sent all binlog to slave; waiting for binlog to be updated | NULL

有两个进程在拉binlog,毫无疑问,其中一个是真正的从库,另一个就是我的binlogserver了.

完毕.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android项目实战(二十二):启动另一个APP or 重启本APP

Android项目实战(二十二):启动另一个APP or 重启本APP 原文:Android项目实战(二十二):启动另一个APP or 重启本APP一、启动另一个APP 目前公司项目需求,一个主APP,需要打开某些小APP&#xff0c…

mysql 查询两张表结构相同的数据库_利用反射处理多个表结构相同的数据的查询和数据库表的关联...

最近做一个项目,需要对人口数据进行查询,但是人口数据分布在不同的街道表中,首先进行了数据表结构的统一,每个数据表以街道名开头,然后其他的名字都一样前期将各个表中的字段也进行了统一抽象出一张字典表将街道编号和…

oracle批量update

我个人觉得写的很好 http://blog.csdn.net/wanglilin/article/details/7200201 需求: 将t2(t_statbuf)表中id和t1(T_Mt)表相同的记录更新进t1表。 1.错误的写法: 1 update table_name t1 set (a,b,c)( select a,b,c from table_name_2 t2 where t1.at2.a…

java 文件输出流_Java 文件输出流

Java IO教程 - Java文件输出流创建输出流要写入文件,我们需要创建一个FileOutputStream类的对象,它将表示输出流。// Create a file output streamString destFile "test.txt";FileOutputStream fos new FileOutputStream(destFile);当写入文…

Docker自动补全容器名

Zsh Place the completion script in your /path/to/zsh/completion (typically ~/.zsh/completion/): 下载自动完成文件mkdir -p ~/.zsh/completion curl -L https://raw.githubusercontent.com/docker/compose/1.21.0/contrib/completion/zsh/_docker-compose > ~/.zsh/co…

java 打印 模板_Java输入输出模板

常规输入输出绝壁有毒~import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigDecimal;import java.math.BigInteger;import java.util.StringTokenizer;public class Main {public static void main(St…

MySQL5.7参数log_timestamps

最近测试MySQL 5.7.21 Community Server这个版本的MySQL数据库时,发现其错误日志的时间跟系统当前时间不一致,后面检查发现日期时间格式都是UTC时间,查了一下相关资料,原来在MySQL 5.7.2 之后日志文件里面的时间戳从默认的本地系…

java非堆内存_java – 监视JVM的非堆内存使用情况

我们通常处理OutOfMemoryError问题,因为堆或permgen大小配置问题。但是所有的JVM内存不是permgen或者heap。据我所知,它也可以与Threads / Stacks,本地JVM代码相关…但是使用pmap我可以看到进程分配了9.3G这是3.3G堆外内存使用。我不知道什么…

.net core HttpContext(Http上下文)

在.NET Core中,只有Controller才能直接使用 HttpContext ,其他地方需要通过HttpContextAccessor来访问 转载于:https://www.cnblogs.com/87Super/p/8975311.html

Tidb集群加mysql_TiDB - 快速入门,集群搭建

TiDB 是开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 …

一个ssm综合小案例-商品订单管理-第二天

准确来说是第二三天,一时兴起,把这个小项目一鼓作气写完了(较大的bug 均已被我手动捉出并 fix )才来写一篇博客。 接上文 第一天配置继续讲解: 转载于:https://www.cnblogs.com/Frank99/p/8975378.html

java运行时读取注解_Java自定义注解和运行时靠反射获取注解

转:1、Annotation的工作原理:JDK5.0中提供了注解的功能,允许开发者定义和使用自己的注解类型。该功能由一个定义注解类型的语法和描述一个注解声明的语法,读取注解的API,一个使用注解修饰的class文件和一个注解处理工具…

python递归函数

递归函数简单来说就是函数的自我调用。使用递归函数很多时候可以使得代码简洁,优雅。可以把复杂的问题分解成简单的子问题。递归有无与伦比的魅力,从著名的计算机名言就可以看出递归的奇妙: To iterate is human,to recurse divine. 迭代者为…

java的jsp要下载吗_jsp、java下载附件

1 传入此jsp中的参数均已URLDencoder过。23 4 5 6 7 boolean isError false;8 String errorMsg "";9 response.reset();//可以加也可以不加10 request.setCharacterEncoding("UTF-8");11 String folder "news";12 if(request.getParameter(&q…

浅谈高斯消元的实现和简单应用

一、高斯消元的原理 对于n元的m个线性方程组成的方程组,我们将其以矩阵的形式记录下来: a11 a12 a13 ...... a1n b1 a21 a22 a23 ...... a2n b2 ... ... ... an1 an2 an3 ...... ann bn 然后进行初等行列变换,尝试构造出一个上三角矩阵&#…

java知识体系 servlet_03-Servlet 体系结构知识梳理

一、Servlet体系结构Java Web应用是基于Servlet规范运行,Servlet顶层类的关联如下图:从图可看出,Servlet规范基本围绕这几个类运行,其中,与Servlet主动关联的有3个类,分别是ServletRequest、ServletRespons…

SQL批量提交修改业务

把你需要批量提交修改的东西在内存中修改完毕 然后执行以下代码 SqlConnection conn new SqlConnection(ConnectionString);SqlDataAdapter sda new SqlDataAdapter("select Id,RankSummary,RankOfCn,Classify from u_College;", conn); //这里的SQL语句可以是查询…

testlink自带java api_java如何连接testlink

1.下载相关的jar包2.获取到testlink的url和key,注意:url不是testlink的连接地址,是连接地址/lib/api/xmlrpc.php3.测试是否连接成功public static void main(String args[]) {String url "http://test.tl.gmsd.lan/lib/api/xmlrpc.php&…

ubuntu解压缩zip/tar/tar.gz/tar.bz2

ubuntu解压缩zip/tar/tar.gz/tar.bz2ZIPzip可能是目前使用得最多的文档压缩格式。它最大的优点就是在不同的操作系统平台,比如Linux, Windows以及Mac OS,上使用。缺点就是支持的压缩率不是很高,而tar.gz和tar.gz2在压缩率方面做得…

lr背景虚化_lr背景虚化_怎样拍出背景模糊的照片

除了锐化之外,要获得独特的,令人难忘的图像,还可以使用其他方法,例如,相反的效果-单个细节的模糊。这样的方法将使人们有可能专注于整个构图的中心人物,为图片增加情感色彩,动作,并为…