Mysql数据库和InnoDB存储引擎表的各种文件,包括
参数文件:告诉Mysql 实例启动时在哪里找到数据库文件,并指定了某些初始化参数.
日志文件:用来记录Mysql实例对某种条件做出响应时写入的文件.如错误日志文件,二进制日志文件,慢查询日志文件,查询日志文件等.
socket文件: 当用UNIX域套接字方式进行连接时需要的文件
pid文件: MySql 实例的进程ID文件
MySql表结构文件:用来存放MySql表机构定义文件
存储引擎文件:每个存储引擎都会有自己的文件来保存各种数据。这些存储引擎真正存储了记录和索引等数据.
一:参数文件
在MySQL实例启动时,数据库会先去读一个配置参数文件.用来寻找数据库的各种文件所在位置以及指定某些初始化参数. 在linux环境,可以通过 mysql -help | grep my.cnf来查找配置文件.
也可以通过show 命令查看
show variables like 'innodb_buffer_pool%';
修改参数的值,其影响范围可以是全局的,也可以是当前会话的. 比如 set @GLOBAL.read_buffer_size= 102245;//全局性设置
set @@session.read_buffer_size=102454;//当前会话有效
二:日志文件
日志文件记录了影响MySQL 数据库的各种类型活动。常见的日志文件有:
错误日志(error log),二进制日志(binlog),慢查询日志(slow query log),查询日志(log).这些日志方便我们了解数据库执行的状态等信息.
2.1 错误日志
可以通过show variables like 'log_error'来定位文件位置.
如果发现数据库不能正常启动,或者其他异常情况。可以首先定位出错误日志位置,然后查看进行分析,比如说是权限问题。也会有 warn警告提示 内存大小不足等。
2.2 慢查询日志
我们可以通过分析这个日志。来找到慢sql语句,然后有针对性的进行sql优化.long_query_time 这个参数是设置多长时间为慢查询.默认是10s.
我们可以查询mysql.slow_log 表,里面记录了慢查询日志.
2.3查询日志
和慢查询日志类似。只不过 它会记录所有对MySQL的请求. 这些日志记录下 mysql.general_log表中.
2.4 二进制日志
二进制日志记录了对MySQL数据库执行更改的所有操作.但不包括select ,show等操作.二进制日志的主要作用有
恢复:某些数据的恢复需要二进制日志,例如 在一个数据库全备文件恢复后,用户可以通过二进制日志进行 point-in-time的恢复.
复制:其原理和恢复类似.比如主从之间的实时同步.
审计:用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的攻击.
二进制日志文件默认没有启动。需要手动启动.开启会 使性能降低1%左右.
sync_binlog 参数为1.表示采用同步写磁盘的方式来写二进制日志。当为0(默认值) 的时候,表示采用缓冲的写的方式写入磁盘.
三. 套接字文件。
在Unix系统下 本地连接MySQL可以采用UNIX域套接字方式。了解即可
四. PID文件
当MySQL 实例启动时,会将自己的进程ID写入一个文件中,该文件即为pid文件.该文件可由参数pid_file控制.默认位于数据库目录下.文件名为主机名 +.pid.了解即可.
五. 表结构定义文件
MySQL 数据的存储时根据表进行的,每个表都有与之对应的文件.并且都有一个后缀为frm的文件。这个文件记录了该表的表结构定义.
六: InnoDB 存储引擎文件
存储引擎文件包括日志文件,表空间文件
6.1表空间文件
InnoDB采用将存储的数据按照表空间(tablespace)进行存放的设计.默认配置下会有一个初始大小为10MB,名为idbatal的文件。该文件就是默认的表空间文件.我们也可以对其进行设置大小。
默认表空间文件 也可以设置为多个文件,位于不同的磁盘上面,用于提高数据库的性能.
Innodb_data_file_path参数 表示基于 innodb存储引擎的表的数据都会记录到该共享表空间中。
Innodb_file_per_table 参数表示每个表都会有个文件来记录其信息.以表名.ibd 为文件名.这个文件只存储表的数据,索引,和插入缓冲BITMAP信息,其他信息还是存储在共享表空间中.
6.2重做日志文件
重做日志的作用:当系统宕机. 当数据库重启时,InnoDB存储引擎会使用重做日志恢复到掉电前的时刻。以此来保证数据的完整性.
重做日志和二进制日志文件的区别:
1) 二进制日志会记录所有与MySQL数据库有关的日志.包括InnoDB,MyISAM,Heap等其他存储引擎的日志。而InnoDB存储引擎的重做日志只记录有关 InnoDB存储引擎的事务日志
2)记录的内容不同, 二进制日志文件记录是逻辑日志,记录的是关于一个事务的具体操作内容。比如insert,update语句. 而InnoDB存储引擎的重做日志文件记录的是关于每个页(Page)的更改的物流情况.
3)写入的时间不同.二进制日志文件仅在提交前进行提交,即只写磁盘一次,不论这时事务多大.而在事务进行的过程中,却不断有重做日志条目被写入到重做日志文件中.
重做日志缓冲写入过程中,是按照一定的顺序写入日志文件。并且是按照512个字节进行写入,可以保证写入是成功,不用doublewrite。
如果想深入了解。可以查看<<MySQL技术内幕 InnoDB存储引擎>>