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;

【MySQL中的文件】或者
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。

    推荐阅读