百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

mysql文件结构及InnoDB引擎表空间整理

mhr18 2024-09-20 20:53 17 浏览 0 评论

一、Mysql 的目录结构

1、bin目录

用于放置一些可执行文件,如mysql.exe、mysqld.exe、mysqlshow.exe等。

2、data目录

用于放置一些日志文件及数据库

3、include目录

用于存放一些头文件,如:mysql.h、mysql_ername.h等。

4、lib目录

用于放置一些库文件

4、docs目录

存放一些目录

5、share目录

用于存放字符集、语言等信息

6、my.ini

是MySQL数据库中使用的配置文件,linux下是my.cnf

7、my-huge.ini

适合超大型数据库使用的配置文件

8、my-large.ini

适合大型数据库的配置文件

9、my-medium.ini

适合中型数据库的配置我呢见

10、my-small.ini

适合小型数据库的配置文件

11、my-template.ini

配置文件模板、Mysql配置向导将该配置文件中的选项写入my.ini文件

12、my-innodb-heavy-4G.ini

示该配置文件只对于InnoDB存储引擎有效,而且服务器的内存不能小于4GB

二、日志文件

默认都存储在datadir指定的目录,如windows下的data目录,linux下的/var/lib/mysql目录

1、错误日志

记录mysql启动、停止、运行过程中发生的各种严重错误信息。

可以使用--log-error[=file_name]参数指定日志位置

log-error=/var/log/mysqld.log

2、通用日志

记录建立客户端连接和执行的语句,而binglog不记录select语句。

--general_log[={0关闭|1启动}]

--log-output[=value] value的值可以是table,file,none的一个或多个的组合,中间用逗号进行分割

--general_log_file=file_name

--log[=file_name]或-l [file_name]

datadir目录下的,默认文件名为host_name.log

如果想在session级别控制日志是否被记录,则通过在session中设置参数sql_log_off为on或off来进行控制。

3、二进制日志

类似于Oracle的归档日志,记录所有的DDL和dml语句,但不包含select语句,语句以事件形式保存,用于主从复制

默认不启用,启用使用参数--log-bin[=file_name]

log-bin=/var/log/mysql-bin/bin.log

server-id=2

4、慢查询日志

记录执行时间超过long_query_time秒的所有查询

slow_query_log=1|0 设置启动1和关闭0

slow_query_log_file=/var/log/mysql-slow/slow.log 指定慢查询日志路径

long_query_time=3

使用 ../bin/mysqldumpslow faspdev-slow.log 进行慢查询日志汇总处理

5、刷新日志方法

1)flush logs

2)mysqladmin flush-logs

3)mysqladmin refresh

二、数据文件结构

1、表对象数据文件

数据文件类型取决于存储引擎

frm文件 表对象结构定义文件,与引擎无关

db.opt 此文件在每一个自建的库里都会有,记录这个库的默认使用的字符集和校验规。

trg 触发器文件

InnoDB引擎数据文件:

由于该存储引擎在事务上具有优势,即支持具有提交、回滚及崩溃恢复能力等事务特性,所以比MyISAM存储引擎占用更多的磁盘空间。因此当需要频繁的更新、删除操作,同时还对事务的完整性要求较高,需要实现并发控制,建议选择。

分为共享表空间ibdataX和独立表空间ibd文件,存放表数据、索引

共享表空间只有.frm和.ibdata1文件,存放InnoDB系统信息、用户表、索引

独立表空间包含.frm和.ibd文件

ib_logfileX 日志文件

MyISAM引擎数据文件:

由于该存储引擎不支持事务、也不支持外键,所以访问速度较快。因此当对事务完整性没有要求并以访问为主的应用适合使用该存储引擎。

MYD文件 MyISAM数据文件,全称.mydata

MYI文件 MyISAM索引文件,全称.myindex

LOG文件 日志文件

其他引擎数据文件:

CSV文件 CSV引擎数据文件

ARZ文件 ARCHIVE引擎数据文件

MEMORY存储引擎存储数据的位置是内存,因此访问速度最快,但是安全上没有保障。适合于需要快速的访问或临时表。

2、pid文件/sock文件

pid文件是mysqld应用程序在Unix/Linux环境下的一个进程文件,和许多其他Unix/Linux服务端程序一样,它存放着自己的进程id

socket文件也是在Unix/Linux环境下才有的,用户在Unix/Linux环境下客户端连接可以不通过TCP/IP网络而直接使用Unix Socket来连接mysql.

三、默认数据库

mysql mysql系统数据库,存放用户信息

test 测试数据库,空的数据库

performance_schema 存放设置表、线程记录、历史事件记录、事件统计

四、innodb表空间

1.innodb表空间存储结构

段,区均为逻辑概念,并且段管理由innodb存储引擎内部完成!

区,区是由连续的页(Page)组成的空间,在任何情况下每个区大小都为1MB,为了保证页的连续性,InnoDB存储引擎每次从磁盘一次申请4-5个区

页,页是innodb存储引擎磁盘管理的最小单位,页的大小默认是16KB,可以由innodb_page_size参数设置,设置完成后,不可以对其再次进行修改。

2.innodb中表空间可以分为以下几种:

系统表空间

独立表空间

undo表空间

临时表空间(temporary tablespace)

通用表空间(general tablespace)

3.系统表空间(即共享表空间)

show variables like "innodb_data_file_path";

查询结果:innodb_data_file_path | ibdata1:12M:autoextend

#ibdata1:指定默认文件名#12M:指定默认文件大小#autoextend: 表示文件是自增的,当超过12M时,会自动增加大小,没有指定表空间的位置,默认是在数据库目

#注意添加文件时的格式写法

innodb_data_file_path=ibdata1:100M:autoestend;/data/ibdata2:200M

2.独立表空间

在配置文件(my.cnf)中设置: innodb_file_per_table=[1|0]

优点:

1.每个表都有自已独立的表空间。

2.每个表的数据和索引都会存在自已的表空间中。

3.可以实现单表在不同的数据库中移动。

4.空间可以回收

缺点:

1.单表增加过大,如超过100个G。

2.相比较之下,使用独占表空间的效率以及性能会更高一点。

3.通用表空间

通用表空间是在MySQL5.7中添加的一个新功能。可以数据库中指定的某几张表的数据写到同一个表空间,类似于系统的共享存储空间。

#创建通用表空间

mysql> create tablespace ts add datafile "ts1.ibd" engine=innodb;

Query OK, 0 rows affected (0.04 sec)

#datafile若是使用绝对路径,则可以指定datadir之外的目录,默认是在datadir指定的目录

#创建的表空间已经存在

mysql> system ls -lh /data/mysql/ts1.ibd

-rw-r----- 1 mysql mysql 64K Oct 23 06:42 /data/mysql/ts1.ibd

#把多张表指向一个表空间

mysql> create table test1(id int, name varchar(20)) tablespace=ts;

Query OK, 0 rows affected (0.02 sec)

mysql> create table test2(id int, name varchar(20)) tablespace=ts;

Query OK, 0 rows affected (0.02 sec)

mysql> create table test3(id int, name varchar(20)) tablespace=ts;

Query OK, 0 rows affected (0.01 sec)

#使用show create table 语句可以发现上面三张表的表空间均为ts。

#删除表空间

mysql> create tablespace ts2 add datafile "ts2.ibd" engine=innodb;

Query OK, 0 rows affected (0.01 sec)

mysql> drop tablespace ts2;

Query OK, 0 rows affected (0.02 sec)

4.undo表空间

MySQL5.6可以使用独立undo表空间,并放到单独的文件目录下。采用独立undo表空间,再也不用担心undo会把 ibdata1 文件搞大。可以把undo文件部署到单独的高速存储设备上。

在数据库初始化的时候就使用如下三个参数

innodb_undo_tablespaces=3 #设置为3个

innodb_undo_logs=128 #默认128个回滚段

innodb_undo_directory =mysql_home/undo

5.临时表空间

临时表空间就是存放临时表的表空间

MySQL 5.7对于InnoDB存储引擎的临时表空间做了优化。在MySQL 5.7之前,INNODB引擎的临时表都保存在ibdata里面,而ibdata的贪婪式磁盘占用导致临时表的创建与删除对其他正常表产生非常大的性能影响。

优化:

MySQL 5.7 把临时表的数据以及回滚信息(仅限于未压缩表)从共享表空间里面剥离出来,形成自己单独的表空间,参数为innodb_temp_data_file_path。

在MySQL 5.7 中把临时表的相关检索信息保存在系统信息表中:information_schema.innodb_temp_table_info. 而MySQL 5.7之前的版本想要查看临时表的系统信息是没有太好的办法。可以使用select * frominformation_schema.innodb_temp_table_info 查询临时表。

临时表

临时表顾名思义,就是临时的,用完销毁掉的表。 数据既可以保存在临时的文件系统上,也可以保存在固定的磁盘文件系统上。

临时表有下面几种:

1、全局临时表

这种临时表从数据库实例启动后开始生效,在数据库实例销毁后失效。在MySQL里面这种临时表对应的是内存表,即memory引擎。

2、会话级别临时表

这种临时表在用户登录系统成功后生效,在用户退出时失效。在MySQL里的临时表指的就是以create temporary table 这样的关键词创建的表。

3、事务级别临时表

这种临时表在事务开始时生效,事务提交或者回滚后失效。 在MySQL里面没有这种临时表,必须利用会话级别的临时表间接实现。

4、检索级别临时表

这种临时表在SQL语句执行之间产生,执行完毕后失效。 在MySQL里面这种临时表不是很固定,跟随MySQL默认存储引擎来变化。比如默认存储引擎是MyISAM,临时表的引擎就是MyISAM,并且文件生成形式以及数据运作形式和MyISAM一样,只是数据保存在内存里;如果默认引擎是INNODB,那么临时表的引擎就是INNODB,此时它的所有信息都保存在共享表空间ibdata里面。

相关推荐

Docker安装详细步骤及相关环境安装配置

最近自己在虚拟机上搭建一个docker,将项目运行在虚拟机中。需要提前准备的工具,FinallShell(远程链接工具),VM(虚拟机-配置网络)、CentOS7(Linux操作系统-在虚拟机上安装)...

Linux下安装常用软件都有哪些?做了一个汇总列表,你看还缺啥?

1.安装列表MySQL5.7.11Java1.8ApacheMaven3.6+tomcat8.5gitRedisNginxpythondocker2.安装mysql1.拷贝mysql安装文件到...

Nginx安装和使用指南详细讲解(nginx1.20安装)

Nginx安装和使用指南安装1.检查并安装所需的依赖软件1).gcc:nginx编译依赖gcc环境安装命令:yuminstallgcc-c++2).pcre:(PerlCompatibleRe...

docker之安装部署Harbor(docker安装hacs)

在现代软件开发和部署环境中,Harbor作为一个企业级的容器镜像仓库,提供了高效、安全的镜像管理解决方案。通过Docker部署Harbor,可以轻松构建私有镜像仓库,满足企业对镜像存储、管理和安全性...

成功安装 Magento2.4.3最新版教程「技术干货」

外贸独立站设计公司xingbell.com经过多次的反复实验,最新版的magento2.4.3在oneinstack的环境下的详细安装教程如下:一.vps系统:LinuxCentOS7.7.19...

【Linux】——从0到1的学习,让你熟练掌握,带你玩转Linu

学习Linux并掌握Java环境配置及SpringBoot项目部署是一个系统化的过程,以下是从零开始的详细指南,帮助你逐步掌握这些技能。一、Linux基础入门1.安装Linux系统选择发行版:推荐...

cent6.5安装gitlab-ce最新版本-11.8.2并配置邮件服务

cent6.5安装gitlab-ce最新版本-11.8.2并配置邮件服务(yum选择的,时间不同,版本不同)如果对运维课程感兴趣,可以在b站上搜索我的账号:运维实战课程,可以关注我,学习更多免费的运...

时隔三月,参加2020秋招散招,终拿字节跳动后端开发意向书.

3个月前头条正式批笔试4道编程题只AC了2道,然后被刷了做了200多道还是太菜了,本来对字节不抱太大希望,毕竟后台竞争太大,而且字节招客户端开发比较多。后来看到有散招免笔试,抱着试一试的心态投了,然而...

Redisson:Java程序员手中的“魔法锁”

Redisson:Java程序员手中的“魔法锁”在这个万物互联的时代,分布式系统已经成为主流。然而,随着系统的扩展,共享资源的争夺成为了一个棘手的问题。就比如你想在淘宝“秒杀”一款商品,却发现抢的人太...

【线上故障复盘】RPC 线程池被打满,1024个线程居然不够用?

1.故障背景昨天晚上,我刚到家里打开公司群,就看见群里有人讨论:线上环境出现大量RPC请求报错,异常原因:被线程池拒绝。虽然异常量很大,但是异常服务非核心服务,属于系统旁路,服务于数据核对任务,即使...

小红书取消大小周,有人不高兴了!

小红书宣布五一节假日之后,取消大小周,恢复为正常的双休,乍一看工作时长变少,按道理来说大家应该都会很开心,毕竟上班时间缩短了,但是还是有一些小红书的朋友高兴不起来,心情很复杂。因为没有了大小周,以前...

延迟任务的多种实现方案(延迟机制)

场景订单超时自动取消:延迟任务典型的使用场景是订单超时自动取消。功能精确的时间控制:延时任务的时间控制要尽量准确。可靠性:延时任务的处理要是可靠的,确保所有任务最终都能被执行。这通常要求延时任务的方案...

百度java面试真题(java面试题下载)

1、SpingBoot也有定时任务?是什么注解?在SpringBoot中使用定时任务主要有两种不同的方式,一个就是使用Spring中的@Scheduled注解,另一个则是使用第三方框架Q...

回归基础:访问 Kubernetes Pod(concurrent.futures访问数据库)

Kubernetes是一头巨大的野兽。在它开始有用之前,您需要了解许多概念。在这里,学习几种访问集群外pod的方法。Kubernetes是一头巨大的野兽。在它开始有用之前,您需要了解许多不同的...

Spring 缓存神器 @Cacheable:3 分钟学会优化高频数据访问

在互联网应用中,高频数据查询(如商品详情、用户信息)往往成为性能瓶颈。每次请求都触发数据库查询,不仅增加服务器压力,还会导致响应延迟。Spring框架提供的@Cacheable注解,就像给方法加了一...

取消回复欢迎 发表评论: