MySQL二进制日志功能介绍
二进制日志记录所有更新数据的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 #090713 17:20:08 server id 1 end_log_pos 199
- Query thread_id=1 exec_time=0 error_code=0
- 2 use test/*!*/;
- 3 SET TIMESTAMP=1247476808/*!*/;
- 4 SET @@session.pseudo_thread_id=1/*!*/;
- 5 SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1,
- @@session.unique_checks=1, @@session.autocommit=1/*!*/;
- 6 SET @@session.sql_mode=0/*!*/;
- 7 SET @@session.auto_increment_increment=1,
- @@session.auto_increment_offset=1/*!*/;
- 8 /*!\C latin1 *//*!*/;
- 9 SET @@session.character_set_client=8,
- @@session.collation_connection=8,@@session.collation_server=8/*!*/;
- 10 SET @@session.lc_time_names=0/*!*/;
- 11 SET @@session.collation_database=DEFAULT/*!*/;
- 12 insert into t values ('12345')
- 13 /*!*/;
- 14 # at 199
- ...
从第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"。下面是索引文件的内容:
- jason@jason2:~/mysql-bin/var> more jason2-bin.index
- ./jason2-bin.000001
- ./jason2-bin.000002
索引文件最后一行表示当前正在使用的二进制日志名字。
MySQL二进制日志功能介绍的更多相关文章
- MySQL二进制日志总结
二进制日志简单介绍 MySQL的二进制日志(binary log)是一个二进制文件,主要用于记录修改数据或有可能引起数据变更的MySQL语句.二进制日志(binary log)中记录了对MySQL数据 ...
- MySQL二进制日志备份和恢复详解
原文链接:http://www.showerlee.com/archives/681 ****经实践,该教程ok,特在此分享**** 基本概念 定义: 二进制日志包含了所有更新了数据或者已经潜在更新了 ...
- mysql 二进制日志后缀数字最大为多少
之前看到mysql二进制日志后面会加一个以数字递增为结尾的后缀,一直在想当尾数到达999999后会发生什么情况,先查了一下官网,对后缀有这样一句介绍:The server creates binary ...
- MySQL二进制日志(binary log)总结
本文出处:http://www.cnblogs.com/wy123/p/7182356.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...
- mysql二进制日志详解
一.什么是二进制日志 二进制日志主要记录mysql数据库的变化,二进制日志包含所有更新了数据或者潜在更新了数据(如没有匹配到任何行的delete语句),语句以时间的形式保存,描述了数据的更改.二进制日 ...
- MySQl Study学习之--MySQl二进制日志管理
MySQl Study学习之--MySQl二进制日志管理 MySQL二进制日志(Binary Log) a.它包括的内容及作用例如以下: 包括了全部更新了数据或者已经潜在更新了数据(比方没 ...
- MySQL二进制日志的备份和恢复
二进制日志:记录数据库修改的相关操作,作用是即时点回复,主从复制 可以按时间滚动,也可以按大小滚动 server-id:服务器身份标识 一.二进制文件的删除方法,千万不要手动删除 PURGE BINA ...
- 删除MySQL二进制日志
服务器上的120G SSD硬盘空间用了92%,检查后发现,原来是 MySQL的二进制日志没有及时清除,占用了大量的空间, 于是直接用命令:reset master 一把删干净了. 1 reset ma ...
- 查看mysql二进制日志报错问题
在排查网站被黑时想通过Mysql二进制日志找出修改字段时间,但是使用mysqlbinlog报错: [root@zfszsw1 bin]# ./mysqlbinlog /opt/mysql-bin.00 ...
随机推荐
- iOS开发——生命周期
为了处理好应用程序的挂起.暂停等情况下的数据保存,或对应添加所需处理,我们必须了解ios生命周期. 但是不要去背去记,做个实验就好. - (BOOL)application:(UIApplicatio ...
- yum -y install epel-release
EPEL - Fedora Project Wiki https://fedoraproject.org/wiki/EPEL
- 编译Elasticsearch源码
1.从github上clone es的源码 git clone https://github.com/elastic/elasticsearch.git 2.如果没有安装gradle的话,需要安装g ...
- 利用VMware克隆 windows 虚拟机需要注意的事项
利用VMware克隆windows虚拟机需要注意的事项--克隆虚拟机 --powershell 在域服务器使用,查看所有的sid dsquery computer|dsget computer -dn ...
- MYSQL SET ENUM字段类型
show create table stu;//显示建表语句 create table t1(t enum('a','b','c')); insert into t1 values('a'); cre ...
- django 中的视图(Views)
Views Django中views里面的代码就是一个一个函数逻辑, 处理客户端(浏览器)发送的HTTPRequest, 然后返回HTTPResponse, http请求中产生两个核心对象: http ...
- Django——认证系统(Day72)
阅读目录 COOKIE 与 SESSION 用户认证 COOKIE 与 SESSION 概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因 ...
- url监控
#!/usr/bin/env python #coding:utf-8 import MySQLdb,requests import time from datetime import datetim ...
- vim批量注释与取消批量注释(转)
方法一 块选择模式 插入注释: 用v进入virtual(可视化)模式(可以省略这一步) 用上下键选中需要注释的行数 按ctrl+v进入可视化块模式 按大写I进入插入模式,输入注释符‘#’或者是‘//’ ...
- return false 和 return true
常规用法 在普通函数中:return 语句终止函数的执行,并返回一个指定的值给函数调用者,一般会用一个变量接收这个返回值再进行其它处理.如果未指定返回值,则返回 undefined 其中,返回一个函数 ...