InnoDB(四)-InnoDB文件
参考文献
- MySQL技术内幕 InnoDB存储引擎
参数文件
-
当MySQL实例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.
-
可以通过命令
SHOW VARIABLES
来查看数据中的所有参数,也可以通过LIKE
来过滤参数名.从MySQL5.1版本开始,可以通过performance_schema
架构下的GLOBAL_VARIABLES
视图来进行查找.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34mysql> select * from global_variables where variable_name like 'innodb_buffer%';
+-------------------------------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+-------------------------------------+----------------+
| innodb_buffer_pool_chunk_size | 134217728 |
| innodb_buffer_pool_dump_at_shutdown | ON |
| innodb_buffer_pool_dump_now | OFF |
| innodb_buffer_pool_dump_pct | 25 |
| innodb_buffer_pool_filename | ib_buffer_pool |
| innodb_buffer_pool_in_core_file | ON |
| innodb_buffer_pool_instances | 1 |
| innodb_buffer_pool_load_abort | OFF |
| innodb_buffer_pool_load_at_startup | ON |
| innodb_buffer_pool_load_now | OFF |
| innodb_buffer_pool_size | 134217728 |
+-------------------------------------+----------------+
11 rows in set (0.00 sec)
mysql> show variables like 'innodb_buffer%';
+-------------------------------------+----------------+
| Variable_name | Value |
+-------------------------------------+----------------+
| innodb_buffer_pool_chunk_size | 134217728 |
| innodb_buffer_pool_dump_at_shutdown | ON |
| innodb_buffer_pool_dump_now | OFF |
| innodb_buffer_pool_dump_pct | 25 |
| innodb_buffer_pool_filename | ib_buffer_pool |
| innodb_buffer_pool_in_core_file | ON |
| innodb_buffer_pool_instances | 1 |
| innodb_buffer_pool_load_abort | OFF |
| innodb_buffer_pool_load_at_startup | ON |
| innodb_buffer_pool_load_now | OFF |
| innodb_buffer_pool_size | 134217728 |
+-------------------------------------+----------------+
11 rows in set (0.00 sec)
参数类型
-
MySQL数据库中参数可以分为两类:
- 动态(dynamic)参数
- 静态(static)参数
-
动态参数意味着可以在MySQL实例运行中进行更改,静态参数说明在整个实例声明周期内都不得进行更改,就好像是只读的.通过
SET
命令对动态的参数进行修改.1
2
3
4
5
6
7
8
9
10
11
12
13SET variable = expr [, variable = expr] ...
variable: {
user_var_name
| param_name
| local_var_name
| {GLOBAL | @@GLOBAL.} system_var_name
| {PERSIST | @@PERSIST.} system_var_name
| {PERSIST_ONLY | @@PERSIST_ONLY.} system_var_name
| [SESSION | @@SESSION. | @@] system_var_name
}
SET read_buffer_size=524288;GLOBAL
和SESSION
关键字,它们表明该参数的修改是基于整个实例的生命周期还是当前会话.
日志文件
错误日志(error log)
-
错误日志文件对MySQL的启动,运行,关闭过程进行了记录.在遇到问题是应该首先查看该文件以便定位问题.
-
该文件不仅记录了所有的错误信息,也记录了一些警告信息或正确的信息.可以通过
SHOW VARIABLES LIKE 'log_error'
来定位该文件1
2
3
4
5
6
7
8
9mysql> show variables like 'log_error';
+---------------+----------------------------------------+
| Variable_name | Value |
+---------------+----------------------------------------+
| log_error | /usr/local/mysql/data/mysqld.local.err |
+---------------+----------------------------------------+
1 row in set (0.01 sec)
mysql> system hostname
192.168.0.107- 可以看到错误文件的路径和文件名,在默认情况下错误文件的文件名为服务器的主机名.
-
当出现MySQL不能正常启动时,第一个必须查找的文件就是错误文件,该文件记录错误信息,能很好的指导用户发现问题.
查询日志
-
查询记录记录了所有对MySQL数据库请求的信息,无论这些请求是否得到登录正确的执行,默认文件名为:主机名.log
1
2
3
4
5
6
7
8mysql> show variables like 'general_log%';
+------------------+-------------------------------+
| Variable_name | Value |
+------------------+-------------------------------+
| general_log | OFF |
| general_log_file | /usr/local/mysql/data/192.log |
+------------------+-------------------------------+
2 rows in set (0.01 sec)
Socket
文件
-
在Unix系统下本地连接MySQL可以采用UNIX域套接字方式,这种方式需要一个套接字文件.
1
2
3
4
5
6
7mysql> show variables like 'socket';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| socket | /tmp/mysql.sock |
+---------------+-----------------+
1 row in set (0.00 sec)
pid
文件
-
当MySQL实例启动时,会将自己的进程ID写入到一个文件中,该文件即为pid文件.该文件由参数
pid_file
控制,默认位于数据库目录下,文件名为主机名.pid.1
2
3
4
5
6
7mysql> show variables like 'pid_file';
+---------------+----------------------------------------+
| Variable_name | Value |
+---------------+----------------------------------------+
| pid_file | /usr/local/mysql/data/mysqld.local.pid |
+---------------+----------------------------------------+
1 row in set (0.01 sec)
InnoDB
存储引擎文件
表空间文件
-
InnoDB采用将存储的数据按表空间(tablespace)进行存放的设计.在默认配置下会有一个初始大小为10MB,名为
ibdata1
的文件.该文件就是默认的表空间文件(tablespace file),用户可以通过innodb_data_file_path
对其进行设置.1
2
3
4
5
6
7mysql> show variables like 'innodb_temp_data_file_path';
+----------------------------+-----------------------+
| Variable_name | Value |
+----------------------------+-----------------------+
| innodb_temp_data_file_path | ibtmp1:12M:autoextend |
+----------------------------+-----------------------+
1 row in set (0.00 sec) -
设置
innodb_temp_data_file_path
参数后,所有基于InnoDB存储引擎的表的数据都会记录到该共享表空间中.若设置innodb_file_per_table
,则用户可以将每个基于InnoDB存储引擎的表产生一个独立的表空间.独立表空间的命名规则为:表名.ibd
.1
2
3
4
5
6
7mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.01 sec) -
由于设置参数
innodb_file_per_table=ON
因此产生了单独的ibd
独立表空间文件.需要注意的是,这些单独的表空间文件仅存储该表的数据,索引和插入缓冲BITMAP等信息,其余信息还是存放在默认的表空间.
重做日志文件
-
在默认情况下,在InnoDB存储引擎的数据目录下会有两个名为
ib_logfile0
和ib_logfile1
的文件.1
2
3root@192 data # ls -al|grep ib_log
-rw-r----- 1 _mysql _mysql 50331648 5 1 18:39 ib_logfile0
-rw-r----- 1 _mysql _mysql 50331648 5 1 18:38 ib_logfile1 -
它记录了对于InnoDB存储引擎的事务日志.当实例或介质失败时,重做日志就能排上用场.例如,数据库由于所在主机断电导致实例失败,InnoDB会使用重做日志恢复到断电前的时刻,以此来保证数据的完整性.
-
每个InnoDB存储引擎至少有一个重做日志文件组,每个文件组下至少有两个重做日志文件.为了得到更高的可靠性,用户可以设置多个镜像日志组.将不同的文件组放在不同的磁盘上,以此提高重做日志的高可用性.
- 在日志组中每个重做文件的大小一致,并以循环写入的方式运行.InnoDB存储引擎先写重做日志文件1,当达到文件的最后时,会切换至重做日志文件2,再当重做日志文件2也被写满时,会在切换到重做文件1中.
1 | mysql> show variables like 'innodb_log_file%'; |