MySQL和Mariadb二进制日志binlog详解
Mariadb/mysql提供了4中不同的日志,分别是错误日志(error.log)、普通日志(general log)、慢日志(slow log)以及二进制日志(binlog)。错误日志记录了系统启动、运行以及停止过程中遇到的一些问题;普通日志记录了Mariadb执行的所有语句以及语句开始执行的时间等信息,用户可以选择性的打开它;慢日志记录了Mariadb所有慢查询的相关信息;而二进制日志则以事件的形式记录了mariadb的库表结构以及表数据的所有变更信息。
一:binlog的作用
l 复制:在Mariadb/mysql的主从结构中,主库的binlog记录了主库的所有更改操作,从库通过读取主库的binlog,在本地重放获取的binlog,这样从库就拥有和主库相同的数据,达到复制目的。
l 备份恢复:binlog记录了数据库的所有更改信息,所以当Mariadb/mysql发生崩溃的时候,能够以最近备份点作为起点,然后执行在备份点之后产生的binlog中所有事件,实现数据库最大可能的恢复。
- index文件按照书序记录了Mariadb/Mysql使用的所有binlog文件,管理binlog文件。
二:binlog·的3种格式
- STATEMENT:顾名思义,STATEMENT格式的binlog记录的是数据库上执行的原生SQL语句
l ROW:这种格式的binlog记录的是数据表的行是怎样被修改的。
l MIXED:如果设置了这种格式,Mariadb/Mysql会在一些特定的情况下自动从STATEMENT格式切换到ROW格式。例如,包含UUID等不确定性函数的语句,引用了系统变量的语句,等等。
三:开启binlog
[mysqld]
log-bin = base-name
BINLOG_FORMAT = ROW
四:binlog的相关参数
- max_binlog_size参数 此参数来限定单个binlog文件的大小。binlog文件可能会大于max_binlog_size参数设定的阀值,因为一个事务所产生的所有事件必须记录在同一个binlog文件中。
- binlog过滤器 拥有root权限的用户可以通过执行SET sql_log_bin = 0命令来禁用当前会话,该回话执行的所有操作都不会记录在binlog中。
sync_binlog参数;默认情况下syc_binlog=0,binlog文件在每次写入内容后是不会立刻持久化到磁盘上的具体的持久化操作会交给操作系统来做。真阳当操作系统崩溃的时候,对binlog文件进行的修改可能会丢失,从而造成binlog文件的数据丢失和不一致性。为了避免发生这种情况,可以将sync_binlog配置成1,这样在将事务写入到binlog文件之后会立即执行fsync操作将binlog文件的修改同步到磁盘上。但这样会降低Mariadb的性能,因为sync是个昂贵的系统调用,也可以将sync_binlog配置成一个整数N,指定在写入N个是事务之后才执行一次fsync操作。
bin-log事件
通过执行show binlog events in "binlog-file"命令来查看指定binlog文件中的事件。如果binlog格式为STATEMENT ,还能看出具体执行的SQL语句。
五:清理binlog
手动清理binlog的方式有两种,一种是使用Mariadb提供的purge命令,一种是通过系统自带的rm命令
purge {binary | master } logs to "binlog-file-name"
purge {binary | master } logs before "datetime-expi"
其中第一种形式的purge命令的作用是将binlog—file-name之前的所有binlog文件清理掉,而第二种形式的purge命令是将最后修改时间早于datetime-expi的binlog文件清理掉
使用rm命令手动清理binlog的流程如下。
(1)确保你的mysql处于停止状态
(2)使用rm命令按顺序删除binlog文件
(3)修改index文件,把已经删除的binlog文件从index文件中删除
自动清理binlog
在启动mysql server的时候,携带expire_log_days=N 参数(0≤N≤99),或则在配置文件中添加expire_logs_days=N选项,这样mysql只会保存N天的binlog,过期的binlog会被自动清理掉。
六:MySQL和Mariadbmysqlbinlog工具
mysqlbilog工具可以将binlog中事件包含的信息以文本的形式打印出来。
mysqlbinlog [options] binlog-file ...
通过mysqlbinlog进行恢复主要有一下两步,
1:使你的数据库恢复到最近备份点的状态
2:执行mysqlbinlog your-bin-log | mysql -u root -p ,将binlog中记录的修改,反映到数据库中。(如果有多个binlog文件,本步需要执行多次)
MySQL和Mariadb二进制日志binlog详解的更多相关文章
- MySQL日志功能详解
MySQL日志功能详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询日志 它是用来保存所有跟查询相关的日志,这种日志类型默认是关闭状态的,因为MySQL的用户有很多,如果 ...
- MySQL 日志管理详解
大纲 一.日志分类 二.日志详解 注:MySQL版本,Mysql-5.5.32(不同版本的mysql变量有所不同) 一.日志分类 错误日志 查询日志 慢查询日志 二进制日志 中继日志 事务日志 滚动日 ...
- mysql数据恢复,binlog详解
个人博客:mysql数据恢复,binlog详解 binlog日志恢复数据,是挽救错误操作和数据损坏一根救命稻草,所以认识和使用binglog对于技术人员还是很有必要的 binlog一般用于 主从复制 ...
- mysql导出csv/sql/newTable/txt的方法,mysql的导入txt/sql方法...mysql备份恢复mysqlhotcopy、二进制日志binlog、直接备份文件、备份策略、灾难恢复.....................................................
mysql备份表结构和数据 方法一. Create table new_table_nam备份到新表:MYSQL不支持: Select * Into new_table_name from old_t ...
- MySQL Binlog详解
MySQL Binlog详解 Mysql的binlog日志作用是用来记录mysql内部增删改查等对mysql数据库有更新的内容的记录(对数据库的改动),对数据库的查询select或show等不会被bi ...
- mysql dba系统学习(6)二进制日志binlog之二
MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement.总结一下这三种格式日志的优缺点.MySQL R ...
- mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)
一.概述 二进制日志(binlog)记录了所有的DDL(数据定义语言)语句和DML(数据操纵语言)语句,但是不包括数据查询语句, 语句以"事件"的形式保存,它描述了数据的更改过程, ...
- (转)总结之:CentOS 6.5 MySQL数据库的基础以及深入详解
总结之:CentOS 6.5 MySQL数据库的基础以及深入详解 原文:http://tanxw.blog.51cto.com/4309543/1395539 前言 早期MySQL AB公司在2009 ...
- MySQL数据库使用mysqldump导出数据详解
mysqldump是mysql用于转存储数据库的实用程序.它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等.接下来通过本文给大家介绍MySQL数 ...
随机推荐
- java基础知识-原码,反码,补码
1.正数:原码,反码,补码:都一样. 2.负数:和正数的储存方式不同,负数都是以补码形式存储的. <1>负数的补码 把负数的原码除了符号位取反后再+1. <2>负数的原码 把对 ...
- codeforces 477D
题意:给定一个长度<=5000的二进制字符串S,以及一个初始为0的n,有一下两种操作: 1. 输出n(n>=1并且为2进制形式输出) 2.n=n+1 每次选择一种操作.. 求:1.有多少方 ...
- AWS–Sysops notes
Monitoring, Metrics and Analysis 1.CouldWatch Introduction2.EC2 Status Troubleshooting3.Create A Cou ...
- XML Publisher 并发程序由于"输出提交处理程序提交失败
http://www.cnblogs.com/benio/archive/2012/03/30/2424900.html xmlp 报表运行完成后,状态为warning,其原因大概有以下3类:1.&q ...
- 解决toad中number类型小数位数过长按科学计数法显示的问题
在toad中->view->option->data->display large number in scientific notation,不选择该选项即可. (在pl/s ...
- [翻译]Bitmap的异步加载和缓存
内容概述 [翻译]开发文档:android Bitmap的高效使用 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently", ...
- POJ 2442(优先队列 k路归并 堆)
Description Given m sequences, each contains n non-negative integer. Now we may select one number fr ...
- 大众点评Cat--架构分析
转自:http://blog.csdn.net/szwandcj/article/details/51025669 Cat功能强大且多,光日志的报表和图表分析就有十几种,但文档却很少,寥寥无几找到一些 ...
- Git-根据tag创建分支
有时候需要根据tag创建分支. 现在主分支上有一个tag为vtest.1.0.FINAL,主分支的名字为master. 1.执行:git origin fetch 获得最新. 2.通过:git bra ...
- 一步步Cobol 400上手自学入门教程06 - 子程序调用
子程序的命名通常和普通程序的命名方式相同.但是需要注意的是,对于子程序而言,不可将其前缀命名为以下这几个名字. AFB AFH CBC CEE ...