mysql-innodb存储引擎读书笔记(二)

mysql实例的启动过程中对innodb表存储引擎的处理过程
参数Innodb_fast_shutdown影响着表的存储引擎innodb的行为可取值0、1、2
0表示当关闭mysql时,innodb需要完成所有的full purge和merge insert buffer
1表示不需要完成full purge和merge insert buffer但是在缓冲池中的一些脏数据还是会刷新到磁盘(默认)
2表示不完成full purge和merge insert buffe,也不将缓冲池的数据脏页写到磁盘,而是将日志写入日志文件,在下次启动时会对innodb的表执行恢复操作


没有正常关闭数据库(kill数据库);mysql运行过程中重启了服务器;关闭数据库时将参数innodb_fast_down=2;这些在下次mysql启动时都会对表执行恢复操作,但是不能进行恢复时(如数据页发生了corruption),mysql数据库可能会宕机并把错误写入错误日志中。


innodb_force_recovery参数可以影响innodb的恢复状况,默认值为0
0:表示当需要恢复时执行所有的恢复操作
1:忽略检查到的corrupt页
2:阻止主线程的运行,如主线程需要执行full purge操作,会导致crash
3:不执行事务回滚操作
4:不执行插入缓冲的合并操作
5:不查看撤销日志(undo log),innodb会将未提交的事务视为已提交
6:不执行前滚的操作
注意:当该参数设置大于0后,可以对表进行select、create、drop操作,但不允许insert、update、delete操作


通过show variables like 'innodb_version'\G 可以查看当前innodb的版本


mysql下的各种类型的文件
参数文件:启动mysql实例时寻找数据文件且指定某些初始化参数(某种内存结构大小的设置等)
日志文件:记录mysql对某种条件做出响应时写入的文件(如:错误日志文件、二进制日志文件、慢查询日志文件、查询日志文件)
socket文件:用unix域套接字方式进行连接时需要的文件
pid文件:mysql实例的进程ID文件
mysql表结构文件:用来存放mysql表结构定义文件
存储引擎文件:用特定的文件来保存数据和索引等


参数文件
当mysql实例启动时,mysql会去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数
查看读取配置文件次序 mysql --help|grep mysql.cnf
数据库参数可以看成一个key/value对
可以通过show variables 或通过like来过滤参数名查看所有参数(information_schema下global_variables)
参数文件中参数类型分类:动态参数(dynamic)、静态参数(static)
动态参数:表示可以在mysql实例运行中进行更改
静态参数:说明在整个实例生命周期内都不能进行更改(类似自渎read only)
通过set命令对动态参数值进行修改
set  [global | session] 参数名=值
说明:session是基于当前会话的;global是基于整个实例的生命周期


日志文件
常见日志文件:错误日志、二进制日志、慢查询日志、查询日志


错误日志
错误日志记录了mysql的启动、运行、关闭过程进行了记录
慢查询日志
设置一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询日志文件中,该阈值可以通过slow_query_time参数来设置,参数log_slow_queries可以设置是否开启慢查询日志
参数log_queries_not_using_indexes开启后可以将没有使用索引的语句记录到慢查询日志中
注意:等于该阈值的不会记录到慢查询日志中,只能是大于
查询日志
记录所有对mysql数据库的请求的信息,不论这些请求是否得到了正确的执行
二进制日志
记录对数据库执行更改的所有操作,并包括数据库更改操作的时间和执行时间等信息
二进制日志作用:
恢复;数据的恢复需要用到二进制日志
复制:通过复制和执行二进制日志使得一台远程的mysql数据库与一台mysql数据库进行实时同步
可以通过log-bin=name参数启动二进制日志
影响二进制日志的配置文件参数
max_binlog_size:单个二进制文件的最大值,超过该值,则产生新的二进制日志文件


binlog_cache_size:使用innodb存储引擎时,所有未提交的二进制日志会记录到该缓存,等待事务提交时直接将缓冲中的二进制日志写入二进制日志文件(基于会话(session),默认大小为32KB)
注:当事务的记录大于binlog_cache_size时,mysql会把缓存中的日志写入一个临时文件
通过show global status like 'binlog_cache%';和show variables like 'binlog_cache_size';可以查看binlog_cache的信息
图片: https://images-cdn.shimo.im/5oNXl6np7K0HW31x/image.png!thumbnail说明:使用缓冲33553次,临时文件使用次数0.表示当前设置的binlog_cache_size够用


sync_binlog=N:二进制日志为缓冲写,N表示每写缓冲多少次就同步到磁盘,为1表示同步写到磁盘的方式,默认为ON,但是ON为给IO带来影响


binlog-do-db:写入那些库的日志,默认为空


binlog-ingore-db:忽略那些库的日志,默认为空


log-slave-update:将从主库取得的二进制日志写入自己的二进制文件中


binlog_format(动态参数):二进制日志的记录格式,可设置为statement、row、mixed
statement:日志记录为逻辑SQL语句
row:记录表的行更改情况(同时设置为RC,可以获得更好的并发),会带来二进制文件的增加
mixed:混合使用statement和row
(1)使用row的情况下为:存储引擎为NDB;
(2)使用了UUID,USER,CURRENT_USER,FOUND_ROWS,ROW_COUNT,等不确定的函数
(3)使用了insert delay语句
(4)使用了用户定义函数
(5)使用了临时表
二进制文件查看工具mysqlbinlog(row格式下查看需要加参数-v)


套接字文件
本地连接mysql可以采用unix域套接字方式(套接字文件一般在/tmp下)



pid文件
pid文件:mysql启动时会将进程ID写入该文件,默认路径为数据库目录下,主机名.pid


表结构定义文件(文本文件)
表结构定义文件:以frm为后缀名的文件(存放表结构),同时还会存放视图定义


innodb存储引擎文件
innodb存储文件包括:重做日志文件、表空间文件
表空间文件:将存储的数据按表空间进行存放(默认为ibdata1文件)
可以通过innodb_data_file_path参数对其设置,也可用多个文件组成一个表空间
通过innodb_file_per_table参数可以将每个基于innodb的表单独产生一个表空间(文件名为 表明.ibd)
注意:单独表空间仅存储该表的数据、索引、插入缓冲等信息,其余存储在默认的表空间中
innodb文件存储方式:
图片: https://images-cdn.shimo.im/whxnQZ1PgbUtEaG2/image.png!thumbnail
重做日志文件
默认情况下为两个:ib_logfile0和ib_logfile1,记录了对于innodb存储引擎的事务日志
至少有一个重做日志组,为了高可靠性可以设置多个镜像日志组
影响重做日志文件的参数
innodb_log_file_size:重做日志文件大小
innodb_log_files_in_group:日志文件组中重做日志文件的数量,默认为2
innodb_mirrored_log_groups:日志镜像文件组的数量,默认为1

innodb_log_group_home_dir:日志文件组所在路径


译者介绍:家华,从事mysqlDBA的工作,记录自己对mysql的一些总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值