1、二进制日志是什么?

  mysql 的二进制日志用于记录数据库上做的变更、

2、二进制日志什么时间写到磁盘

  1、总的来说二进制日志会在释放锁之前就写入磁盘、也就是说在commit完成之前;client还没发送commit这个时候mysql并不把binlog写入磁盘、

  别一方面mysql保证在commit完成之前会把二进制日志写入磁盘。

  2、如果表不支持事务、那么二进制日志会在执行语句的一开始就写入磁盘。

  3、对于innodb表在client没有发送commit的时候、所有的执行结果将会被cache住;当commit语句下达到mysql时,mysql会马上写入二进制日志。

  4、由1+2+3可以看出来二进制日志只的顺序就是事务commit的顺序。

3、binlog_cache_size=【缓存大小】

  二进制日志写缓存的大小

4、max_binlog_cache_size=【最大缓存大小】

  如果单个事务的二进制日志的大小大于这个值、那么这个事务就会被回滚。

5、log_bin=【二进制文件的全路径】

  这个参数用于指定二进制日志文件的路径、同时还有另一层意思、如果这个参数没有被设置那么表示不开启二进制日志。

6、max_binlog_sizse=【单个二进制日志文件的最大大小】

  这个参数用于控制单个二进制文件的最大大小、当然你也有可能看到二进制日志会比这个设定要大、是因为一个事务只会记录在一个

  文件中、不会刻意追求文件大小固定而把一个事务分别写入两个文件中去。

7、sql_log_bin=【0 | 1】

  这个参数控制当前session 的SQL语句是否写入二进制日志

8、binlog_checksum=【1 | 0 】

  默认情况下mysql在记录二进制日志时会把事件的长度也写进去、通过分析写入的长度值与真正的长度值是否相等、来确定

  二进制日志是否被正确的写入;然而这种通过事件长度来检验二进制日志是否正确的方法,强度不高;开启这个参数后就可以

  通过检验和来完成检验。

9、master_verify_checksum=【1 | 0 】

  设置在master的reading back阶段是否采用checksum的方案来校验

10、slave_sql_verify_checksum =【1 | 0 】

  默认情况下slave的IO_thread会通过事件长度来校验二进制日志的正确性、slave_sql_verify_checksum 用于控制IO_thread的校验方式

11、binlog_do_db=【数据库名】

  用一个例子做为说明:如binlog_do_db=master 那么只有在你use master 之后的语句才会记录到二进制日志中去;也就是说只有在

  select database(); 返回的是master的情况下才会记录二进制日志。

  注意1:就算是你的SQL语句操作的是别的库、也会被记录的。如:insert into test.t(x) values(1);虽然是操作的test库,但是还是会记录二进制日志

  注意2:不一定你所执行的所有写入特性的SQL都会被记录。如:create database db001;

  

12、binlog_ignore_db

  正好于binlog_do_db的过滤规则相反;

13、replication_do_db

  于binlog_do_db相近,只是它起作用的地方是在mysql群集环境中的slave端

14、replication_ignore_db

  于replication_do_db相反

15、发现一个问题

  show variables like xxx ; 语句并看不到binlog_do_db、binlog_ignore_db、replicate_do_db、replicate_ignore_db这四个参数

16、log_slave_updates=【1 | 0】

  通常来说发生在master 的变更经由replication传播到slave ;进而引起slave的变更、那么问题就来了slave上由replication所引起的变更是不是也要记录

  到它的binlog日志中去呢?如果要记录的话就把log_slave_updates=1

17、sync_binlog=【0、1、2、3、... ...】

  由2可以知道binlog的写入与commit是两个不同的操作、sync_binlog用于向mysql说明是不是每一次commit都把二进制日志写入磁盘。

  1、sync_binlog=0 不对二进制日志刷盘做什么限制、把这个刷盘操作交给linux系统。

  2、sync_binlog=1 每次commit都对应一次刷盘操作。

  3、sync_binlog=【{n | n>=2}】 mysql会累计n个commit操作后才刷一次盘。

18、innodb_support_xa=【1 | 0 】

  还是再说一下二进制日志刷盘(二进制日志从缓存写到磁盘文件);mysql大致上可以分成3个层次

  1、connection 层 这个位于mysql是上层;这个层用于管理client的连接。

  2、sql 层 像词发分析、SQL执行计划的生成和优化都在这一层解决。

  3、store engine层 存储引擎层

  一个commit操作是mysql各个层之间的穿越顺序是connection layer --> sql layer --> strore engine layer ;当sql layer 收到commit的时候就开始

  把二进制日志写入磁盘了(我这里假设sync_binlog=1);之后是stroe engine layer 收到commit 这个commit在store engine layer 也会触发相应的刷

  盘操作(通常来说这个store engine layer 上的实现会是innodb); 下面我们把问题深入一点,假设sql layer上的操作成功了,之后mysql被kill了,也就是说

  stroe engine layer 上的commit没有正确的执行完成;然后再启动mysql这个时候由于之前在store engine layer上的操作并没有被commit所以它会被

  回滚掉、所以这样就造成了binlog中的记录与innodb中的数据不一致的情况;为了使两者是一致的我们要把innodb_support_xa=1

19、binlog_format=【row | statement | mixed 】

  1、二进制日志里面记录的是什么?

      记录的是数据库上的变更、或是可能的变更(如一条update语句影响了0行)

  2、二进制日志可以怎么记录?

      1、一种可能的记法是直接把SQL语句记上去如:udpate user set birthday='xxxx' where id =2048;

      2、别一种可能的记法类似于:把表user里id=2048的那一行的birthday设置为'xxxx';

  3、这两种记录方式进一步认识?

      1、第一种记录方式、slave就相当到是把主库上执行的SQL语句重新执行一遍;想想这种情况一条SQL有非常复杂的逻辑,但是最后只改了一行数据。

      2、第二种记录方式、slave并没有去执行主库上执行的SQL而是直接把结果改成主库的样子。

  4、看起来十分完美、但是事实上并不是这么一回事

    1、在master-->slave的环境下、statement可能会引起主从的不一致问题;如果在库上的时间是1号、而在slave主机上的时间是2号;主库上执行

      了一条插入当前时间的操作、总的来看master & slave 上执行的SQL语句是一样的,但是它们自身的时间不一样使都它们的结果不一样、这样

      就造成了主从的不一致。

    2、在master-->slave环境下、row虽然消除了主从不一致的问题、但是它的使用上有一些要注意的地方、如一定要给表加上主键:由于row是基于

      行的、如果mysql能越快的定位行,那么它执行的就越快;有人会问“我给表上加上相应的索引还不行吗”,我告诉你啊,这还真不行,一定要是主

      键,我见过一个delete 操作引起主从延时1周的。以下是mysql官方文档上的一段

      

    3、那有没有把这两个结合一下的呢?这个还真的有它就是mixed模式。mysql从来没有把这个模式设置为默认模式,我也不知道是出于什么

      考虑

mysql日志文件相关的配置【2】的更多相关文章

  1. mysql日志文件相关的配置【1】

    1.log_output=[file | table | none ] 这个参数指定general_log &slow_query_log 的输出目标.可以是table | file | no ...

  2. MySQL各类日志文件相关变量介绍

    文章转自:http://www.ywnds.com/?p=3721 MySQL各类日志文件相关变量介绍 查询所有日志的变量   1 mysql> show global variables li ...

  3. (3.12)mysql基础深入——mysql日志文件/其他文件(socket/pid/表结构/Innodb)

    (3.12)mysql基础深入——mysql日志文件/其他文件(socket/pid/表结构/Innodb) 关键词:mysql日志文件,mysqldumpslow分析工具 目录:日志文件的分类 1. ...

  4. lnmp vps服务器删除mysql日志文件三种方法

    我在上一篇文章介绍了著名的LNMP主机一键安装工具,对比了军哥lnmp和AMH主机的差别,由于AMH拥有用户后台界面,易于新手操作,值得推荐. 但是,上周末我网站宕机,收到DNSPOD发来了宕机提醒, ...

  5. NGINX按天生成日志文件的简易配置

    NGINX按天生成日志文件的简易配置 0x01 最近后端童鞋遇到一个小需求,拆分nginx生成的log文件,最好是按天生成,看着她还有很多bug待改的状态,我说这个简单啊,我来吧.曾经搞node后端的 ...

  6. Linux下自动清除MySQL日志文件

    MySQL运行过程中会生成大量的日志文件,占用不少空间,修改my.cnf文件配置bin-log过期时间,在Linux下自动清除MySQL日志文件 [mysqld] expire-logs-days= ...

  7. 浅谈MySQL日志文件|手撕MySQL|对线面试官

    关注微信公众号[程序员白泽],进入白泽的知识分享星球 前言 上周五面试了字节的第三面,深感数据库知识的重要,我也意识到在平时的学习中,自己对于数据库的学习较为薄弱.甚至在有过一定实习经验之后,依旧因为 ...

  8. mysql 日志文件mysql-bin文件清除方法,和mysql-bin相关文件的配置

    默认情况下mysql会一直保留mysql-bin文件,这样到一定时候,磁盘可能会被撑满,这时候是否可以删除这些文件呢,是否可以安全删除,是个问题. 首先要说明一下,这些文件都是mysql的日志文件,如 ...

  9. 170512、java日志文件log4j.properties配置详解

    一.Log4j配置 第一步:加入log4j-1.2.8.jar到lib下. 第二步:在CLASSPATH下建立log4j.properties.内容如下: 放在src下的话就不用配置 否则得去web. ...

随机推荐

  1. Altium Designer 6 快速进行差分对走线

    1: 在原理图中让一对网络前缀相同,后缀分别为_N 和_P,并且加上差分队对指示.在原理图中,让一对网络名称的前缀名相同,后缀分别为_N 和_P,左键点击Place DirectivesDiffere ...

  2. Smarty 使用继承方式实现配置

    . 常用配置选项 在使用Smarty模板引擎之前,我们必须先学习如何配置Smarty的选项.而在Smarty的常见选项中,我们首先必须了解4个最基本的目录选项. 模板目录(template):本目录用 ...

  3. 【转】JAVA 读写二进制文件

    原文网址:http://shiminghua234.blog.163.com/blog/static/263912422011619102350866 import java.io.*; /** * ...

  4. java模拟http post

    我们将使用java.net.URLConnection来完成一次post请求,假设要post数据到http://localhost:8080/doSome上: URLConnection urlCon ...

  5. HDU-2059龟兔赛跑(基础方程DP-遍历之前的所有状态)

    Problem Description 据说在很久很久以前,可怜的兔子经历了人生中最大的打击——赛跑输给乌龟后,心中郁闷,发誓要报仇雪恨,于是躲进了杭州下沙某农业园卧薪尝胆潜心修炼,终于练成了绝技,能 ...

  6. angularJS怎么实现与服务端的PHP进行数据交互

    //{params: 要传的参数obj },params这个是关键字不能换别的变量 $http.get(url, {params: {id: categoryid, key: keys} }).suc ...

  7. 開始学习swift开发

    近期要開始学习swift开发了,接下来的日子,会记录学习swift的历程.

  8. Android学习路线(二十七)键值对(SharedPreferences)存储

    假设你又一个相对较小的键值对数据想要保存,你应该使用SharedPreferences APIs.一个SharedPreferences 对象指向一个包括键值对的文件,它提供简单的方法来读写他们.每一 ...

  9. [Falcor] Building Paths Programmatically

    model.setValue('genreList[0].titles[0].rating', 5) .then(function (value) { model.get('genreList[0.. ...

  10. 设计模式14---设计模式之命令模式(Command)(行为型)

    1.场景模拟 请用软件模拟开机过程 按下启动按钮 然后电源供电 主板开始加电自检 BIOS依次寻找其他设备的BIOS并且让他们初始化自检 开始检测CPU,内存,光盘,硬盘,光驱,串口,并口,软驱即插即 ...