263网站建设怎么样,asp网站如何安装,文明农村建设网站,爱前端主图wordpressbinlog是mysql记录操作的二进制日志文件,有三种格式可选,但是老旧的SBR已经不适合现在大多数业务需求,所以大多数都建议用MBR和RBR,即mixed或row,而解析他的原因,几乎都只有一个,就是恢复数据库,或者是反编译来恢复数据库,目的都是一样.以下是基于mysql5.6的mysqlbinlog来描述的…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-outputdecode-rows filename#基于开始/结束时间的解析mysqlbinlog --start-datetime2013-09-10 00:00:00 --stop-datetime2013-09-10 01:01:01 -d 库名 二进制文件#基于pos值的解析mysqlbinlog --start-position107 --stop-position1000 -d 库名 二进制文件#恢复单一数据库的binlogmysqlbinlog -d dbname binlog.00002#常用示例1:将一个row格式的binlog文件按特定时间段,特定库解析出来,导出到文件,-vv意思是把注释也打出来mysqlbinlog -vv --base64-outputdecode-rows --start-datetime2016-06-15 20:00:00 --stop-datetime2016-06-15 21:00:00 -d baiyang mysql-bin.000011 t.txt#常用示例2:将解析出来的binlog文件进行增删改查统计mysqlbinlog -vv --base64-outputdecode-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-outputvalue 使用base-64编码格式显示二进制日志内容,AUTO (automatic) 或 UNSPEC (unspecified) 参数自动显示二进制语句的内容如果没有指定 --base64-output参数则效果就相当于--base64-outputAUTONEVER参数会导致二进制语句不会显示DECODE-ROWS解码处理二进制日志。比较常用的是--base64-outputDECODE-ROWS 会显示出row模式带来的sql变更--bind-addressname 绑定IP地址(用于一些异常IP访问的情况)--character-sets-dirname 字符集文件的目录路径(非正常字符集使用)-C, --compress 启用压缩模式(减少带宽使用)-d db_name,--databasedb_name 只列出该数据库的条目(只用本地日志)。--debug-check 检查内存和打开的文件使用情况并退出。--debug-info 打印一些调试信息并退出。--default-authname 默认的客户端身份验证插件路径-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, --hostname 获取给定主机上的MySQL服务器的二进制日志。-l, --local-loadname 为指定目录中的LOAD DATA INFILE预处理本地临时文件。-o, --offset# 跳过前 N个条目。-p, --password[name] 连接服务器时使用密码。如果使用短选项形式(-p)选项和密码之间不能有空格。如果在命令行中–password或-p选项后面没有密码值则提示输入一个密码。--plugin-dirname 客户端插件目录-P, --port# 用于连接远程服务器的TCP/IP端口号。--protocolname 使用那种连接协议,可以是:tcp, socket, pipe,memory-R, --read-from-remote-server 从MySQL服务器读二进制日志。如果没有加入该选项任何连接服务器的参数选项将无效。这些选项是–host、–password、–port、–protocol、–socket和–user。可代替read-from-remote-masterBINLOG-DUMP-NON-GTIDS.--read-from-remote-mastername 从MySQL服务器读二进制日志.通过设置COM_BINLOG_DUMP或COM_BINLOG_DUMP_GTID命令来设定参数BINLOG-DUMP-NON-GTIDS或BINLOG-DUMP-GTIDS,如果设置--read-from-remote-masterBINLOG-DUMP-GTIDS并结合--exclude-gtids,可以省一些网络流量--raw 需要配合-R使用。输出原始二进制日志数据,而不是SQL,并输出到日志文件。-r, --result-filename 将输出指向给定的文件。和--raw一起使用的话,这是一个文件前序.--secure-auth 如果客户端低于pre-4.1.1,将拒绝连接,默认开启,可以通过--skip-secure-auth来关闭--server-id# 只提取给定服务器ID的二进制日志,指my.cnf的server-id的ID值--server-id-bits# 把server-id设置在显著位置--set-charsetname 输出时添加SET NAMES character_set提示设定字符集-s, --short-form 只显示日志中包含的语句不显示其它信息。这仅用于测试,不应被使用在生产系统中。如果要禁止base64-output的输出,可以考虑使用--base64-outputnever instead.-S, --socketname 使用套接字socket来连接,通常是本机--ssl 使用ssl协议来连接(一般不会用)--ssl-caname 使用ca证书方式的SLL来连接,同理,下面几个选项是各种证书和密钥验证方式的SSL登陆,就不一一介绍了.--ssl-capathname,--ssl-certname,--ssl-ciphername,--ssl-keyname,--ssl-crlname,--ssl-crlpathname,--ssl-verify-server-cert--start-datetimedatetime 从二进制日志中第1个日期时间等于或晚于datetime参量的事件开始读取。datetime值相对于运行mysqlbinlog的机器上的本地时区。该值格式应符合DATETIME或TIMESTAMP数据类型。例如mysqlbinlog –start-datetime2004-12-2511:25:56 binlog.000003-j, --start-position# 从二进制日志中第1个位置等于N参量时的事件开始读。--stop-datetimedatetime 从二进制日志中第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, --username 连接远程服务器时使用的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-gtidsname 打印给定值的GTID的信息--exclude-gtidsname 打印给定值以外的GTID的信息--rewrite-dbname 更新数据库时给出一个和原来不一样的数据库名,例如:rewrite-dbfrom-to.—help- 显示帮助消息并退出。使用binlog恢复数据由于binlog可以直接解析成sql语句的,一般来说直接执行是可行的.但是有时候我们不想做的那么复杂,加上一个参数,直接执行,通过管道符就可以了.mysqlbinlog --start-position530050688 --stop-position601156037 -d test /opt/mysql-bin.000019 |mysql -uroot -p123 --binary-modebinlog server的创建:用过mysql的都知道mysql支持主从架构,有些时候我们单纯只想异地备份binlog日志,但是特地搭一个从库貌似不科学,而且mysql机制上也并不是把binlog拉下来就算,还要写进数据库占用一定空间,以前会引入blackhold引擎,而现在就方便多了,因为mysql5.6后引入了mysql的binlog server,相当方便,相当简单,binlog就被拉过来了,而且只要进程不掉,就一直拉.因为方法很简单,就是一条命令过去,所以不用很紧张,至于参数的意思,请看上面命令如下,记得加后台运行命令符噢:#先看看当前的master状态,可以忽略GTID,因为可以不用设置GTIDmysql show master status\G*************************** 1. row ***************************File: mysql-bin.000007Position: 56789Binlog_Do_DB:Binlog_Ignore_DB:Executed_Gtid_Set: 3edae34c-6299-11e6-8999-8038bc0c67be:1-6754,4cdc2a74-6299-7555-95ce-008cfaf595bc:1-79412481 row in set (0.00 sec)#开启binlog servermysqlbinlog -R --raw --host*.*.*.* --userroot --passwordx xxxxxxxxx --stop-never --stop-never-slave-server-id56789 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 mysqlroot 19683 0.0 0.2 59836 4764 pts/1 S 14:39 0:00 mysqlbinlog -R --raw --hostx.x.x.x -uroot -P3306 -px xxxxxxxxxxxxxx --stop-never --stop-never-slave-server-id21305198 mysql-bin.000007root 19697 0.0 0.0 112648 976 pts/1 S 14:45 0:00 grep --colorauto 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了.完毕.