MySQL中的文件

参数文件

读取位置

mysql --help 

可以搜索到

Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf
The following groups are read: mysql client

Mysql实例可以不需要参数文件,此时所有的参数取决于编译默认值和源码默认值。

查看运行时参数

show variables;

或者

use performance_schema;
select * from GLOBAL_VARIABLES;

推荐使用第一种方法,兼容性高。

参数类型

从可修改性上:分为动态参数和静态参数
从作用范围:可分为实例型和会话型。
语法:

set [global | session] sysyem_var_name=expr 

或者

set [@@global. | @@session. | @@] sysyem_var_name=expr 

日志文件

文件位置

show variables like 'log_error'

默认情况下,文件名为%hostname%.err。

慢查询日志

启用慢查询日志

show variables like 'slow_query_log'
set global slow_query_log=ON;

调整慢查询参数

  • slow_query_log_file 日志存储位置
  • long_query_time 慢查询阈值
  • log_queries_not_using_indexes 未走索引的查询也记录
  • log_output 日志记录形式,可选:FILE或TABLE
  • log_throttle_queries_not_using_indexes 未走索引的查询每分钟记录上限
  • long_query_io 超过指定逻辑读取数的查询被记录
  • slow_query_type 启用形式,0不启用,1运行时间,2逻辑读取,3运行时间+逻辑读取

分析慢查询日志

mysqldumpslow --help

查询日志

show variables like '%general_log%';

二进制文件

作用

  • 记录所有写操作
  • 恢复,point-in-time
  • 主从复制
  • 审计SQLi攻击

建议启用

show variables like 'log_bin';

参数调整

  • log-bin=name: binlog日志名,路径为datadir,默认不启用,建议开启
  • max_binlog_size: 单个binlog的最大值,默认1G
  • binlog_cache_size: 未提交的事务会被写入该内存缓存,默认32K,基于session,过大会写入临时文件,可以使用binlog_cache_use和binlog_cache_disk_use状态调优
  • sync_binlog: 每写多少次binlog则fsync到磁盘
  • binlog_do_db、binlog_ignore_db: 需要写入或忽略写入的库,默认为空
  • log_slave_update: 当数据库为slave,则默认不会写同步过来的binlog内容,使用此选项可开启,从而搭建master=>slave=>slave架构
  • binlog_format: 可选语句同步STATEMENT、行状态ROW、MIXED,STATEMENT对于uuid()之类的函数和READ COMMITTED隔离级别不友好,ROW对很多行数据的简单更新不友好。

表定义文件

FRM文件,服务器级,存储引擎无关,保存表和视图的定义。

InnoDB存储引擎文件

表空间文件

通过参数innodb_data_file_path:datafile_spec1[:2000M][;datafile_spec2][:autoextend]可设置表空间文件的位置和大小以及自动扩展。若多个文件位于不同的磁盘上,则可提高数据库性能。
通过参数innodb_file_per_table=ON则会为每一张innodb的表产生一个独立的表空间。但是这些独立的表空间中只会存储该表的数据、索引和插入缓冲BITMAP等信息,其余信息仍存放在默认表空间中。

重做日志文件

每个innodb引擎至少有一个重做日志文件组,每个文件组下至少有2个重做日志文件,为了得到更高的可靠性,可以设置多个的镜像日志组,将不同的文件组放在不同的磁盘上,以提高可用性。在日志组中每个重做日志文件大小一致,并以xun

二进制文件与重做日志文件区别

所属:二进制文件属于服务器层;而重做日志文件属于innodb存储引擎层
内容:二进制文件记录事务的逻辑日志,基于表和行的概念;而重做日志文件记录物理存储,基于页的概念
时间点:二进制文件仅在事务提交前写入,写入的是整个事务;重做日志文件在事务进行时不断写入,写入的是事务的具体操作内容。

重做日志写入过程

写入重做日志文件的操作不是直接写,而是先写入一个重做日志缓冲中,然后按照一定的条件顺序地写入日志文件。从重做日志缓冲写入磁盘中时,是按扇区大小写入的,因此可以保证写入必定是成功的,故不需要双写。重做日志缓冲会在主线程中每秒写入一次,另外可以通过innodb_flush_log_at_trx_commit控制commit时的写入行为。

参数设置

innodb_log_file_size: 每个重做日志文件大小,太大在恢复时需要较长时间,太小会频繁切换重做日志文件,导致性能抖动。
innodb_log_files_in_group: 日志文件组中重做日志文件的数量,默认为2。
innodb_mirrored_log_groups: 日志镜像文件组的数量,默认为1。
innodb_log_home_dir: 日志文件组所在路径。
innodb_flush_log_at_trx_commit: commit时重做日志缓冲到重做日志文件的的写入行为。0只依靠主线程刷新,1commit时写入,并fsync,2commit时写入,不fsync。

你可能感兴趣的:(MySQL中的文件)