3.1 参数文件
- mysql启动时,会先读取一个配置参数文件,用来寻找数据库的各种文件所在位置以及制定某些初始化参数
- 启动时,就算没有找到参数文件,也会以默认值或程序指定参数的默认值。
- mysql架构中记录了访问该实例的权限,找不到这个架构时,则无法成功启动
3.1.1 什么是参数
简单说,就是一个个键值对,eg. innodb_buffer_pool_size = 1G
3.1.2 参数类型
参数主要分为两类,动态参数和静态参数,动态参数意味着可以在mysql实例中进行更改,静态参数则说明在整个实例生命周期中不得更改。
global 和 session关键字表明该参数的修改是基于当前会话还是整个实例的生命周期。
##变量名前有空格
set [global | session] system_var_name = expr
##变量名前无空格
set [@@global. | @@session. | @@]system_var_name = expr
有些只能在会话中修改,如autocommit;
有些参数改完后在整个实例生命周期都会生效,如binlog_cache_size;
有些参数既可在当前,又可以在整个实例中,如read_buffer_size
全局修改也并不会修改参数文件
3.2 日志文件
3.2.1 错误日志
遇到问题应该首先查看该文件,不但记录了出错信息,也记录了一些警告信息或者正确的信息。
3.2.2 慢查询日志
运行时间超过 long_query_time的SQL语句将被记录到慢查询日志文件中,默认值为10(s)
默认情况下,慢查询日志不启动,需要将 log_slow_queries设置为on
- 运行时间 > 阈值会被记录,而非 >=
- Mysql 5.1版本后,long_query_time 以微秒记录时间
log_queries_not_using_indexes设置为on时,如果sql语句没有使用索引,则该语句同样会被记录
mysqldumpslow 命令可以帮助我们分析慢查询日志文件
mysql 5.1后可以将慢查询放入 slow_log表中,log_output参数修改为 table即可,此表是CSV引擎,可以切换为MyISAM用来提高效率,如果已经启动了慢查询需要先将slow_query_log 设置为off
3.2.3 查询日志
5.1版本开始,可以放入general_log表
3.2.4 二进制日志
记录对数据库执行更改的所有操作,但是不包括select和show这类操作。他记录了更改操作的时间和执行时间等信息,作用如下:
- 恢复
- 复制
配置参数 log_bin[=name]来启动二进制文件,如不指定name,默认为主机名。启动后会影响性能,但损失十分有限。
- binglog_cache_disk_use 临时文件使用次数,使用多则证明缓冲设置小了,需要增大binlog_cache_size
- binglog_cache_use 缓冲使用次数
5.1开始,有一个重要的参数binlog_format,影响了二进制日志的格式
(1)STATEMENT格式和之前版本一样,记录的是SQL语句
(2)ROW模式下,不单单记录SQL语句,还会记录表的行更改情况。
(3)MIXED格式下,默认STATEMENT格式,一下五种情况,则为ROW格式
表存储引擎为NDB,这是对于表的DML操作都会以ROW格式记录
2)使用了UUID(), USER(), CURRENT_USER(), FOUND_ROWS()等不确定函数
3)使用了INSERT DELAY语句
4)使用了用户定义函数(UDF)
5)使用了临时表
二进制日志格式支持情况
二进制日志可以使用mysqlbinlog工具查看
3.3 套接字文件
Unix系统本地连接MySQL可以用Unix域套接字方式,这种方式需要一个套接字文件
3.4 pid文件
MySQL实例启东市会将自己的进程ID写入一个文件中,即pid文件
3.5 表结构定义文件
.frm文件,存储表结构定义,或者视图定义
3.6 InnoDB存储引擎文件
这节中是存储引擎自身的文件
3.6.1 表空间文件
可用innodb_data_file_path设置文件位置,也可用多个文件组成表空间,不同磁盘上的两个文件还可以提升性能。设置innodb_data_file_path后,基于InnoDB殷勤的表的数据都会记录下来。
设置innodb_file_per_table则会将表分文件存放

3.6.2 重做日志文件
默认会有 ib_logfile0 和 ib_logfile1两个文件,它们记录了对于InnoDB存储引擎的事务日志。
主要目的是保证数据的完整性
每个引擎至少一个重做日志文件组,一个组至少两个文件

- 重做日志文件设置过大,在恢复时可能需要很长的时间
- 太小了可能导致一个事务的日志需要多次切换重做日志文件
重做日志与二进制日志区别:
- 二进制日志记录的是所有与mysql有关的,可能多个引擎;重做日志只记录InnoDB的
- 二进制文件不管格式如何,都是记录的关于一个事务的具体操作内容;重做日志记录的是关于每个页的更改的物理情况
-
写入时间也不同,二进制文件是在事务提交前进行记录的,而在事务精选的过程中,不断有重做日志条目被写入重做日志文件中。
重做日志结构 & 写入过程
重做日志缓冲写入磁盘时间
1、主线程每秒会将重做日志缓冲写入文件
2、innodb_flush_log_at_trx_commit参数控制事务提交时处理重做日志的方式
- 为0时,提交事务时不做操,等待主线程每秒的刷新
- 为1时,在提交时将缓存同步写到磁盘,
- 为2时,异步写入磁盘,不能完全保证提交时肯定会写入,只是有这个动作。
欢迎关注个人微信公众号

网友评论