MySQL之binlog日志
一、什么是binlog
binlog 是一个二进制格式的文件,用于记录用户对数据库 更新的SQL语句 信息,例如更改数据库表和更改内容的SQL语句都会记录到binlog里,但是对库表等内容的查询不会记录。
默认情况下,binlog 日志是二进制格式的,不能使用查看文本工具的命令(比如,cat,vi等)查看,而使用mysqlbinlog 解析查看。
二、binlog 的作用
用于数据库的主从复制及数据的增量恢复。
三、binlog 三种模式
3.1 Row Level 模式(RBR)
不记录每条sql语句的上下文信息,只需记录哪条数据被修改了,修改成什么样了。
优点:
* 准确性强,能准确复制数据的变更
* 减少数据库锁的使用
缺点:
* 会产生大量的日志,导致较大的网络IO和磁盘IO
* 要求主从数据库表结构完全一致
* 无法在从数据库上单独执行触发器
3.2 Statement Level 模式(SBR)
每一条修改数据的 sql 都会记录到 master 的 bin_log 中,slave 在复制的时候 sql 进程会解析成 master 端执行过的相同的 sql 在 slave 库上再次执行。
优点:
* 不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能
* 并不强制要求主从数据库的表结构定义完全相同
缺点:
* 在某些情况下会导致 master-slave 中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)
* 相比于 RBR 模式,在执行复制时需要更多的行锁
3.3 MIXED模式(MBR)
以上两种模式的混合使用,一般的复制使用 STATEMENT 模式保存 binlog,对于 STATEMENT 模式无法复制的操作使用 ROW 模式保存 binlog,MySQL会根据执行的 SQL 语句选择日志保存方式。
优点:
准确性强,文件大小适中
缺点:
有可能发生主从不一致问题
3.4 binlog模式的选择
1. 不用存储过程、触发器、函数,选择默认的 Statement level
2. 用到MySQL的特殊功能(存储过程、触发器、函数)选择Mixed模式
3. 用到MySQL的特殊功能(存储过程、触发器、函数),又希望数据最大化一直则选择Row模式
四、binlog 常用参数
| 参数名 | 含义 |
|---|---|
| log_bin = {on | off | base_name} | 指定是否启用记录二进制日志或者指定一个日志路径 |
| sql_log_bin ={ on | off } | 指定是否启用记录二进制日志 |
| expire_logs_days | 指定自动删除二进制日志的时间,即日志过期时间 |
| log_bin_index | 指定mysql-bin.index文件的路径 |
| binlog_format = { mixed | row | statement } | 指定二进制日志基于什么模式记录 |
| max_binlog_size | 指定二进制日志文件最大值 |
| binlog_cache_size | 指定事务日志缓存区大小 |
| max_binlog_cache_size | 指定二进制日志缓存最大大小 |
| sync_binlog = { 0 | n } | 指定写缓冲多少次,刷一次盘 |
五、实践
5.1 检查 binlog 功能是否开启
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | OFF |
+---------------+-------+
1 row in set (0.00 sec)
可以看到 binlog 功能默认是关闭的。
5.2 开启 binlog 功能
创建 binlog 存放路径并赋权
[root@VM_0_15_centos log]# mkdir -p /var/log/mysql
[root@VM_0_15_centos log]# chown -R mysql.mysql /var/log/mysql
编辑 my.cnf 配置文件
[root@VM_0_15_centos log]# vim /etc/my.cnf
在 [mysqld] 标签下编辑如下内容:
# binlog 存放路径
log_bin=/var/log/mysql/mysql-bin
# 服务Id,保持唯一
server_id=1
重启 MySQL 服务
[root@VM_0_15_centos log]# systemctl restart mysqld
重新检查是否开启日志功能
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.00 sec)
5.3 查看 binlog 模式
mysql> show variables like '%binlog_format%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.00 sec)
可以看到 MySQL 5.7 版本默认 binlog 模式是 ROW。
5.4 修改 binlog 模式
编辑 my.cnf 配置文件
[root@VM_0_15_centos log]# vim /etc/my.cnf
在 [mysqld] 标签下编辑如下内容:
binlog_format=mixed
重启服务
[root@VM_0_15_centos log]# systemctl restart mysqld
查看 binlog 模式
mysql> show variables like '%binlog_format%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | MIXED |
+---------------+-------+
1 row in set (0.00 sec)
5.5 查看 binlog 文件
查看 statement 模式文件:
mysqlbinlog 文件名
查看 row 模式文件
mysqlbinlog -vv 文件名
5.6 删除 binlog 文件
方法一:
reset master
注:此命令将会删除所有日志,并让日志文件重新从000001开始。
方法二:
PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }
实例:
purge master logs to "binlog_name.00000X"
将会清空 00000X 之前的所有日志文件.
方法三:修改 my.cnf 配置
expire_logs_days = 3 #保留最近3天的binlog;默认值是0,表示不自动删除.
MySQL之binlog日志的更多相关文章
- mysql通过binlog日志来恢复数据
简介 在生产的过程中有这么一个业务场景:比如我在2016-11-19 09:30:00 通过mysqldump的方式备份了数据库,但是在2016-11-19 10:30:00的时候数据库崩溃了,如果通 ...
- mysql清理binlog日志
mysql的binlog日志过多过大,清理过程. 1.查看binlog日志 mysql> show binary logs; +------------------+-----------+ | ...
- Mysql利用binlog日志恢复数据操作(转)
a.开启binlog日志:1)编辑打开mysql配置文件/etc/mys.cnf[root@vm-002 ~]# vim /etc/my.cnf在[mysqld] 区块添加 log-bin=mysql ...
- 20180530利用Maxwell组件实时监听Mysql的binlog日志
转自:https://blog.csdn.net/qq_30921461/article/details/78320750 http://kafka.apache.org/quickstart htt ...
- 查看mysql的bin-log日志
1.查看有哪些binlog show binary logs; show master logs; 2.如何查看log_bin中的内容 show binlog events; 查看第一个binlog的 ...
- mysql将bin-log日志文件转为sql文件
查看mysqlbinlog版本 mysqlbinlog -V [--version] 查看binlog日志开启状态 show variables like '%log_bin%'; mysql打开bi ...
- 监听MySQL的binlog日志工具分析:Canal
Canal是阿里巴巴旗下的一款开源项目,利用Java开发.主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费,目前主要支持MySQL. GitHub地址:https://github. ...
- MySQL二进制binlog日志说明以及利用binlog日志恢复数据
MySQL的binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全量备份+binlog日志恢复增量数据部分). 一.关于 ...
- mysql 开启binlog日志,恢复误删的表、数据、mysql库
linux下开启mysql的binlog日志功能 1.配置mysql配置文件my.cnf(内容如下). #配置文件储存的位置log-bin=mysql-bin#5.7以及以上版本需要配置这一行(保证唯 ...
- 解说mysql之binlog日志以及利用binlog日志恢复数据
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...
随机推荐
- IDEA中使用mybatis逆向工程
如果使用过mybatis的人就会发现,当我们使用mybatis时,我们每次都需要自己手动创建实体类,映射文件(当然你也可以用注释),还有接口来进行使用,这样手动创建非常的繁琐,mybatis考虑到这方 ...
- Java 面向对象面试题
1.Java面向对象的三种特性 封装:封装是把数据和操作数据的方法封装起来,对数据的访问只能通过已定义的接口进行访问. Java的四种访问控制符: - 默认的(default):不使用任何修饰符,在同 ...
- github项目readme.md文件如何编写
参考链接:http://blog.csdn.net/Bone_ACE/article/details/48318675
- Java_异常介绍
今日内容介绍: 掌握异常概述 理解异常的基础操作以及最简单的捕获处理 理解多异常捕获处理 理解声明抛出异常 掌握自定义异常 掌握异常处理注意事项 异常 什么是异常?Java代码在运行时期发生的问题就是 ...
- DH、RSA与ElGamal非对称加密算法实现及应用
1.对称加密与非对称加密概述 关于对称加密与非对称加密的概念这里不再多说,感兴趣可以看下我之前的几篇文章,下面说一说两者的主要区别. 对称加密算法数据安全,密钥管理复杂,密钥传递过程复杂,存在密钥泄露 ...
- Set接口的使用
Set集合里多个对象之间没有明显的顺序.具体详细方法请参考API文档(可见身边随时带上API文档有多重要),基本与Collection方法相同.只是行为不同(Set不允许包含重复元素). Set集合不 ...
- 1.Java概述、安装及环境搭建
1. 前言 1.1 学习方法 1. 学会学习的方法 2. 学会独立解决问题 3. 主动的学习而不是被动的接受 4. 知识的大家的,能力才是自己的 1.2 推荐博客 当代程序员都应该养成写博客.看博客的 ...
- 贪心算法---The best time to buy and sell store-ii
Say you have an array for which the i th element is the price of a given stock on day i. Design an a ...
- linux字符设备驱动中内核如何调用驱动入口函数 一点记录
/* 内核如何调用驱动入口函数 ? *//* 答: 使用module_init()函数,module_init()函数定义一个结构体,这个结构体里面有一个函数指针,指向first_drv_init() ...
- interceptor拦截器
fifter.servlet.interceptor fifter用来处理请求头.请求参数.编码的一些设置,然后转交给servlet,处理业务,返回 servlet现在常用的spring,servle ...