mysql binlog二进制日志详解

时间:2024-01-19 09:09:56 

基本概念
定义:
二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。

作用:
1。二进制日志的主要目的是在恢复使能够最大可能地更新数据库,因为二进制日志包含备份后进行的所有更新。
2。二进制日志还用于在主复制服务器上记录所有将发送给从服务器的语句。
不良影响:
运行服务器时若启用二进制日志则性能大约慢1%。

如何启动:
通过 –log-bin=file选项可以启用
(更改my.ini文件)
日志位置
>>如果没有指定文件名,则Mysql使用hostname-bin文件.
>>如果指定了相对路径,则假定该路径相对于数据目录
>>Mysql在文件名后添加了数字索引.所以该文件最后的形式为filename.number
如果你在日志名中提供了扩展名(例如,–log-bin=file_name.extension),则扩展名被悄悄除掉并忽略。

更换策略:
使用索引来循环文件,在以下条件将循环至下一个索引
1。服务器重启
2。服务器被更新
3。日志到达了最大日志长度 max_binlog_size
4。日志被刷新 mysql> flush logs;

工具介绍:
shell>>mysqlbinlog [option] binlogFile> newfile
如: D:\mysql\log>mysqlbinlog binlog.000001 > 1.txt
一个例子:
log-bin=”D:/mysql/log/binlog” 那么,在该文件夹下就会有文件D:/mysql/log/binlog.000001等

常见问题
1.如何清除binlog
>>>使用下面的两个命令
PURGE {MASTER | BINARY} LOGS TO ‘log_name' //log_name不会被清除
PURGE {MASTER | BINARY} LOGS BEFORE ‘date' //date不会被清除

实例如下:
mysql> purge master logs to ‘binlog.000004′;
Query OK, 0 rows affected (0.01 sec)

mysql> purge master logs before '2009-09-22 00:00:00′;
Query OK, 0 rows affected (0.05 sec)

>>>或使用命令
RESET MASTER

删除之前所有的binlog,并重新生成新的binlog
后缀从000001开始

注:如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,
则本语句不会起作用,而是会失败,并伴随一个错误。
不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。
当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。

2.记录到二进制日志知的内容配置
binlog-do-db=sales 只记录sales库
binlog-ignore-db=sales 除sales库不记录,其他都记录

但是如果在操作数据库之前,不使用use $dbname 那么所有的SQL都不会记录
如果使用了use $dbname,那么判断规则取决于这里的$dbname,而不是SQL中操作的库

3.二进制日志不准确的处理
默认情况下,并不是每次写入时都将二进制日志与硬盘同步。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能二进制日志中最后的语句丢失。
要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使二进制日志在每N次二进制日志写入后与硬盘同步。
即使sync_binlog设置为1,出现崩溃时,也有可能表内容和二进制日志内容之间存在不一致性。

如果崩溃恢复时MySQL服务器发现二进制日志变短了(即至少缺少一个成功提交的InnoDB事务),
如果sync_binlog =1并且硬盘/文件系统的确能根据需要进行同步(有些不需要)则不会发生,则输出错误消息 (“二进制日志<名>比期望的要小”)。
在这种情况下,二进制日志不准确,复制应从主服务器的数据快照开始。

标签:binlog,二进制,日志
0
投稿

猜你喜欢

  • 使用FormData实现上传多个文件

    2024-05-11 09:30:20
  • python将pandas datarame保存为txt文件的实例

    2021-11-17 06:21:51
  • 初衷和结果

    2009-02-23 12:52:00
  • python用fsolve、leastsq对非线性方程组求解

    2021-06-28 23:33:29
  • Python字典底层实现原理详解

    2021-04-09 12:58:28
  • 微信小程序开发之数据存储 参数传递 数据缓存

    2024-04-19 09:49:44
  • 运行asp.net程序 报错:磁盘空间不足

    2024-01-16 23:48:21
  • 第一类工厂与哈希对象

    2009-12-28 13:14:00
  • asp 获取url函数小结

    2011-03-17 10:38:00
  • Python在游戏中的热更新实现

    2022-04-05 14:10:15
  • python 多态 协议 鸭子类型详解

    2023-10-03 11:53:00
  • python3下实现搜狗AI API的代码示例

    2022-04-11 09:30:58
  • Python轻松破解加密压缩包教程详解

    2021-04-12 13:26:45
  • Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作

    2022-05-06 14:26:39
  • JS原生轮播图的简单实现(推荐)

    2024-04-29 14:06:30
  • JS、jQuery中select的用法详解

    2024-04-19 09:57:43
  • 如何用js实现鼠标向上滚动时浮动导航

    2024-04-19 09:55:24
  • SQL Server误区30日谈 第1天 正在运行的事务在服务器故障转移后继续执行

    2024-01-14 22:53:03
  • 对python中的pop函数和append函数详解

    2021-10-09 09:11:32
  • 如何解决python多种版本冲突问题

    2023-12-28 06:41:17
  • asp之家 网络编程 m.aspxhome.com