mysql学习笔记(2)之物理文件


内容来源为六星教育,这里仅作为学习笔记

数据库的数据存储文件

MySQL数据库会在data目录下面简历一个以数据库为名的文件夹,用来存储数据库中的表文件数据。不同的数据库引擎,每个表的扩展名也不一样 ,例如: MyISAM用“.MYD”作为扩展名,Innodb用“.ibd”,Archive 用“.arc”,CSV 用“.csv

  1. ".FRM"文件

无论是那种存储引擎,创建表之后就一定会生成一个以表明命名的’.frm’文件。frm文件主要存放与表相关的数据信息,主要包括表结构的定义信 息。当数据库崩溃时,用户可以通过frm文件来恢复数据表结构。8.0之后就废除了

  1. ".MYD"文件

“.MYD”文件是MyISAM存储引擎专用,存放MyISAM表的数据。每一个MyISAM表都会有一个“.MYD”文件与之对应,同样存放于所属数据库的文件夹 下, 和“.frm”文件在一起。

  1. ".MYI"文件

“.MYI”文件也是专属于MyISAM存储引擎的,主要存放MyISAM表的索引相关信息。对于MyISAM存储来说,可以被cache 的内容主要就是来源 于“.MYI”文件中。 每一个MyISAM表对应一个“.MYI”文件,存放于位置和“.frm”以及“.MYD”一样。

  1. “.ibd"文件与”.ibdata"文件

这两种文件都是存放Innodb数据的文件,之所以有两种文件来存放Innodb的数据(包括索引),是因为Innodb的数据存储方式能够通过配置来决 定是使用共享 表空间存放存储数据,还是独享表空间存放存储数据。独享表空间存储方式使用“.ibd”文件来存放数据,且每个表一个“.ibd”文件 ,文件存放在和MyISAM数据相 同的位置。如果选用共享存储表空间来存放数据,则会使用ibdata文件来存放,所有表共同使用一个(或者多个, 可自行配置)ibdata文件。
ibdata文件可以通过innodb_data_home_dir(数据存放目录)和innodb_data_file_path(配置每个文件的名称)两个参数配置组成
innodb_data_file_path中可以一次配置多个ibdata文件 #innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend 配置方 式
共享表空间: 某一个数据库的所有的表数据,索引文件全部放在一个文件中。
独占表空间: 每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有一个.ibd文件。其中这个文件包括了 单独一个表的数据 内容以及索引内容。

  1. 共享表空间:
    优点: 可以放表空间分成多个文件存放到各个磁盘上。数据和文件放在一起方便管理。
    缺点: 所有的数据和索引存放到一个文件中,多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空 隙,特别是对于统计分 析,日值系统这类应用最不适合用共享表空间。
  2. 独立表空间:
    优点:
    每个表都有自已独立的表空间。
    每个表的数据和索引都会存在自已的表空间中。
    可以实现单表在不同的数据库中移动。
    空间可以回收
    a) Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:altertable TableName engine=innodb;回 缩不用的空间。
    b) 对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。
    缺点:
    单表增加过大,如超过100 个G。 相比较之下,使用独占表空间的效率以及性能会更高一点

共享表空间和独立表空间之间的转换

show variables like “innodb_file_per_table”; ON代表独立表空间管理,OFF代表共享表空间管理;
修改数据库的表空间管理方式 修改innodb_file_per_table的参数值即可,但是修改不能影响之前已经使用过的共享表空间和独立表空间;
innodb_file_per_table=1 为使用独占表空间
innodb_file_per_table=0 为使用共享表空间

日志文件

查询日志

主要记录mysql的select查询,默认是关闭的,不推荐开启

select * from class;
show variables like “%general_log%”;–查询日志是否开启
set global general_log = “on”; --设置查询日志的关闭与开启
select * from mysql.general_log;

慢查询日志

主要记录MySQL中响应时间超过某个时间段
作用:帮助我们在项目运行之后一些特定的sql进行捕捉(通常是比较慢的sql),得到sql之后可以针对性进行优化
建议:在项目开始之后运行
参数设置(在MySQL的配置文件里设置):

slow_query_log :是否开启慢查询日志,1表示开启,0表示关闭。
slow-query-log-file:MySQL数据库慢查询日志存储路径
long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志
log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。
log_output:日志存储方式。‘FILE’ 表示将日志存入文件。'TABLE’表示将日志存入数据库。

查看慢查询配置:

show variables like “%slow_query_log%”; --查看慢查询是否开启

错误日志

主要记录MySQL服务运行中产生的错误=》这个异常不是指sql异常,而是指服务异常。
记录 MySQL 服务器启动和停止过程中的信息、服务器在运行过程中发生的故障和异常情况等。
日志文件一般在于data目录里 .err 结尾的文件里

二进制日志

主要记录执行sql(insert,update,delete ,create)写操作的日志,非常重要。
二进制日志文件一般为 filename.000001 这个种类型的文件

常用命令:

show variables like “log_bin”;–查看是否开启二进制日志 on.开启 off.关闭
show binary logs; – 二进制所有文件列表
show binlog events; --查询第一个日志文件
show master status;–查看当前的二进制日志;
show binlog events in ‘mysql-bin.000001’; – 查看指定的二进制文件信息
restet master; --删除所有二进制文件
purge master logs to ‘filename.number’;–删除指定二进制日志的编号之前的日志
flush logs: --清空所有的日志文件

恢复数据:

./bin/mysqlbinlog --start-position=96625 --stop-position=97758 /www/server/data/mysql-bin.000036 | mysql -uroot -p; --根据节点恢复数据
mysqlbinlog --start-datetime=‘2020-09-27 22:22:22’ --stop-datetime=‘2020-09-27 22:30:00’ /www/server/data/mysql-bin.000036 | mysql -uroot -p;–根据时间恢复数据
mysqlbinlog /www/server/data/mysql-bin.000036 | mysql -uroot -p;–恢复整个文件的数据

中继日志

主要是在主从中做运用,同时这个文件会记录主节点binlog日志,在到从节点根据这个文件进行数据恢复。
参数详情:

max_relay_log_size
relay log 允许的最大值,如果该值为0,则默认值为 max_binlog_size (1G);
如果不为0,则 max_relay_log_size 则为最大的relay_log文件大小;

relay_log
定义 relay_log 的位置和名称,如果值为空,则默认位置在数据文件的目录;

relay_log_index
定义 relay_log 索引的位置和名称,记录有几个 relay_log 文件,默认为2个

relay_log_info_file
定义 relay-log.info 的位置和名称

relay-log.info 记录 master 主库的 binary_log 的恢复位置和 从库 relay_log 的位置;

relay_log_purge
是否自动清空中继日志,默认值为1(启用);

relay_log_recovery
当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性。默认情况下该功能是关闭的,将relay_log_recovery的值设置为 1时,可在slave从库上开启该功能,建议开启;

sync_relay_log
当设置为1时,slave的I/O线程每次接收到master发送过来的binlog日志都要写入系统缓冲区,然后刷入relay log中继日志里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量I/O;

当设置为0时,并不是马上就刷入中继日志里,而是由操作系统决定何时来写入,虽然安全性降低了,但减少了大量的磁盘I/O操作。这个值默认是0,可动态修改;

sync_relay_log_info
这个参数和 sync_relay_log 参数一样。

事务日志

重做日志:主要是在事务已经提交但是数据还未刷新磁盘,mysql宕机了,再一次开启mysql服务的时候执行,保证数据的一致性。
回滚日志:

  1. 主要是在事务没有提交,在下一次mysql服务重启的时候执行
  2. 当我们执行rollback命令的时候
    在这里插入图片描述
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值