mysql数据库文件
InnoDB 和 MyISAM的区别
Innodb隔离级别原理实现
InnoDB主备复制
一、mysql和Innodb文件
1.配置文件my.cnf: 配置了mysql的参数,通过show VARIABLES like '%connect_timeout%'查看mysql 参数
2. 错误日志: 错误日志文件对MySQL的启动、运行、关闭过程进行了记录。
mysql> show variables like 'log_error';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| log_error | ./mysql-err.log |
+---------------+-----------------+
1 row in set (0.01 sec)
3.慢查询日志: MySQL启动时设一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询日志中。
long_query_time : 设定慢查询的阀值,超出次设定值的SQL即被记录到慢查询日志,缺省值为10s
slow_query_log : 指定是否开启慢查询日志
log_slow_queries : 指定是否开启慢查询日志(该参数要被slow_query_log取代,做兼容性保留)
slow_query_log_file : 指定慢日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log
min_examined_row_limit:查询检查返回少于该参数指定行的SQL不被记录到慢查询日志
log_queries_not_using_indexes: 不使用索引的慢查询日志是否记录到索引
log_throttle_queries_not_using_indexes: 表示每分钟允许记录到slow log的且未使用索引的SQL语句次数。 该值默认为0,表示没有限制。在生产环境下,若没有使用索引,此类SQL语句会频繁地被记录到slow log,从而导致slow log文件的大小不断增加,故DBA可通过此参数进行配置。
4.查询日志: 查询日志记录来所有对MySQL数据库请求的信息,无论这些请求是否得到了正确的执行。
5.二进制日志: 二进制日志(binary log)记录来对MySQL数据库执行更改的所有操作,但是不包括SELECT 和 SHOW 这类操作,因为这类操作对数据本身并没有修改。可用于
数据恢复,主备复制,数据库审计。
max_binlog_size: 指定了单个二进制日志文件的最大值,如果超过该值,则产生新的二进制文件。
binlog_cache_size: 指定二进制缓存大小,所有未提交(uncommitted)的二进制日志会被记录到一个缓存中去,等改事务提交时直接将缓存中的二进制日志写入二进制日志文件。
sync_binlog: 指定缓存同步策略,系统默认的设置是sync_binlog=0。
0: 当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。
N: 当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。如果
sync_binlog=1表示采用
同步写磁盘的方式写二进制日志,这时写操作不使用操作系统的缓冲来写二进制日志。
innodb_support_xa=1可以解决当
sync_binlog=1时,二进制日志已写入磁盘,但是事务还没有提交,并且此时发生了宕机,重启时事务被回滚,但是二进制日志没有被回滚的情况。
6.表结构定义文件: MySQL都有一个以frm为后缀名的文件,这个文件记录来该表的表结构定义。
7.表空间文件: InnoDB采用将存储的数据按表空间(tablespace)进行存放的设计。在默认配置下会有一个初始大小为10MB,名为ibdata1的文件。
innodb_data_file_path: 指定表空间文件的路径和大小。
innodb_file_per_table: 若设置来参数innodb_file_per_table,则用户可以将每个基于
InnoDB存储引擎的表产生一个独立表空间。独立表空间的命名规则为:表名.ibd。需要注意的是,这些单独的表空间文件仅存储该表的
数据、索引和插入缓存BITMAP等信息,其余信息还是存放在默认的表空间。
MyISAM:
.myd 即 my data,表数据文件
.myi 即my index,索引文件
8.重做日志文件: 重做日志文件用来实现事务的持久性。
每个InnoDB存储引擎至少有1个重做日志文件组(group),每个文件组下至少有2个重做日志文件,如默认的ib_logfile0和ib_logfile1。用户可以设置多个的镜像日志组(mirrired log groups),将不同的文件组放在不同的磁盘上,以此提高重做日志的高可用性。在日志组中每个重做日志文件的大小一致,并以循环写入的方式运行。InnoDB存储引擎先写重做日志文件1,当达到文件的最后时,会切换至重做日志文件2,再当重做日志文件2也被写满时,会再切换到重做日志文件1中。
innodb_log_file_size: 指定每个重做日志文件的大小。
innodb_log_files_in_group: 指定来重做日志组中重做日志文件的数量。
innodb_log_mirrored_log_groups: 指定了日志镜像文件组的数量,默认为1,表示只有一个文件组,没有镜像。
innodb_log_group_home_dir: 指定了日志文件组所在路径。
innodb_flush_log_at_trx_commit:用来控制重做日志刷新到磁盘的策略。
0: 表示事务提交时不进行写入重做日志操作,这个操作仅在maser thread中完成,而master thread每1秒会进行一次重做日志文件的fsync操作。
1: 表示事务提交时必须调用一次fsync操作。
2: 表示事务提交时将重做日志写入重做日志文件,但仅写入文件系统的缓存中,不进行fsync操作。这个设置下,当MySQL数据库发生宕机而操作系统不发生宕机时,并不会导致事务的丢失。而当操作系统宕机时,重启数据库后会丢失未从文件系统缓存刷新到重做日志文件那部分事务。
二、进制日志和重做日志比较
- 重做日志是在InnoDB存储引擎层产生,而二进制日志是在MySQL数据库的上层产生。
- 重做日志只记录针对InnoDB存储引擎本身的事务日志,而二进制日志会记录所有与MySQL数据库有关的日志记录,包括InnoDB、MyISAM、Heap等其他存储引擎的日志。
- 两种日志记录的内容形式不同。二进制日志是一种逻辑日志,其记录的是对应的SQL语句,而重做日志是物理格式日志,其记录的是对于每个页的修改。
- 写入磁盘的时间点不同。二进制日志只在事务提交完成后进行一次写入,而重做日志在事务进行中不断被写入。
- 目的不同。二进制日志可用于数据恢复,主备复制,数据库审计,而重做日志是用于重做已提交,但还未刷新到磁盘的事物。
三、事务提交
一个事务执行时实际发生过程简化描述如下:
- 先记录 undo/redo log,确保日志刷到磁盘上持久存储。
- 更新数据记录,缓存操作并异步刷盘。
- 提交事务前,将事务日志持久化到 binlog。
- 提交事务,在 redo log 中写入commit记录。
总结:这样的话,只要 binlog 没写成功,整个事务是需要回滚的,而 binlog 写成功后即使 MySQL Crash 了都可以恢复事务并完成提交。要做到这点,就需要把 binlog 和事务关联起来,而只有保证了 binlog 和事务数据的一致性,才能保证主从数据的一致性。所以 binlog 的写入过程不得不嵌入到纯粹的事务存储引擎执行过程中,并以内部分布式事务(xa 事务)的方式完成两阶段提交。
- 大小: 209.6 KB
- 大小: 51.3 KB
- 大小: 37.2 KB
分享到:
相关推荐
本文将深入探讨MySQL数据库文件的存储路径,以及如何在Windows操作系统中找到这些文件。 首先,MySQL的数据文件主要分为两类:系统数据文件和用户数据文件。系统数据文件包括配置文件(如my.ini或my.cnf)、日志...
### MySQL数据库文件深入解析及其存放位置 MySQL作为全球广泛使用的开源关系型数据库管理系统,其数据存储方式和文件组织结构对于数据库管理员和开发人员至关重要。理解MySQL数据库文件的种类及其存放位置,有助于...
天天生鲜电商网站项目MySql数据库文件,Mysql版本数据库,包括所需全部数据、图片、资源名称、数据结构等!
很不错的mysql数据库文件很不错的mysql数据库文件很不错的mysql数据库文件很不错的mysql数据库文件很不错的mysql数据库文件
天天生鲜电商网站项目MySql数据库文件,Mysql版本数据库,包括所需全部数据、图片、资源名称、数据结构等!
银行行联号,开户行,开户省份,开户城市 mysql 数据库文件
成语词典 数据库 文件 MySQL 数据库文件
标题中的"现成的mysql数据库文件(商城db.sql)运行即可使用"表明我们得到了一个已经预设好的MySQL数据库文件,名为"db.sql",这个文件包含了商城系统的数据结构和可能的数据。通常,这种文件是由数据库管理员或者...
### MySQL数据库文件目录更改详尽指南 在管理MySQL数据库时,有时我们可能需要更改数据库文件的存储位置。这可能是为了优化磁盘空间使用、提升性能或是进行数据迁移。以下是一份详细的操作指南,帮助您安全地更改...
全国(中国)省市两级联动 mysql数据库文件 导入即可、真实可用
由于上传资源“汽车管理系统JAVA”时忘了上传数据库文件,故此资源是针对本人CSDN资源“汽车管理系统JAVA”的数据库配置。
记账本项目MySQL数据库文件,直接新建数据库导入文件即可
### MySQL数据库命令详解 #### 一、MySQL服务的管理 MySQL作为一款广泛使用的开源关系型数据库管理系统,其服务的启动和停止是基本的管理操作。 **启动MySQL服务** 使用`net start mysql`命令可以启动MySQL服务...
MySQL数据库文件jdbc.sql:用于MySQL学习笔记(二)的测试数据库,下载后用导入MySQL即可使用,学习时配套使用。
记账本项目MySQL数据库文件,直接新建数据库导入文件即可
标题 "pbootcms数据sqlite转mysql数据库" 涉及的是一个常见的数据库迁移过程,从SQLite数据库系统转换到MySQL数据库系统。这个过程在网站或应用的开发和维护中经常遇到,尤其是在更换数据库服务或者需要更强大的...
SpringBoot+Vue在线拍卖系统MySQL数据库文件
中国各省市地区的mysql数据库文件,包含拼音、邮编,层次分明,非常详细。 单表结构,通过parent_id字段关联。有拼音字段,适合按照拼音首字母做查询,各索引已经建好。分值不多,希望大家支持~