服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - mysql binlog二进制日志详解

mysql binlog二进制日志详解

2019-11-26 19:56MYSQL教程网 Mysql

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

基本概念 
定义: 
二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个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并且硬盘/文件系统的确能根据需要进行同步(有些不需要)则不会发生,则输出错误消息 (“二进制日志<名>比期望的要小”)。 
在这种情况下,二进制日志不准确,复制应从主服务器的数据快照开始。

延伸 · 阅读

精彩推荐
  • MysqlMySQL锁的知识点总结

    MySQL锁的知识点总结

    在本篇文章里小编给大家整理了关于MySQL锁的知识点总结以及实例内容,需要的朋友们学习下。...

    别人放弃我坚持吖4362020-12-14
  • Mysql浅谈mysql 树形结构表设计与优化

    浅谈mysql 树形结构表设计与优化

    在诸多的管理类,办公类等系统中,树形结构展示随处可见,本文主要介绍了mysql 树形结构表设计与优化,具有一定的参考价值,感兴趣的小伙伴们可以参...

    小码农叔叔5242021-11-16
  • MysqlMySQL 数据备份与还原的示例代码

    MySQL 数据备份与还原的示例代码

    这篇文章主要介绍了MySQL 数据备份与还原的相关知识,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    逆心2972019-06-23
  • MysqlMySQL数据库varchar的限制规则说明

    MySQL数据库varchar的限制规则说明

    本文我们主要介绍了MySQL数据库中varchar的限制规则,并以一个实际的例子对限制规则进行了说明,希望能够对您有所帮助。 ...

    mysql技术网4192019-11-23
  • Mysql解决MySQl查询不区分大小写的方法讲解

    解决MySQl查询不区分大小写的方法讲解

    今天小编就为大家分享一篇关于解决MySQl查询不区分大小写的方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起...

    Veir_dev5592019-06-25
  • Mysqlmysql 不能插入中文问题

    mysql 不能插入中文问题

    当向mysql5.5插入中文时,会出现类似错误 ERROR 1366 (HY000): Incorrect string value: '\xD6\xD0\xCE\xC4' for column ...

    MYSQL教程网5722019-11-25
  • MysqlERROR: Error in Log_event::read_log_event()

    ERROR: Error in Log_event::read_log_event()

    ERROR: Error in Log_event::read_log_event(): read error, data_len: 438, event_type: 2 ...

    MYSQL教程网6412020-03-13
  • Mysql详解MySQL中的分组查询与连接查询语句

    详解MySQL中的分组查询与连接查询语句

    这篇文章主要介绍了MySQL中的分组查询与连接查询语句,同时还介绍了一些统计函数的用法,需要的朋友可以参考下 ...

    GALAXY_ZMY5442020-06-03