MySQL数据库和InnoDB存储引擎表的各种类型文件包括参数文件、日志文件、socket文件、pid文件、MySQL表结文件。
- 参数文件:告诉MYSQL实例启动时在哪里找到数据库文件,并且制定某些初始化参数。
- 日志文件:用来记录MYSQL实例对某种条件作出响应时写入的文件。
- socket文件:当用UNIX域套接字方式进行连接时需要的文件。
- pid文件:MYSQL实例的进程ID文件
- MySQL表结构文件:用来存放MYSQL表结构定义文件。
- 存储引擎文件:因为MySQL表存储引擎关系,每个存储引擎都会有自己的文件来保存各种数据。
参数文件
参数文件中存放着各种参数,例如innodb_buffer_pool_size参数。参数文件可以在my.cnf中修改,
- 查找参数文件命令: mysql --help | grep my.cnf
- 查找参数值命令:
-
VARIABLE_NAME LIKE 'innodb_buffer%'\G; # 推荐使用 SHOW VARIABLES LIKE 'innodb_buffer%'\G;
参数分动态参数和静态参数:动态参数可以在MYSQL实例运行进行更改,静态参数则是不可更改的。更改动态参数的语法如下:global:全局的,session:当前会话。两者决定了动态参数的生命周期。
SET
| [global | session] system_var_name=expr
| [@@global. | @@session. | @@] system_var_name = expr
例如:我将read_buffer_size设置为524288,但是是session范围,如果有其他Mysql用户登录,使用该值会仍然是131072。
其他demo:
# 改变当前会话,不会改变全局
SET read_buffer_size = 524288
# 改变全局会话参数,不会改变当前
SET @@global.read_buffer_size = 1048576;
# 查询当前会话参数
SELECT @@session.read_buffer_size\G;
# 查询全局会话参数
SELECT @@global.read_buffer_size\G;
日志文件
错误日志: 记录了所有的错误信息、警告信息。查找错误日志文件位置 SHOW VARIABLES LIKE ‘log_error’\G;
由于我的/etc/my.cnf下配置了Log_error = /var/log/mysqld.log
慢查询日志:慢查询能为SQL语句的优化带来很大的帮助。
默认情况下,MySQL数据库不支持慢查询日志:
在/etc/my.cnf,我的是这个配置文件,你可以用mysql --help | grep my.cnf查看:进行对慢查询配置,我的mysql版本是5.7,重启mysql。
但是很神奇,重启后,进行查询:你会发现好像配置文件并没有起作用
书中有这么一句话,需要手工将这个参数设置为ON。于是乎,用上面的参数设置方法进行设置,提示我/etc/my.cnf的mysql-slow.log没找到,这个目录因人而异,我是存放在此处。我在/logs目录下,新建了一个mysql-slow.log,重新手工设置。
然后可以用了:
得出的结论:有些参数通过更改Mysql的配置文件my.cnf如果重启后不生效,可以尝试用手工设置方法,手工设置是用SET指令进行设置哦。
查询日志: 记录了所有对MYSQL数据库请求的信息,名字一般为主机名.log。
二进制日志(binary log):记录了对MYSQL数据库执行更改的所有操作。只要操作使得数据库发生变化,就会写入二进制日志。但操作若果未导致数据库发生变化,也有可能写入二进制日志。以下配置文件的参数影响着二进制日志记录的信息和行为,每一个参数具体的影响作用,参考书上。
可通过在/etc/my.cnf中配置log_bin参数,从而配置二进制日志文件:
生成的日志路径可以先通过以下指令找到:
此时你会发现:有一个mysql-bin.00001即二进制日志文件。
套接字文件
查看套接字文件参考下面的命令:
pid文件
表结构定义文件
MYSQL数据的存储是根据表进行的,每个表都会有与之对应的文件。但不论表采用何种存储引擎,MYSQL都有一个以frm为后缀名的文件,这个文件记录了该表的表结构定义。
也可以用来存放视图的定义。frm文件可以直接查看。
INNODB存储引擎文件
表空间文件
InnoDB存储引擎在存储设计上模仿了Oracle,将存储的数据按表空间进行存放。默认配置下,会有一个初始化大小为10MB、名为ibdataI的文件。该文件就是默认的表空间文件(tablespace file )。你可以通过参数innodb_data_file_path对其进行设置。格式如下:
innoDB将存储的数据按表空间进行存放。在默认配置下会有一个ibdatal文件,该文件就是默认的表空间文件。可以通过参数innodb_data_file_path对其进行设置。
重做日志文件
默认情况下,INNODB存储引擎的数据目录下会有两个名为ib_logfile0和ib_logfile1的文件。称为重做日志文件,在恢复时至关重要。 每个INNODB存储引擎至少有一个重做日志文件组,每个文件组下至少有2个重做日志文件。为了更高的可靠性,用户可以设置多个的镜像日志组,将不同的文件组放在不同的磁盘上,提高重做日志的可用性。 在日志组中每个重做日志文件的大小一致,并以循环写入的方式运行。图3-2显示了一个拥有3个重做日志文件的重做日志文件组。
下列参数严重影响重做日志文件的属性。
- innodb_log_file_size: 指定每个重做日志文件的大小。 设置的过大,在恢复时可能需要很多的时间。设置的过小,一个事务需要多次切换重做日志文件。还可能导致频繁的async checkpoint
- innodb_log_files_in_group: 指定日志文件组中重做文件的数量。
- innodb_mirrored_log_grooups: 指定日志镜像文件组的数量,默认为1.
- innodb_log_group_home_dir
事务日志和二进制日志的区别:
- 二进制会记录所有MYSQL数据库有关的日志记录。包括各种引擎的日志,而重做日志只记录有关该存储引擎本身的事务日志。
- 记录的内容不同。二级制日志文件记录的是关于一个事务的具体操作,即该日志的逻辑日志。而INNODB存储引擎的重做日志文件记录的是关于每个页的更改的物理情况。
- 写入的时间也不同,二进制日志文件仅在事务提交前进行提交,即只写磁盘一次,不论这时事务多大。而在事务进行的过程中,却不断有重做日志条目被写入到重做日志文件中。
在第2章中已经提到,对于写入重做日志文件的操作不是直接写,而是先写入一个重做日志缓冲(redo log buffer)中,然后根据按照一定的条件写人日志文件。图3-3很好地表示了这个过程。