datadir各文件详解——理解mysql数据库的结构

查看datadir下的所有文件

[root@lzl mysql3308]# ls -lrt
total 122932

-rw-r----- 1 mysql mysql 50331648 Aug  3 16:47 ib_logfile1
-rw-r----- 1 mysql mysql       56 Aug  3 16:47 auto.cnf
drwxr-x--- 2 mysql mysql     4096 Aug  3 16:47 performance_schema
drwxr-x--- 2 mysql mysql    12288 Aug  3 16:47 sys
drwxr-x--- 2 mysql mysql     4096 Aug  5 18:22 mysql
-rw-r----- 1 mysql mysql      384 Aug  7 15:24 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Aug  7 15:24 ibtmp1
drwxr-x--- 2 mysql mysql     4096 Aug  7 18:19 lzldb
-rw-r----- 1 mysql mysql 12582912 Aug  7 18:20 ibdata1
-rw-r----- 1 mysql mysql 50331648 Aug  7 18:20 ib_logfile0
-rw-r----- 1 mysql mysql      295 Aug 10 11:58 slave-relay-bin.000018
-rw-r----- 1 mysql mysql      409 Aug 10 11:58 slave-relay-bin.000019
-rw-r----- 1 mysql mysql       50 Aug 10 11:58 slave-relay-bin.index
-rw-r----- 1 mysql mysql       62 Aug 10 11:58 relay-log.info
-rw-r----- 1 mysql mysql      130 Aug 16 15:16 master.info


带ib的,都跟innodb相关


1 ib_logfile  
logfile指的是redo logfile,物理redo日志
logfile大小由innodb_log_file_size控制,默认是48m(oracle是50m)
ib_logfile数量由innodb_log_files_in_group控制,默认为2(oracle是3组)。
ib logfile顺序循环写,默认文件为ib_logfile0,ib_logfile1,当前我的环境明显正在写的是ib_logfile1。

mysql> show variables like '%log_file%';
+---------------------------+------------------------------+
| Variable_name             | Value                        |
+---------------------------+------------------------------+
| general_log_file          | /data/mysql3308/lzl.log      |
| innodb_log_file_size      | 50331648                     |
| innodb_log_files_in_group | 2                            |
| slow_query_log_file       | /data/mysql3308/lzl-slow.log |
+---------------------------+------------------------------+
4 rows in set (0.00 sec)

mysql> select 50331648/1024/1024 mb ;
+-------------+
| mb          |
+-------------+
| 48.00000000 |
+-------------+
1 row in set (0.00 sec)


redo log只是记录所有innodb表数据的变化。
redo log只是记录正在执行中的dml以及ddl语句。
redo log可以作为异常down机或者介质故障后的数据恢复使用

2 auto.cnf
在没有指定uuid的时候,mysql会自动生成一个uuid并存放在auto.cnf中
[root@lzl mysql3308]# cat  auto.cnf 
[auto]
server-uuid=fdd256b7-d565-11ea-b1f7-08002792ac2c

3 performance_schema,sys,mysql,lzldb
这几个目录都是schema数据存储目录,performance_schema,sys,mysql都是系统自带的,其他都是自建的

4 ib_buffer_pool文件
在理解ib_buffer_pool文件前需要理解innodb buffer pool和innodb缓冲池预热

innodb buffer pool是innodb的数据缓冲区(类似oracle的数据高速缓冲区)
mysql> show variables like '%buffer%pool%';
+-------------------------------------+----------------+
| 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_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      |
+-------------------------------------+----------------+
10 rows in set (0.00 sec)


innodb_buffer_pool_instances默认为1,表示innoDB缓冲池的区域chunk个数,多个pool可以提升innodb并发性能
innodb_buffer_pool_chunk_size,每个chunk的大小
innodb_buffer_pool_dump_at_shutdown:默认on,关闭mysql时,buffer中的数据会存放dump在磁盘上,也就是我们看到的文件ib_buffer_pool(由innodb_buffer_pool_filename参数控制),dump大小默认为25%(由innodb_buffer_pool_dump_pct参数控制)
innodb_buffer_pool_load_at_startup:在打开mysql时,加载上次关闭的时dump下来的ib_buffer_pool数据到buffer pool中
innodb_buffer_pool_size为buffer pool的大小,默认128m(mysql5.7)
innodb_buffer_pool_load_abort中断缓冲池预热任务,由innodb_buffer_pool_load_at_startup 和innodb_buffer_pool_load_now发起的任务
innodb_buffer_pool_dump_now立即dump buffer pool到磁盘上,一般跟innodb_buffer_pool_load_now一起使用
innodb_buffer_pool_load_now立即开启缓冲池预热


5 ibtmp1
ibtmp1是innodb临时表空间的数据文件

mysql>  show variables like '%temp%';
+----------------------------+-----------------------+
| Variable_name              | Value                 |
+----------------------------+-----------------------+
| avoid_temporal_upgrade     | OFF                   |
| innodb_temp_data_file_path | ibtmp1:12M:autoextend |
| show_old_temporals         | OFF                   |
+----------------------------+-----------------------+

innodb_temp_data_file_path
innodb临时表空间数据文件初始大小12m,自动增长,没有限制(oracle数据库8k block的数据文件最大值为32G)
可以通过设置ibtmp1:12M:autoextend:max:1G来设置最大值。innodb_temp_data_file_path是只读参数,仅能在cnf文件中设置,重启生效。

6 ibdata1

mysql>  show variables like  '%innodb_file_per_table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)

如果innodb_file_per_table打开(默认),innodb的数据会写到各自的schema目录文件下。
ibdata1存储一些innodb内部数据

7 slave-relay-bin

slave-relay-bin.xxxx是从库的relay日志文件(我这个环境开启了slave,master是没有relay的)
slave-relay-bin.index 是从库的relay日志文件的index文件,存放relay的文件名
[root@lzl mysql3308]# cat slave-relay-bin.index
./slave-relay-bin.000018
./slave-relay-bin.000019

8 relay-log.info和master.info
开启slave才有上述2个文件。
info文件存储了主从的配置信息
[root@lzl mysql3308]# cat relay-log.info
7
./slave-relay-bin.000019
409
master-bin.000009
194
0
0
1

[root@lzl mysql3308]# cat master.info
25
master-bin.000009
194
127.0.0.1
replicator
oracle
3306
60
0

0
30.000

0
a9521767-c5a0-11ea-a743-08002792ac2c
86400


0

参考文章:

https://www.cnblogs.com/qianyuliang/p/9916372.html
https://blog.csdn.net/yabingshi_tech/article/details/46622999

猜你喜欢

转载自blog.csdn.net/qq_40687433/article/details/108037785