今天突然mysql数据库的一个表的数据少了很多,我想着通过查看日志来判断针对这个表到底做了那些操作,然后再有针对性的去恢复,可是直接看binlog(二进制的形式)发现很乱,看不清楚,于是上网查询得知,需要先通过mysqlbinlog进行格式化,具体如下:

主库binlog :mysqlbinlog --base64-output=decode-rows -v -v mysql-bin.000058 > binlog

从库relay log:mysqlbinlog --base64-output=decode-rows -v -v mysql-relay-bin.000031 > relaylog

然后查看变成很规整的形式: 就是一些具体的sql语句。

[root@S243 mybinlog]# more binlog28

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;

/*!40019 SET @@session.max_insert_delayed_threads=0*/;

/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;

DELIMITER /*!*/;

# at 4

#161125 22:17:23 server id 20 end_log_pos 120 Start: binlog v 4, server v 5.6.18-enterprise-commercial-advanced-log created 161125 22:17:23

# at 120

#161125 22:17:23 server id 20 end_log_pos 204 Query thread_id=3498328 exec_time=0 error_code=0

SET TIMESTAMP=1480083443/*!*/;

SET @@session.pseudo_thread_id=3498328/*!*/;

SET TIMESTAMP=1480083443/*!*/;

insert into mailer.khgz_coreseek_result (info_id, khgz_id, last_modify, result, status) values ('1', '1', '2016-11-25 22:17:24', '29803096:8d78ac82-e746-423a-9615-971485e8', 0)

/*!*/;

# at 487

#161125 22:17:23 server id 20 end_log_pos 572 Query thread_id=3498328 exec_time=0 error_code=0

SET TIMESTAMP=1480083443/*!*/;

COMMIT

/*!*/;

# at 572

关于binlog和relay log的rotate机制:

Binary Log rotate机制:

?Rotate:每一条binary log写入完成后,都会判断当前文件是否超过 max_binlog_size(默认1g),如果超过则自动生成一个binlog file

?Delete:expire-logs-days 只在 实例启动时 和 flush logs 时以及文件文件是否超过 max_binlog_size时判断是否有过期的binlog文件,如果文件访问时间早于设定值,则purge file

Relay Log rotate 机制:

Rotate:每从Master fetch一个events后,判断当前文件是否超过 max_relay_log_size(默认1g) 如果超过则自动生成一个新的relay-log-file

Delete:purge-relay-log 在SQL Thread每执行完一个events时判断,如果该relay-log 已经不再需要则自动删除

Delete:expire-logs-days 只在 实例启动时 和 flush logs 时判断,如果文件访问时间早于设定值,则purge file  (同Binlog file)  (updated: expire-logs-days和relaylog的purge没有关系)

关于binlog和relay log的参数:

binlog的相关参数:

mysql> show variables like '%bin%';

+-----------------------------------------+---------------------------------+

| Variable_name | Value |

+-----------------------------------------+---------------------------------+

| bind_address | * |

| binlog_cache_size | 1048576 |

| binlog_checksum | NONE |

| binlog_direct_non_transactional_updates | OFF |

| binlog_format | MIXED |

| binlog_max_flush_queue_time | 0 |

| binlog_order_commits | ON |

| binlog_row_image | FULL |

| binlog_rows_query_log_events | OFF |

| binlog_stmt_cache_size | 32768 |

| innodb_api_enable_binlog | OFF |

| innodb_locks_unsafe_for_binlog | OFF |

| log_bin | ON |

| log_bin_basename | /mysql/mybinlog/mysql-bin |

| log_bin_index | /mysql/mybinlog/mysql-bin.index |

| log_bin_trust_function_creators | OFF |

| log_bin_use_v1_row_events | OFF |

| max_binlog_cache_size | 18446744073709547520 |

| max_binlog_size | 1073741824 |

| max_binlog_stmt_cache_size | 18446744073709547520 |

| sql_log_bin | ON |

| sync_binlog | 0 |

+-----------------------------------------+---------------------------------+

22 rows in set (0.00 sec)

log_bin

设置此参数表示启用binlog功能,并指定路径名称

log_bin_index

设置此参数是指定二进制索引文件的路径与名称

binlog_do_db

此参数表示只记录指定数据库的二进制日志

binlog_ignore_db

此参数表示不记录指定的数据库的二进制日志

max_binlog_cache_size

此参数表示binlog使用的内存最大的尺寸

binlog_cache_size

此参数表示binlog使用的内存大小,可以通过状态变量binlog_cache_use和binlog_cache_disk_use来帮助测试。

binlog_cache_use:使用二进制日志缓存的事务数量

binlog_cache_disk_use:使用二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量

max_binlog_size

Binlog最大值,最大和默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束

sync_binlog

sync_binlog”:这个参数是对于MySQL系统来说是至关重要的,他不仅影响到Binlog对MySQL所带来的性能损耗,而且还影响到MySQL中数据的完整性。对于“sync_binlog”参数的各种设置的说明如下:

sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。

sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

在MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。而当设置为“1”的时候,是最安全但是性能损耗最大的设置。因为当设置为1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。

从以往经验和相关测试来看,对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。

relay log的相关参数:

通过语句:show variables like '%relay%',查看先骨干的relay的所有相关参数

mysql> show variables like '%relay%';

+-----------------------+----------------+

| Variable_name | Value |

+-----------------------+----------------+

| max_relay_log_size | 0 |

| relay_log | |

| relay_log_index | |

| relay_log_info_file | relay-log.info |

| relay_log_purge | ON |

| relay_log_recovery | OFF |

| relay_log_space_limit | 0 |

| sync_relay_log | 0 |

| sync_relay_log_info | 0 |

+-----------------------+----------------+

9 rows in set (0.08 sec)

2.1 max_relay_log_size:标记relay log 允许的最大值,如果该值为0,则默认值为max_binlog_size(1G);如果不为0,则max_relay_log_size则为最大的relay_log文件大小;

2.2 relay_log:定义relay_log的位置和名称,如果值为空,则默认位置在数据文件的目录,文件名为host_name-relay-bin.nnnnnn(By default, relay log file names have the form host_name-relay-bin.nnnnnn in the data directory);

2.3relay_log_index:同relay_log,定义relay_log的位置和名称;

2.4relay_log_info_file:设置relay-log.info的位置和名称(relay-log.info记录MASTER的binary_log的恢复位置和relay_log的位置)

2.5relay_log_purge:是否自动清空不再需要中继日志时。默认值为1(启用)。

2.6relay_log_recovery:当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性。默认情况下该功能是关闭的,将relay_log_recovery的值设置为 1时,可在slave从库上开启该功能,建议开启。

2.7relay_log_space_limit:防止中继日志写满磁盘,这里设置中继日志最大限额。但此设置存在主库崩溃,从库中继日志不全的情况,不到万不得已,不推荐使用;

2.8sync_relay_log:这个参数和sync_binlog是一样的,当设置为1时,slave的I/O线程每次接收到master发送过来的binlog日志都要写入系统缓冲区,然后刷入relay log中继日志里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量I/O。当设置为0时,并不是马上就刷入中继日志里,而是由操作系统决定何时来写入,虽然安全性降低了,但减少了大量的磁盘I/O操作。这个值默认是0,可动态修改,建议采用默认值。

2.9sync_relay_log_info:这个参数和sync_relay_log参数一样,当设置为1时,slave的I/O线程每次接收到master发送过来的binlog日志都要写入系统缓冲区,然后刷入relay-log.info里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量I/O。当设置为0时,并不是马上就刷入relay-log.info里,而是由操作系统决定何时来写入,虽然安全性降低了,但减少了大量的磁盘I/O操作。这个值默认是0,可动态修改,建议采用默认值。

关于binlog和relay log的删除方法:

binlog 太多的 解决方法如下:

PURGE MASTER LOGS手动删除用法及示例,MASTER和BINARY是同义词

> PURGE {MASTER | BINARY} LOGS TO 'log_name'

> PURGE {MASTER | BINARY} LOGS BEFORE 'date'

实例:

> PURGE MASTER LOGS TO 'MySQL-bin.010'; //清除MySQL-bin.010日志

> PURGE MASTER LOGS BEFORE '2008-06-22 13:00:00'; //清除2008-06-22 13:00:00前binlog日志

> PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY); //清除3天前binlog日志BEFORE,变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式。

或者直接:

进入数据库,查看一下当前使用的binlog日志是哪个,除了这个以外的,其它都可以使用rm -rf 删除!

relay log 可以通过修改一个参数自动删除,前面已经介绍过参数:relay_log_purge=on 即可,自动清空不再需要中继日志。

总结:

mysql数据库的binlog和relay log日志有着举足轻重的作用,并且relay log仅仅存在于mysql 的slave库,它的作用就是记录slave库中的io进程接收的从主库传过来的binlog,然后等待slave库的sql进程去读取和应用,保证主从同步,但是binlog主库和从库(slave)都可以存在,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘,所以可以通过binlog来实时备份和恢复数据库。

mysql relay log 查看_mysql relay log和binlog 小结相关推荐

  1. mysql relay log 配置_mysql relay log参数汇总

    前言:MySQL进行主主复制或主从复制的时候会在配置文件制定的目录下面产生相应的relay log,本文档总结这些相关参数的定义及解释. 1.什么是relay log The relay log, l ...

  2. mysql optimize 参数查看_Mysql High Performance:Optimize Setting

    Tuning I/O 1. 影响同步数据到disc和恢复数据,因为涉及到了io,对性能影响非常大,其实是在性能与数据安全性上找一个平衡 2. MyISAM delay_key_write:延缓inde ...

  3. mysql排序规则查看_MySQL 查看编码 排序规则

    mysql show variables Variable_name Value collation_connection utf8_general_ci collation_database utf ...

  4. mysql qps如何查看_mysql状态查看 QPS/TPS/缓存命中率查看

    运行中的mysql状态查看 对正在运行的mysql进行监控,其中一个方式就是查看mysql运行状态. (1)QPS(每秒Query量) QPS = Questions(or Queries) / up ...

  5. mysql .err 怎么查看_MySQL日志设置及查看方法

    MySQL有以下几种日志: 错误日志: -log-err 查询日志: -log 慢查询日志: -log-slow-queries 更新日志: -log-update 二进制日志: -log-bin 默 ...

  6. mysql通过视图查看_MySQL教程92-MySQL查看视图

    创建好视图后,可以通过查看视图的语句来查看视图的字段信息以及详细信息.本节主要讲解如何使用 SQL 语句来查看视图的字段信息以及详细信息. 查看视图的字段信息 查看视图的字段信息与查看数据表的字段信息 ...

  7. mysql并发参数查看_MySQL Innodb 并发涉及参数

    可以通过innodb_thread_concurrency 来调节  并发线程数的限制值,使用innodb_thread_sleep_delay来调整当 并发 thread 到达 innodb_thr ...

  8. mysql索引命中查看_MySQL索引无法命中的几种情况及索引验证方法

    几种常见的索引不命中情况如果条件中有 or ,即使其中有条件带索引也不会命中(这也是为什么尽量少用or的原因) like查询是以%开头,如果是int型索引不会命中,字符型的命中 'test%' 百分号 ...

  9. mysql 系统时间查看_mysql 获取系统时间

    **####mysql数据库中获取系统时间** #获取当前系统时间 2020-01-08 15:13:19 select SYSDATE() from BIZ_BILL_DETAIL t; #获取当前 ...

  10. mysql row 日志格式_MySQL 中二进制日志 (binlog) 3 种不同的格式(Mixed,Statement,Row)...

    MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement.总结一下这三种格式日志的优缺点. MySQL ...

最新文章

  1. 全面理解Python中的类型提示(Type Hints)
  2. div渐变遮罩效果:纵向和水平反向渐变遮罩效果,让戛然而止的页面多一丝丝淡淡的过渡效果,温柔中透露着一缕缕优雅...
  3. .net 中 using的几种用法
  4. Bootstrap响应式布局以及栅格框架
  5. TP5:异常处理封装——3
  6. Python 数据分析三剑客之 Pandas(一):认识 Pandas 及其 Series、DataFrame 对象
  7. idea开发搭建scala项目流程(二)
  8. matlab中S函数的概念及使用
  9. jieba基本使用过程
  10. 利用网络月赚10000元揭密
  11. 完整缓和曲线和非完整缓和曲线交点法坐标计算应用
  12. 批量发短信的平台浏览总结
  13. erp系统在会计岗位中起到哪些作用?
  14. 视觉SLAM十四讲笔记-6-1
  15. 2019.03.26 bzoj4444: [Scoi2015]国旗计划(线段树+倍增)
  16. python显示透明图片背景
  17. BJ模拟:医院(支配树)
  18. Java多线程入门(狂神说)
  19. 快速入门EasyX图形编程
  20. 厚涂与平涂的区别是什么,学哪个会好一点?

热门文章

  1. 用c语言编程,统计大写字母,小写字母,数字,其他字符的个数,用C语言:输入一行字符,不超过50个,统计出其中英文大写字母,小写字母,数字,空格以及其他字符个数...
  2. 2016腾讯实习生招聘_基础研究 面试心得
  3. 游戏邦社交游戏-手机游戏行业分析报告(2010年版)
  4. win10下载ie浏览器
  5. 多模模块接单模光纤跳线/单模模块接多模光纤跳线
  6. Electron代码内部签名流程
  7. 企业单位申请代码签名证书方法
  8. Elasticsearch实现内容精确匹配查询
  9. 一定能用到的简单但实用的五种按钮样式(HTML+CSS步骤详解,含详细注释)
  10. 主分区损坏diskgenius_使用Diskgenius完成磁盘结构损坏且无法读取的的情况