首页 / 日志 / mysql---二进制日志
mysql---二进制日志
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql---二进制日志,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3296字,纯文字阅读大概需要5分钟。
内容图文
格式
binlog_format={STATEMENT|ROW|MIXED}
- 语句(statement):默认的记录格式,基于段
- 行(row):定义的并非数据本身而是这一行的数据是什么
- 混合模式(mixed):交替使用行和语句、由mysql服务器自行判断
基于段的日志格式
优点
- 日志记录量相对较小,节约磁盘及网络IO
- 只对一条记录修改或者插入,row格式所产生的日志量小于段产生的日志量
缺点
- 必须要记录上下文信息,保证语句在从服务器上执行结果与主服务器相同
- 特定函数如UUID(),user()这样非确定性函数还是无法复制;可能造成MySQL复制的主备服务器数据不一致
操作
mysql> show variables like ‘binlog_format‘;
mysql> set session binlog_format=statement;
mysql> show binary logs;
mysql> flush logs;
行日志格式
- 5.7版本的默认格式
- Row格式可以避免Mysql复制中出现的主从不一致问题
同一SQL语句修改了10000条数据的情况下
- 基于段的日志格式只会记录这个SQL语句
- 基于行的日志会有10000条记录分别记录每一行的数据修改
优点
- 使MySQL主从复制更加安全
- 对每一行数据的修改比基于段的复制高效
误操作而修改了数据库中的数据,同时又没有备份可以恢复时,我们就可以通过分析二进制日志,对日志中记录的数据修改操作做反向处理的方式来达到恢复数据的目的
缺点
- 记录日志量较大;binlog_row_image=[FULL|MINIMAL|NOBLOB]
混合日志格式
binlog_format=MIXED
特点
- 根据SQL语句由系统决定基于段和基于行的日志格式中进行选择
- 数据量的大小由所执行的SQL语句决定
二进制日志格式对复制的影响
基于SQL语句(statement)复制(SBR)
优点
- 生成的日志量少,节约网络传输IO
- 并不强制要求主从数据库的表定义完全相同
- 相比于基于行的复制方式更为灵活
缺点
- 对于非确定性事件,无法保证主从复制数据的一致性
- 对于存储过程,触发器,自定义函数进行的修改也可能造成数据不一致
- 相比于基于行的复制方式在从上执行时需要更多的行锁
基于行的复制(PBR)
优点
- 可以应用于任何SQL的复制包括非确定函数,存储过程等
- 可以减少数据库锁的使用
- 对主从数据的一致性更加有保证
缺点
- 要求主从数据库的表结构相同,否则可能会中断复制
- 无法在从上单独执行触发器
查看二进制日志
数据库会话查看
#显示当前服务器使用的二进制文件及大小
mysql> show binary logs
#显示主服务器使用的二进制文件及大小
mysql> show master logs;
#当前使用的二进制文件及所处位置
mysql> show master status
#lush logs一般只会滚动中继日志和二进制日志
mysql> flush logs;
#二进制日志的记录位置,通常为上一个事件执行结束时间的位置
mysql> showmaster status;
#...数据库的增删改查
#观察二进制位置的变化
mysql> show master status;
#查看所有的二进制信息
mysql> show binlog events\G;
#查看指定日志的二进制信息
mysql> show binlog events in ‘mysql-bin.000011‘;
#从指定的事件位置开始
mysql> show binlog events in ‘mysql-bin.000011‘ from 190;
#指定偏移量(不是语句,是事件)
mysql> showbinlog events in ‘mysql-bin.000011‘ from 190 limit 3;
命令行mysqlbinlog
#必须在数据目录下
mysqlbinlog mysql-bin.000017
#导出此数据库的信息
mysqlbinlog mysql-bin.000017 > /tmp/a.sql
#导入此数据库的信息
mysql < a.sql
mysqlbinlog -vv 日志名
二进制日志删除
长时间不清理会浪费很多的磁盘空间,但是删除后可能导致数据库崩溃无法进行恢复.
若要删除二进制日志首先将其和数据库备份一份
#删除所有的二进制日志(不可效仿)
mysql> reset master;
#根据文件或时间点来删除二进制日志
# TO ‘log_name‘ 删除文件之前的所有文件
mysql> PURGE { BINARY | MASTER } LOGS {TO ‘log_name‘ | BEFORE datetime_expr }
#使用时间来删除二进制日志
mysql> PURGEBINARY LOGS BEFORE ‘13-10-19 10:26:36‘;
mysql---二进制日志
标签:ast 开始 存储过程 命令 恢复 eve minimal res 开启
本文系统来源:http://www.cnblogs.com/wajika/p/6710930.html
内容总结
以上是互联网集市为您收集整理的mysql---二进制日志全部内容,希望文章能够帮你解决mysql---二进制日志所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。