二进制日志记录所有更新数据的SQL语句,其中也包含可能更新数据的SQL语句,例如DELETE语句执行过程中无匹配的行。二进制日志中还包含了与执行SQL语句相关的内容,例如SQL语句执行的时间、错误代码等。

 二进制日志功能介绍

MySQL中的二进制日志主要有两个功能:数据恢复和数据复制。

数据恢复--MySQL本身具备数据备份和恢复功能。例如我们可以每天午夜12:00进行数据备份。但是,此类备份功能并不是对数据库的实时备份,如果数据库在下午17:00出现故障无法恢复,那么从前一天午夜12:00到当天下午17:00的数据库内容将丢失。通过二进制日志可以解决这个问题。可以通过前一天午夜12:00的数据库备份文件恢复数据库,然后使用二进制日志恢复从前一天午夜12:00到当天下午17:00的数据库内容。

数据复制--MySQL支持主从服务器间的数据复制功能,并通过该功能实现数据库的冗余机制以保证数据库的可用性和提高数据库的性能。MySQL正是通过主服务器的二进制日志来实现数据的传递。主服务器上的二进制日志内容会被发送到各个从服务器,并在每个从服务器上执行,从而保证了主从服务器之间数据的一致性。

在默认配置下,MySQL不记录二进制日志。可以通过设置参数--log-bin=[base_name]启用二进制日志功能,MySQL会将修改数据库内容的语句记录到以base_name-bin.0000X为名字的日志文件中。其中bin代表binary,后缀0000X为二进制日志文件顺序。每次MySQL启动时,日志文件顺序会自动加1。如果base_name未定义,MySQL将使用pid-file参数设置的值作为二进制日志文件的基础名字。

我们可以从前面介绍的二进制日志的功能(数据恢复和数据复制)看出,二进制日志主要是供MySQL内部使用的,并不是为了数据库管理员阅读使用。因此,二进制日志与前面介绍的几种日志一个重要的不同就是,二进制日志文件的格式不是文本格式,其内容不能通过记事本直接查看。但是,为了管理员的方便,MySQL也提供了一个名为mysqlbinlog的工具,用于查看和处理二进制日志文件的内容。mysqlbinlog的用法为直接在命令后面添加二进制日志文件作为参数,比如:$mysqlbinlog jason2-bin.000001,其中jason2-bin.000001为二进制日志文件。

该命令运行后的结果如下,为了方便阅读,只节选了一部分具有代表性的内容:

  1. ...
  2. 1 #090713 17:20:08 server id 1  end_log_pos 199
  3. Query   thread_id=1    exec_time=0    error_code=0
  4. 2 use test/*!*/;
  5. 3 SET TIMESTAMP=1247476808/*!*/;
  6. 4 SET @@session.pseudo_thread_id=1/*!*/;
  7. 5 SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1,
  8. @@session.unique_checks=1, @@session.autocommit=1/*!*/;
  9. 6 SET @@session.sql_mode=0/*!*/;
  10. 7 SET @@session.auto_increment_increment=1,
  11. @@session.auto_increment_offset=1/*!*/;
  12. 8 /*!\C latin1 *//*!*/;
  13. 9 SET @@session.character_set_client=8,
  14. @@session.collation_connection=8,@@session.collation_server=8/*!*/;
  15. 10 SET @@session.lc_time_names=0/*!*/;
  16. 11 SET @@session.collation_database=DEFAULT/*!*/;
  17. 12 insert into t values ('12345')
  18. 13 /*!*/;
  19. 14 # at 199
  20. ...

从第1~14行记录了一条对数据库更改操作的SQL语句(第12行):insert into t values ('12345')。第1行记录内容如表11-6所示。

表11-6  记录内容说明

日志的第2行表示切换到MySQL服务器的test数据库。第3~11行设置当前会话的一些环境变量,例如是否自动提交(session.autocommit)、是否检查外键约束(session.foreign_key_ checks)等。如果需要了解它们详细的参数和说明,可以参考MySQL使用手册的第5章第1小节。

日志第12行为该条记录的核心,即对数据库进行了更改操作的SQL语句(insert into t values ('12345'))。日志第14行表示该条日志记录的结束。

以上分析了MySQL二进制日志如何记录一条对数据库进行更改的SQL语句,对于其他SQL语句的记录格式与上面的类似。

前面提到,每次MySQL启动时,日志文件顺序会自动加1。例如当前二进制日志文件名为:jason2-bin.000001,停止并重启动MySQL后,二进制日志文件名为jason2-bin.000002,新的更改数据库的操作将被记录到新的文件中。旧的二进制日志文件用于进行数据库的复制或者恢复。

默认情况下,在数据库目录下还有一个索引文件用来记录已经使用的二进制日志文件的名字,该索引文件的名字为"hostname-bin.index"。下面是索引文件的内容:

  1. jason@jason2:~/mysql-bin/var> more jason2-bin.index
  2. ./jason2-bin.000001
  3. ./jason2-bin.000002

索引文件最后一行表示当前正在使用的二进制日志名字。

MySQL二进制日志功能介绍的更多相关文章

  1. MySQL二进制日志总结

    二进制日志简单介绍 MySQL的二进制日志(binary log)是一个二进制文件,主要用于记录修改数据或有可能引起数据变更的MySQL语句.二进制日志(binary log)中记录了对MySQL数据 ...

  2. MySQL二进制日志备份和恢复详解

    原文链接:http://www.showerlee.com/archives/681 ****经实践,该教程ok,特在此分享**** 基本概念 定义: 二进制日志包含了所有更新了数据或者已经潜在更新了 ...

  3. mysql 二进制日志后缀数字最大为多少

    之前看到mysql二进制日志后面会加一个以数字递增为结尾的后缀,一直在想当尾数到达999999后会发生什么情况,先查了一下官网,对后缀有这样一句介绍:The server creates binary ...

  4. MySQL二进制日志(binary log)总结

    本文出处:http://www.cnblogs.com/wy123/p/7182356.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

  5. mysql二进制日志详解

    一.什么是二进制日志 二进制日志主要记录mysql数据库的变化,二进制日志包含所有更新了数据或者潜在更新了数据(如没有匹配到任何行的delete语句),语句以时间的形式保存,描述了数据的更改.二进制日 ...

  6. MySQl Study学习之--MySQl二进制日志管理

    MySQl Study学习之--MySQl二进制日志管理 MySQL二进制日志(Binary Log)   a.它包括的内容及作用例如以下:     包括了全部更新了数据或者已经潜在更新了数据(比方没 ...

  7. MySQL二进制日志的备份和恢复

    二进制日志:记录数据库修改的相关操作,作用是即时点回复,主从复制 可以按时间滚动,也可以按大小滚动 server-id:服务器身份标识 一.二进制文件的删除方法,千万不要手动删除 PURGE BINA ...

  8. 删除MySQL二进制日志

    服务器上的120G SSD硬盘空间用了92%,检查后发现,原来是 MySQL的二进制日志没有及时清除,占用了大量的空间, 于是直接用命令:reset master 一把删干净了. 1 reset ma ...

  9. 查看mysql二进制日志报错问题

    在排查网站被黑时想通过Mysql二进制日志找出修改字段时间,但是使用mysqlbinlog报错: [root@zfszsw1 bin]# ./mysqlbinlog /opt/mysql-bin.00 ...

随机推荐

  1. SQL case when else

    先占个坑,sql 版本的swith case SELECT Oldvote, (CASE THEN (SELECT NOW() from dual) END) as "number" ...

  2. c# WinForm英雄联盟挂机源码及实现原理

    主要功能:全自动化英雄联盟挂机,游戏中会在原地放技能保持不掉线状态,游戏结束自动重新开始,自动选择英雄,可以晚上挂机刷人机: 缺陷:没怎么完善,如果掉线或者游戏崩溃网络断了软件会自动停止操作,使用时间 ...

  3. SQL CHECK sql server免费监控单实例工具

    SQL Check 阅读目录 SQL Check? 主要特点 说说不足 下载地址 小结 一款实时性能监测工具 回到目录 SQL Check? 一款实时监测SQL数据库性能.实时排查的问题的免费工具. ...

  4. 微信读书App来了 小伙伴们快去占榜吧

    微信读书App正式上线了,iOS版和Android版同时推出.届时将会出现像微信运动一样的霸榜小伙伴.资料显示,阅文集团成立于2014年1月,是腾讯文学和盛大文学联合成立的新公司.阅文集团成立后,会对 ...

  5. Mac 启动和关闭rabbitmq

    1.安装 brew install rabbitmq 2.启动及关闭RabbitMQ服务 前台启动 sudo ./rabbitmq-server    或 sudo su/usr/local/Cell ...

  6. 关于shared pool的深入探讨(五)

    Oracle使用两种数据结构来进行shared pool的并发控制:lock 和 pin.Lock比pin具有更高的级别. Lock在handle上获得,在pin一个对象之前,必须首先获得该handl ...

  7. BZOJ 3689: 异或之

    字典树可以$o(logn)查找第k大$ 使用$可持久化Trie 区间查找第k大,然后首先把每个数异或之后的最小丢进小根堆中,然后一个一个取出,取出后就再丢次小,一共取k次$ 总的时间复杂度为$O(kl ...

  8. POJ - 2226 Muddy Fields (最小顶点覆盖)

    *.*. .*** ***. ..*. 题意:有一个N*M的像素图,现在问最少能用几块1*k的木条覆盖所有的 * 点,k为>=1的任意值. 分析:和小行星那题很像.小行星那题是将一整行(列)看作 ...

  9. LightOJ - 1138 (二分+阶乘分解)

    题意:求阶乘尾部有Q(1 ≤ Q ≤ 108)个0的最小N 分析:如果给出N,然后求N!尾部0的个数的话,直接对N除5分解即可(因为尾部0肯定是由5*2构成,那么而在阶乘种,2的因子个数要比5少,所以 ...

  10. sql 语句 名称解析,是 由内向外的。

    子查询内  找不到的 字段 会 向外 寻找,还是找不到 就报错:找到了就不报错,但是 子查询语句就毫无意义了: 解决办法:  字段前面要跟上表的名称.  一般 字段无效 立刻 报错.