概述
mysql数据库和innodb存储引擎的文件主要包括参数文件、日志文件、socket文件、pid文件、Mysql表结构文件、存储引擎文件
参数文件
常用命令
mysql --help |grep my.cnf; //参数文件的位置以及加载优先级
show variables; //查看所有参数,like关键字进行过滤。比如like 'innodb%'
show variables like 'innodb%'\G;
select @@global.read_buffer_size; //查看变量的值(全局,session是当前会话)
set @@global.read_buffer_size= 131072;//修改变量的值(全局)
set @@session.read_buffer_size=12288;
select @@session.read_buffer_size;
show master status;
日志文件
- 查看错误日志文件位置
show variables like 'log_error';
- 当前是否开启慢查询日志记录
show variables like slow_query_log
- 当前慢查询定义时间
show variables like long_query_time
- 当前是否对未使用索引的查询记录日志
show variables like log_queries_not_using_indexes
- log_output参数是慢查询日志的输出格式
show variables like 'log_output'
默认未File。 - 可以用mysqldumpslow 来处理slow日志文件
- 查询日志文件
general_log
二进制日志文件
主要用于复制和恢复
log_bin[=name] 开启二进制日志。
- max_binlog_size 二进制日志最大大小,默认1G左右
- binlog_cache_size :所有未提交的事务操作会被放到该缓冲中,当事务提交时会把该缓冲中的内容刷新到二进制日志文件。
- binlog_cache_size大小设置合理度判断:
show global status like 'binlog%';
Binlog_cache_disk_use:是一个事务太大导致缓存放到磁盘临时文件中,这个值为零最佳。Binlog_cache_use:使用缓冲次数 - sync_binlog=[N],每写多少次缓冲就同步到磁盘二进制日志文件
- sync_binlog=1的问题,当事务commit之前,优于sync_binlog设为1,因此会将二进制日志立即写入磁盘。如果此时已经写入了磁盘,但是还没有commit,并且发生了宕机,mysql数据在重启之后会回滚事务(redo log),但是二进制日志却不会回滚。这个问题可以通过设置
innodb_support_xa = on来解决(此参数保证了二进制日志文件与innodb数据文件的同步)
- binlog-do-db和binlog-ignore-db
- log_slave_updates 如果当前数据库是slave,则默认不会把从master取得并执行的二进制日志写到自己的二进制日志中,可以通过log_slave_updates开启(用于 master slave slave形式的架构)
-
binlog_format 参数
:二进制日志文件的格式主要有STATEMENT(记录的是逻辑SQL语句,可能造成主从数据库数据不一致)、ROW(记录的是表的行的更改情况,解决了主从数据不一致问题,同时可以将数据库的隔离级别改为Read Commit,以获得更好的并发性。)
、MIXED(不能使用STATEMENT时才使用ROW格式(如SQL中包含RAND()等不确定函数) - STATEMET与ROW两种格式占用的二进制日志文件空间区别还挺大,所以需要注意(一般情况建议使用MIXED或者STATEMENT)
- mysqlbinlog 查看二进制日志文件
./bin/mysqlbinlog -vv --start-position=877 data/binlog.000012
套接字文件
show variables like 'socket'
;
pid文件
show variables like 'pid_file';
表结构定义文件
*.frm
InnoDB引擎文件
- 表空间文件
共享表空间:默认名为ibdata1,可以通过innodb_data_file_path设置路劲以及初始大小(可以自动增长)
独立表空间:innodb_file_per_table开启之后每个表对应一个表空间(表名.ibd)。 - 重做日志文件
默认名为ib_logfile0和ib_logfile1,用来记录innodb存储引擎的事务日志。InnoDB可以利用重做日志恢复,以保证数据完整性。
innodb_log_file_size
innodb_log_files_in_group
innodb_log_group_home_dir - 重做日志与二进制日志的区别
二进制日志记录了所有与mysql数据库有关的日志,不仅包括innodb引擎;而innodb的重做日志只记录innodb引擎的事务日志。
二进制日志是逻辑日志;InnoDB引擎记录的是每个页的物理更改情况。
二进制日志只在事务提交之前刷盘;重做日志每秒都会刷盘 - 重做日志写磁盘不需要doubleWrite;从重做日志缓冲写磁盘是按照扇区(512字节,原子操作)为单位写的,所以写入是一定成功的。
- 重做日志是幂等的,但是二进制日志不是(即使为row格式存储)。
-
innodb_flush_log_at_trx_commit
(事务提交时,处理重做日志的方式,1为最佳)。0:不将事务的重做日志写入磁盘的日志文件,等待主线程的刷新。1:执行commit时,将重做日志缓冲同步到磁盘。2:将重做日志异步写到磁盘-写到文件系统的缓冲中。
网友评论