一、Mysql相关文件
参数文件:告诉mysql实例启动时在哪里可以找到数据库文件,并指定初始化参数
日志文件:用来记录MySQL实例对某种条件做出响应时写入的文件,如错误日志文件、二进制日志文件、慢查询日志文件、查询日志文件等。
socket文件:当用unix域套接字方式进行连接时需要的文件
pid文件:MySQL实例的进程pid文件
mysql表结构文件:用来存储mysql表结构定义的文件
存储引擎文件:真正存储记录和索引等数据
参数文件:通常分为静态参数和动态参数
其中静态参数类似于只读,不可修改
动态参数可以进行修改,同时修改之后,会生效。
日志文件分为:
错误日志文件 error log
慢查询日志文件 slow log
二进制日志文件 binlog
查询日志文件 log
二、错误日志文件error log
错误日志文件对mysql的启动、运行、关闭过程进行了记录,DBA进行文件排查时首先查询该文件以定位问题。
可以通过show variables like "log_error"来定位文件。
三、慢查询日志
可帮助DBA定位可能存在问题的sql语句
通常可以在mysql启动时设置一个阀值,将运行时间超过该值的所有sql语句都记录在慢查询日志文件中。参数:log_query_time,默认值为10秒。从mysql5.1开始,log_query_time开始以微秒记录sql运行的时间。
在默认情况下,mysql数据库并不启动慢查询日志,用户需要手工将这个参数设置为on。
MySQL5.6.5版本开始,log_throttle_queries_not_using_indexes用来记录慢sql未使用sql的次数,如果没有这个值,慢sql打印的日志文件不断增大,因此为了避免此种情况,DBA可通过此参数进行设置。
mysqldumpslow日志文件
查询执行时间最长的10条sql语句:
mysqldumpslow -s al -n 10 日志文件.log
slow_log表的定义使用的是csv引擎,对大数据量下的查询效率不高。
slow_query_type:
0表示不将sql打印到slow_log
1表示根据运行时间将sql记录到slow_log
2表示根据逻辑I/O次数将sql记录到slow_log
3表示根据运行时间+逻辑IO次数将sql记录到slow_log
四、查询日志
主机名.log,从mysql5.1开始,可以将查询日志的记录放入mysql架构下的general_log表中。
五、binglog二进制日志文件
记录了对mysql数据库执行更改的所有操作,但不包括select和show这类操作。
二进制文件的作用:
恢复:比如全备文件恢复后,用户可以通过二进制文件进行point-in-time的恢复。
复制:通过复制和执行二进制日志文件使一台远程的mysql数据库与一台mysql数据库进行实时同步。
审计
通过配置参数:log-bin [=name] 可以启动二进制日志,如果不指定则默认二进制日志文件名为主机名,后缀为二进制日志的序列号。比如:bin_log.00001、
bin_log.index为索引文件
binlog在配置文件中的参数:
max_binlog_size 最大binlog大小,默认1.1G,超过该值会产生新的binlog文件,后缀+1
binlog_cache_size,基于会话,默认大小32KB
sync_binlog =[N]表示每写缓冲多少次就同步到磁盘,默认值为0,如果使用innodb存储引擎进行复制,并且想得到最大的高可用性,建议,将该值设置为on。配合XA使用。
binlog-do-db
binlog-ignore
log-slave-update
binlog_format:记录二进制日志的格式
分为三种:
statement、row、mixed
statement:采用逻辑sql语句记录
row:记录表更改的数据
mixed:默认情况下使用statement进行记录,但在一些情况下会使用row格式:
1)表引擎为NDB,对表中的DML都会以ROW记录
2)使用UUID()、USER()、CURRENT_USER()、FOUND_ROES()、ROW_COUNT()邓不确定函数
3)使用insert delay语句
4)使用了用户定义的函数(UDF)
5)使用了临时表
设置方式,比如设置为row格式:
set @@session.binlog_format='ROW';
查看binlog设置格式:
select @@session.binlog_format;
设置全局的binlog格式:
set GLOBAL binlog_format='ROW';
六、套接字文件
可由参数socket控制,一般在/tmp目录下,名为mysql.sock。
七、pid文件
当mysql实例启动时,会将自己的进程id写入到pid文件,该文件可由参数pid_file控制,默认在数据库目录下,名为主机名.pid。
八、表结构定义文件
.frm文件,每个表都会有与之对应的frm文件,这个文件记录了该表的表结构定义。
frm文件还用来存放视图定义,如用户创建了一个v_a视图,那么对应地会产生一个v_a.frm文件,用来记录视图定义,该文件是文本文件,以v_a.frm为例,可以通过cat v_a.frm命令查看v_a.frm。
所有未提交的二进制日志会被记录到一个缓冲中去,等该事务提交时直接将缓冲中的二进制日志写入到二进制文件,而该缓存的大小由bin_log_cache_siz决定,默认32KB。
九、innodb的引擎文件
表空间文件和重做日志文件
表空间文件
innodb采用将存储的数据按表空间tablespace进行存放的设计,在默认设置下会有一个初始化大小为10MB,名为ibdata1的文件,该文件就是默认的表空间文件tablespace file,用户可以通过参数innodb_data_file_path对其进行设置,格式:
innodb_data_file_path=datafile_space1[;datafile_spec2]…
设置innodb_data_file_path参数后,所有基于innodb存储引擎的表的数据都会记录到该共享表空间中。若设置了参数innodb_file_per_table,用户可以将每个基于innodb存储引擎的表产生一个独立表空间,后缀名格式.ibd。
单点的表空间文件仅存储该表的数据、索引和插入缓冲bitmap等信息,其余信息还是存放在默认表空间中。
重做日志文件redo log file
每个innodb存储引擎至少有一个重做日志文件组,每个文件组下至少有2个重做日志文件,如默认的ib_log_file0、ib_log_file1。
参数影响:
innodb_log_file_size 重做日志大小,1.2.x版本将该限制扩大为512G
innodb_log_file_in_group 重做日志个数,默认2个。
innodb_mirrored_log_groups 镜像组数,默认1,表示只有一个日志文件组,没有镜像,如果磁盘本身做了高可用,则可以不开启重做日志镜像功能。
innodb_log_group_home_dir 目录,默认./。
如果重做日志设置太小,则频繁发生Asyncheckpoint,导致性能抖动。
如果重做日志超过检查点的阀值,则必须将缓冲池中的脏页列表中的部分脏数据页写回磁盘,这时会导致用户线程阻塞。
重做日志条目的组成:
重做日志类型、空间ID、页的偏移量、每个重做日志的数据部分
redo_log_type:占用1字节,表示重做日志的类型
space 表示表空间的ID,但用压缩的方式,因此占用的空间可能小于4字节
page_no:表示页的偏移量,同样采用压缩的方式
redo_log_body:表示每个重做日志的数据部分,恢复时需要调用相应的函数进行解析。
重做日志先写入到 redo log buffer,然后按照一定的条件顺序写入日志文件。512个字节(扇区),写入的最小单位。
触发写磁盘的过程是由参数innodb_flush_log_at_trx_commit控制,表示在提交时,处理重做日志的方式。
0:当提交事务时,并不将事务的重做日志写入磁盘上的日志文件
1:表示执行commit时将重做日志缓冲同步写到磁盘
2:表示将重做日志异步写入到磁盘