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对很多行数据的简单更新不友好。
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。
推荐阅读
- 热闹中的孤独
- JS中的各种宽高度定义及其应用
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- Android中的AES加密-下
- 放下心中的偶像包袱吧
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- django-前后端交互