1.前言
  日志是把数据库的每一个变化都记载到一个专用的文件里,这种文件就叫做日志文件。Mysql默认只打开出错日志,因为过多的日志将会影响系统的处理性能。
  在5.0前支持文本格式和二进制格式,5.0后只支持二进制格式,因为二进制日志在性能、信息处理方面有更多的优点。
2.基础知识
  2.1、二进制日志的启用
    二进制日志由配置文件的log-bin选项负责启用,Mysql服务器将在数据根目录创建两个新文件XXX-bin.001和XXX-bin.index,若配置选项没有给出文件名,Mysql将使用主机名称命名这两个文件,其中.index文件包含一份全体日志文件的清单。
    Mysql会把用户对所有数据库的内容和结构的修改情况记入XXX-bin.n文件,而不会记录SELECT和没有实际
  2.2、更新的UPDATE语句。
  日志文件的扩展
    当停止或重启时,服务器会把日志文件记入下一个日志文件,Mysql会在重启时生成一个新的日志文件,文件序号递增,此外,如果日志文件超过max_binlog_size系统变量配置的上限时,也会生成新的日志文件。
  2.3、日志文件的查看
    Mysql提供了mysqlbinlog命令来查看日志文件,如mysqlbinlog xxx-bin.001 | more。在记录每条变更日志的时候,日志文件都会把当前时间给记录下来,以便进行数据库恢复。   
  2.4、日志文件的停用
    可以使用SET SQL_LOG_BIN=0命令停止使用日志文件,然后可以通过SET SQL_LOG_BIN=1命令来启用。
  2.5、使用日志进行数据库恢复
    如果遇到灾难事件,应该用最近一次制作的完整备份恢复数据库,然后使用备份之后的日志
  文件把数据库恢复到最接近现在的可用状态。
    使用日志进行恢复时需要依次进行,即最早生成的日志文件要最先恢复:
      mysqlbinlog xxx-bin.00001 | mysql -u root -p
      mysqlbinlog xxx-bin.00002 | mysql -u root -p
3.日志跟换策略
  使用索引来循环文件,在以下条件将循环至下一个索引
  a.服务器重启
  b.服务器被更新
  c.日志达到了最大日志长度max_binlog_size
  d.日志被刷新mysql> flush logs;
4.日志格式
  从官网文档中看到,之前的MySQL一直都只有基于statement的复制模式,直到5.1.5版本的MySQL才开始支持row level的复制。从5.0开始,MySQL的复制已经解决了大量老版本中出现的无法正确复制的问题。但是由于存储过程的出现,给MySQL Replication复制又带来了更大的新挑战。另外,看到官方文档说,从5.1.8版本开始,MySQL提供了除Statement Level和Row Level之外的第三种复制模式:Mixed,实际上就前两种模式的结合。在Mixed模式下,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种。新版本中的Statement Level还是和以前一样,仅仅记录执行的语句。而新版本的MySQL中对row level模式也被做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录,如果sql语句确实就是update或者delete等修改数据的语句,那么还是会记录所有行的变更。
  --基于SQL语句的复制(statement-based replication,SBR),
  --基于行的复制(row-based replication,RBR),
  --混合模式复制(mixed-based replication,MBR)。
  静态设置binlog格式:

vi my.cnflog-bin = mysql-bin#binlog_format = "STATEMENT"#binlog_format = "ROW"binlog_format = "MIXED"

动态修改binlog格式:

  mysql> SET SESSION binlog_format = 'STATEMENT';mysql> SET SESSION binlog_format = 'ROW';mysql> SET SESSION binlog_format = 'MIXED'; mysql> SET GLOBAL binlog_format = 'STATEMENT';mysql> SET GLOBAL binlog_format = 'ROW';mysql> SET GLOBAL binlog_format = 'MIXED';

5.binary log相关变量和参数

  5.1、命令行参数

  --log-bin [=file_name]

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

--log-bin-index[=file]

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

--max_binlog_size

Binlog最大值,最大和默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,

为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束。

--binlog-do-db=db_name

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

--binlog-ignore-db=db_name

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

  5.2、系统变量

  log_bin

binlog_cache_size

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

max_binlog_cache_size

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

binlog_cache_use

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

binlog_cache_disk_use

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

binlog_do_db

binlog_ignore_db

sync_binlog

这个参数直接影响mysql的性能和完整性。

sync_binlog=0:

当事务提交后,Mysql仅仅是将binlog_cache中的数据写入binlog文件,但不执行fsync之类的磁盘,同步指令通知文件系统将缓存刷新到磁盘,而让Filesystem自行决定什么时候来做同步,这个是性能最好的。

sync_binlog=0,在进行n次事务提交以后,Mysql将执行一次fsync之类的磁盘同步指令,通知文件系统将Binlog文件缓存刷新到磁盘。

Mysql中默认的设置是sync_binlog=0,即不做任何强制性的磁盘刷新指令,这时性能是最好的,但风险也是最大的。一旦系统Crash,在文件系统缓存中的所有Binlog信息都会丢失。

6.常见问题
  6.1、如何清除binlog
  --使用下面的两个命令
  PURGE {MASTER|BINARY} LOGS TO 'log_name'  //log_name不会被清除
  PURGE {MASTER|BINARY} LOGS BEFORE 'date'  //date不会被清除
 
  实例如下:

mysql> show master logs;
+----------------------+-----------+
| Log_name             | File_size |
+----------------------+-----------+
| mysql3306-bin.000001 |       107 |
+----------------------+-----------+
1 row in set (0.00 sec)mysql> flush logs;
Query OK, 0 rows affected (0.11 sec)mysql> flush logs;
Query OK, 0 rows affected (0.02 sec)mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)mysql> show master logs;
+----------------------+-----------+
| Log_name             | File_size |
+----------------------+-----------+
| mysql3306-bin.000001 |       154 |
| mysql3306-bin.000002 |       154 |
| mysql3306-bin.000003 |       154 |
| mysql3306-bin.000004 |       154 |
| mysql3306-bin.000005 |       107 |
+----------------------+-----------+
5 rows in set (0.00 sec)mysql> purge master logs to 'mysql3306-bin.000002';
Query OK, 0 rows affected (0.01 sec)mysql> show master logs;
+----------------------+-----------+
| Log_name             | File_size |
+----------------------+-----------+
| mysql3306-bin.000002 |       154 |
| mysql3306-bin.000003 |       154 |
| mysql3306-bin.000004 |       154 |
| mysql3306-bin.000005 |       107 |
+----------------------+-----------+
4 rows in set (0.00 sec)

[root@node4 data]# date
Tue Jul 30 01:27:04 CST 2013
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)mysql> show master logs;
+----------------------+-----------+
| Log_name             | File_size |
+----------------------+-----------+
| mysql3306-bin.000002 |       154 |
| mysql3306-bin.000003 |       154 |
| mysql3306-bin.000004 |       154 |
| mysql3306-bin.000005 |       154 |
| mysql3306-bin.000006 |       107 |
+----------------------+-----------+
5 rows in set (0.00 sec)mysql> purge master logs before '2013-07-30 01:27:04';
Query OK, 0 rows affected (0.02 sec)mysql> show master logs;
+----------------------+-----------+
| Log_name             | File_size |
+----------------------+-----------+
| mysql3306-bin.000005 |       154 |
| mysql3306-bin.000006 |       107 |
+----------------------+-----------+
2 rows in set (0.00 sec)

--或使用命令:
  RESET MASTER

删除之前所有的binlog,并重新生成新的binlog,后缀从000001开始。

注:如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是失败,并伴随一个错误。

不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。

当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。

6.2、记录到二进制日志知的内容配置

binlog-do-db=sales 只记录sales库 binlog-ignore-db=sales 除sales库不记录,其他都记录。

但是如果在操作数据库之前,不使用use $dbname 那么所有的SQL都不会记录 如果使用了use $dbname,那么判断规则取决于这里的$dbname,而不是SQL中操作的库

6.3、二进制日志不准确的处理

默认情况下,并不是每次写入时都将二进制日志与硬盘同步。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能二进制日志中最后的语句丢失。 要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使二进制日志在每N次二进制日志写入后与硬盘同步。 即使sync_binlog设置为1,出现崩溃时,也有可能表内容和二进制日志内容之间存在不一致性。

如果崩溃恢复时MySQL服务器发现二进制日志变短了(即至少缺少一个成功提交的InnoDB事务), 如果sync_binlog =1并且硬盘/文件系统的确能根据需要进行同步(有些不需要)则不会发生,则输出错误消息 (“二进制日志<名>比期望的要小”)。 在这种情况下,二进制日志不准确,复制应从主服务器的数据快照开始。 为了您的安全,请只打开来源可靠的网址

MySQL binlog相关推荐

  1. Mysql binlog日志及binlog恢复数据库操作

    初识MySQL 日志binlog MySQL重要log,二进制日志文件,记录所有DDL和DML语句(除select),事件形式记录,包含语句所执行的消耗时间,事务安全型. DDL(数据库定义语言),主 ...

  2. MySQL Binlog解析

    概述 MySQL的安装可以参考:Linux(CentOS)中常用软件安装,使用及异常--MySQL, VmTools MySQL关于Binlog的官方文档:The Binary Log 基于Binlo ...

  3. Mysql binlog应用场景与原理深度剖析

    1 基于binlog的主从复制 Mysql 5.0以后,支持通过binary log(二进制日志)以支持主从复制.复制允许将来自一个MySQL数据库服务器(master) 的数据复制到一个或多个其他M ...

  4. mysql binlog的查询

    查mysql bin-log binlog基本定义:二进制日志,也成为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中: 作用:MySQL的作用类似于Oracle的归 ...

  5. php读取binlog,PHP解析Mysql Binlog

    PHP解析Mysql Binlog,依赖于mysql-replication-listener库 详见:[https://github.com/bullsoft/php-binlog](https:/ ...

  6. mysql binlog 多少,MySQL binlog后面的编号最大是多大?

    在上课中讲到MySQL的binlog是mysql-bin.000001,有细心的学习提到,是不是这个达到mysql-bin.999999后数据库的binlog就要重新开始了? 对于这个问题一时间也被问 ...

  7. MySQL bin-log 日志清理方式

    MySQL bin-log 作用 1.数据恢复:如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失. 2.主从服务器之间同步数据:主服务 ...

  8. mysql基于binlog增量更新_一个应用它提取MySQL binlog,解析binlog并将增量更新数据推送到不同的接收器...

    DolphinBeat Other languages: 中文 This is a high available server that pulls MySQL binlog, parses binl ...

  9. Mysql Binlog三种格式详细介绍

    binlog 的不同模式有什么区别呢? 1.Statement:每一条会修改数据的sql都会记录在binlog中. 优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能.(相比 ...

  10. 好文推荐 | MySQL binlog应用场景与原理深度剖析

    作者:田守枝 来自:田守枝的博客(公众号) 本文深入介绍Mysql Binlog的应用场景,以及如何与MQ.elasticsearch.redis等组件的保持数据最终一致.最后通过案例深入分析binl ...

最新文章

  1. django自带的分页功能
  2. linux shell读取文件
  3. Markdown 语法 示例 字体 字号 颜色
  4. 技术专题讨论:JPA vs MyBatis ?您如何选择?(有奖活动)
  5. mysql数据库主要用来做什么的_为什么有了 MySQL ,还要有时序数据库?
  6. java继承和派生4.4- 4.52020.3.24
  7. 随记(六)--计算代码运行所需时间
  8. mavenspringboot配置不同profile环境
  9. android9.0原生字体,iOS 9原生字体看腻了?不如学着去替换吧
  10. 【Python】【Python库】Python3.7.2 - 字符串str类 (2)
  11. Oracle中的包、存储过程、函数被锁定解决方案
  12. 前端vue项目开发流程
  13. python是什么软件-python是什么软件
  14. R语言与机器学习学习笔记(分类算法)
  15. L298N、电机、单片机的线路连接(51、stm32程序)
  16. ckeditor使用
  17. P11 - 数据流图 之 DFD进行数据流建模
  18. 市面上有哪些程序化软件?
  19. mysql 联合主键_mysql 联合主键和复合主键的区别
  20. 中南民族大学计算机组成原理实验,中南民族大学计算机组成原理试题及答案剖析...

热门文章

  1. 使用 jetty-maven-plugin发布maven项目
  2. iOS 隐藏顶部状态栏方式和更改颜色
  3. 五种常见的 PHP 设计模式
  4. LM_Sensors on Cent OS 5.4 How To Get And Install The Coretemp Module
  5. win 修改hosts文件权限不够,解决办法
  6. ProGuard的返回错误代码1。异常的解决方法
  7. PowerBI从SCCM数据库中分析数据和KPI展现
  8. AbstractQueuedSynchronizer原理分析
  9. gitlab修改项目的url
  10. 脚本检测到文件特定词后做下一步动作 down restart