《Mysql入门MySQL中二进制与重做日志文件的基本概念学习教程》要点:
本文介绍了Mysql入门MySQL中二进制与重做日志文件的基本概念学习教程,希望对您有用。如果有疑问,可以联系我们。
MYSQL教程二进制日志
二进制日志记录了所有对数据库执行更改的操作,二进制主要有以下两种作用:
MYSQL教程1、恢复(recovery)2、复制(replication)
MYSQL教程二进制日志的启动:配置参数log-bin[=name],如果不指定name,则默认二进制日志文件名为主机名,后缀名为二级制日志的序列号,所在路径为数据库所在目录.
MYSQL教程以index为后缀的文件为二进制日志的索引文件,用来存储过往生产的二进制日志.
MYSQL教程和二进制日志相关的参数:
MYSQL教程max_binlog_size、binlog_cache_size、sync_binlog、binlog-do-db、binlog-ignore-db、log-slave-update、binlog_format
MYSQL教程max_binlog_size,该参数指定了单个二进制日志文件的最大值,如果超过该值,则产生新的二进制日志文件,后缀名+1,并记录到.index文件,从Mysql5.0开始的默认值为1073741824,代表1G.
MYSQL教程Mysql5.5的默认值
MYSQL教程
MYSQL教程当使用事务的存储引擎InnoDB时,所有未提交的事务会记录到一个缓存中,等待事务提交时,直接将缓冲中的二进制日志写入二进制日志文件,而该缓冲的大小由binlog_cache_size决定,默认大小为32KB,此外,binlog_cache_size是基于回话的,也就是,当一个线程开始一个事务时,mysql会自动分配一个大小为binlog_cache_size的缓存,因此该值得设置需要相当小心,可以通过show global status 查看binlog_cache_use、binlog_cache_disk_use的状态,可以判断当前binlog_cache_size的设置是否合适.
MYSQL教程Binlog_cache_size的默认大小为32KB
MYSQL教程
MYSQL教程参数sync_binlog=[N]表示每写缓存多少次就同步到磁盘,如果将N设置为1,则表示采用同步写磁盘的方式来写二进制日志,该参数很重要,这个以后还会提到.值得注意的是,在将该参数设置为1时,也应该将innodb_support_xa设为1来解决,这可以确保二进制日志和InnoDB存储引擎数据文件的同步.
MYSQL教程参数binlog-do-db和binlog-ignore-db表示需要写入或者忽略写入哪些库的日志,默认值为空,则表示将所有库的日志同步到二进制日志.
MYSQL教程Log-slave-update该参数在搭建master=>slave=>slave的架构时,需要配置.
MYSQL教程Binlog_format参数也特别重要.从mysql5.1版本开始引入这个参数,该参数可以设置的值有STATEMENT\、ROW、MIXED;
MYSQL教程(1)STATEMENT格式和之前的mysql版本一样,二进制日志文件记录的是日志的逻辑失SQL语句.
MYSQL教程(2)在ROW格式下,二进制日志记录的不再是简单的SQL语句了,而是记录表的行更改情况,此时可以将InnoDB的事务隔离基本设为READ COMMITTED,以获得更好的并发性.
MYSQL教程(3)MIXED格式下,mysql默认采用的STATEMENT格式进行二进制日志文件的记录,但是在一些情况下会使用ROW格式,可能的情况包括:
MYSQL教程1)表的存储引擎为NDB,这时对于表的DML操作都会以ROW格式记录
MYSQL教程2)使用了UUID()、USER()、CURRENT_USER()、FOUND_ROWS()、ROW_COUNT()等不确定函数
MYSQL教程3)使用了INSERT DELAY语句
MYSQL教程4)使用了用户定义函数
MYSQL教程5)使用了临时表
MYSQL教程重做日志
Mysql默认情况下会有两个文件:ib_logfile0和ib_logfile1,这两个文件就是重做日志文件,或者事务日志.
MYSQL教程重做日志的目的:万一实例或者介质失败,重做日志文件就能派上用场.
MYSQL教程每个InnoDB存储引擎至少有一个重做日志文件组,每个文件组下至少有2个重做日志文件,如默认的ib_logfile0、ib_logfile1.InnoDB存储引擎先写重做日志文件1,当达到文件的最后时,会切换至重做日志文件2,当重做日志文件2也被写满时,会再被切换到重做日志文件1中.
MYSQL教程影响重做日志的参数:
MYSQL教程Innodb_log_file_size、innodb_log_files_in_group、innodb_log_group_home_dir影响着重做日志文件的属性.
MYSQL教程
MYSQL教程重做日志与二进制日志的区别:
MYSQL教程1)二进制日志会记录所有与mysql有关的日志记录,包括InnoDB等其他存储引擎的日志,而InnoDB存储引擎的重做日志只记录有关其本身的事务日志,
MYSQL教程2)记录的内容不容,不管你将二进制日志文件记录的格式设为哪一种,其记录的都是关于一个事务的具体操作内容,而InnoDB存储引擎的重做日志文件记录的关于每个页的更改的物理情况;
MYSQL教程3)写入的时间也不同,二进制日志文件是在事务提交前进行记录的,而在事务进行的过程中,不断有重做日志条目被写入重做日志文件中.
MYSQL教程从日志缓冲写入磁盘上的重做日志文件的条件:
MYSQL教程在主线程中每秒会将重做日志缓冲写入磁盘的重做日志文件中,不论事务是否提交.另一个触发这个过程是由参数innodb_flush_log_at_trx_commit控制,表示在提交时,处理重做日志的方式.
MYSQL教程参数innodb_flush_log_at_trx_commit可设的值有0、1、2,0代表当提交事务时,并不将事务的重做日志写入磁盘上的日志文件,而是等待主线程每秒的刷新,而1和2不同的地方在于:1是在commit时将重做日志缓冲同步写到磁盘;2是重做日志异步写到磁盘,即不能完全保证commit时肯定会写入重做日志文件,只是有这个动作.
MYSQL教程 值得注意的一点:因为重做日志有个capacity变量,该值代表了最后的检查点不能超过这个阀值.
转载请注明本页网址:
http://www.vephp.com/jiaocheng/1024.html