二进制日志记录所有更新数据的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. Storm-源码分析-Topology Submit-Executor-mk-threads

    对于executor thread是整个storm最为核心的代码, 因为在这个thread里面真正完成了大部分工作, 而其他的如supervisor,worker都是封装调用. 对于executor的 ...

  2. 模块 - hashlib/subprocess

    hashlib 模块 加密算法: hash (152位)散列 哈希 不可逆得 密码背后就是 hash 程序退出hash 值就变了 ,hash值得结果有可能重复 MD5 (128位) 讯息摘要演算法 基 ...

  3. 东方通tongweb linux安装

    1.把安装的bin文件和license.dat文件放到/opt目录下 2.运行$sh Install_TW5.0.0.0_Standard_Linux.bin -i console 命令在 Linux ...

  4. django--mysql设置

    mysql基本配置 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '127.0.0.1', 'PORT': 3306, 'USE ...

  5. html5.js让IE(包含IE6)支持HTML5元素方法

    原文地址:http://blog.sina.com.cn/s/blog_62a36ec401018oqb.html html5.js让IE(包含IE6)支持HTML5元素方法 微软的最新浏览器IE8及 ...

  6. node.js---sails项目开发(1)

    1.安装Node.js和npm---这里就做介绍啦! 2.需要全局下安装Sails sudo npm install sails -g 3. 在本地创建一个文件夹 mkdir ~/lsg/sails ...

  7. Open Source VOIP applications, both clients and servers (开源sip server & sip client 和开发库)

    SIP Proxies SBO SIP Proxy Bypass All types of Internet Firewall JAIN-SIP Proxy Mini-SIP-Proxy A very ...

  8. CoreThink开发(十)把官方首页轮播替换成HTML5-3D轮播

    效果: 资源已经上传到我的下载里边. http://download.csdn.net/detail/u012995856/9587206 1.复制资源文件到CoreThink项目中 corethin ...

  9. Python(装饰器)

    eval 内容从字符串中提取出来,用Python运行一遍__name__得到函数名字 闭包函数 定义: 函数内部定义的函数称为内部函数 该内部函数包含对外部作用域,而不是对全局作用域的名字的引用 那么 ...

  10. POJ - 2942 Knights of the Round Table (点双联通分量+二分图判定)

    题意:有N个人要参加会议,围圈而坐,需要举手表决,所以每次会议都必须是奇数个人参加.有M对人互相讨厌,他们的座位不能相邻.问有多少人任意一场会议都不能出席. 分析:给出的M条关系是讨厌,将每个人视作点 ...