我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL中的ibdata1用法解读

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL中的ibdata1用法解读

MySQL的ibdata1用法

系统表空间是InnoDB数据字典、双写缓冲区、更改缓冲区和撤消日志的存储区域 。

如果表是在系统表空间中创建的,而不是在每个表文件或通用表空间中创建,则它还可能包含表和索引数据。

系统表空间可以有一个或多个数据文件。默认情况下,ibdata1会在数据目录中创建一个名为 的系统表空间数据文件 。系统表空间数据文件的大小和数量由innodb_data_file_path启动选项定义。

MySQL中的ibdata1用法解读

 ibdata1即Innodb data1的缩写,是innodb引擎的表空间,用于存放以下内容:

  • 数据字典Data dictionary:只读的表,存储对象的相关信息,如占用空间,列的缺省值,约束信息,用户名,权限,审计信息等;
  • 双写缓冲区 Double write buffer:Innodb写入数据默认是16k/pages为一个单位写入,而磁盘是4k/page一个单位,为了防止写入一半,断电无法恢复数据的情况发生,引入了double writer buffer机制;double write buffer是一段连续空间,大小2M(128 page),数据写入的时候先写到doublewrite空间,然后再写入到磁盘,如果发生写入了一个page一半的时候断电,恢复后会自动从doublewrite中恢复;
  • 插入缓冲区INSERT BUFFER:针对辅助索引(非unique),插入数据的时候,先将插入的数据在buffer中根据辅助索引叶子节点的Page_no排序,而后按照Page_no分批次插入,提高性能;
  • 回滚日志rollback segment: 用于存储未提交事物,便于用户rollback,当commit后,数据即被标记无效;
  • undo空间 用于存放undo 日志的;用于记录事物变更前的状态,如果未commit,其他session可以查看到变更前状态
  • 如果innodb_file_per_table=0,则Innodb的数据和索引也存储在ibdata中; (如果为1,则存储在表名相同的ibd和frm文件中); 如果表数据存储在ibdata中的话,那么删除表是不会释放空间;

mysql 默认配置使用 innodb 引擎 innodb_file_per_table 默认是关闭的 , 因此表空间默认建立在 ibdata1 上

MySQL中的ibdata1用法解读

1 、默认情况下 ibdata 存放 InnoDB 表( InnoDB 数据字典)元数据、 undo logs 、 the change buffer, and the doublewrite buffer

2 、如果 innodb_file_per_table=0( 默认 =1) ,则 ibdata 也存放 InnoDB 表的实际数据,也就是 InnoDB 表建立后,不会再有单独的 tablename.ibd 文件 , 如果是 innodb_file_per_table=1, 存放 在新的表的 ibd 文件当中

3 、 虽 然 InnoDB 表 元 数 据 通 过 information_schema.tables 来 读 取 , 但 是 实 际 上 information_schema 是一个虚拟数据库,并不物理存在,这些数据真正存放的地方就是 ibdata redo 是写在 ib_logfile 中的 , 不写在 ibdata 中。

导致ibdata1 增长很快的原因

数据库中运行有长事务,记录了大量的UNDO信息,从而导致了ibdata1持续增长。

可以通过show engine innodb status ;命令来查看。

MySQL中的ibdata1用法解读

mysql中并未提供如何查看ibdata1中的存储内容信息。可以使用工具 innochecksum 来看。

ibdata1是什么?

MySQL使用InnoDB引擎的时候,ibdata1这个文件会随着时间的增长,会变得越来越大,占据大量的磁盘空间。

那么,ibdata1里保存了哪些东西,为什么会变得越来越大呢,让我们开看看ibdata1的构造。

ibdata1是InnoDB的共有表空间,默认情况下会把表空间存放在一个文件ibdata1中,会造成这个文件越来越大。

发现问题所在之后,解决方法就是,使用独享表空间,将表空间分别单独存放。MySQL开启独享表空间的参数是Innodb_file_per_table,会为每个Innodb表创建一个.ibd的文件。

操作步骤

下面讲一下具体的操作。

1) 导出数据库中所有数据

# mysqldump -u root -p --all-database > /tmp/all-database.dump

2) 删除数据库中数据

# mysql -u root -p
mysql> drop database dbname;

3) 停止MySQL

# /etc/init.d/mysqld stop

4) 删除ibdata1文件(移动到/tmp下)

# mv /var/lib/mysql/ibdata1 /tmp
# mv /var/lib/mysql/ib_logfile0 /tmp
# mv /var/lib/mysql/ib_logfile1 /tmp

5) my.cnf设定

# vi /etc/my.cnf
开启独享表空间,并指定ibdata1大小为1G,ibdata2大小200M,自动扩张。
innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:1G;ibdata2:200M:autoextend
innodb_file_per_table

6) 启动MySQL

# /etc/init.d/mysqld start

7) 导入数据

# mysql -u root -p < /tmp/all-database.dump

8) 确认

后记

开启独享表空间后,并不是说就不需要ibdata1了,因为在ibdata1中还保存着下面这些数据。

  • InnoDB表的元数据
  • Buffer
  • UNDO日志

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL中的ibdata1用法解读

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL中的ibdata1用法解读

目录mysql的http://www.cppcns.comibdata1用法导致ibdata1 增长很快的原因ibwww.cppcns.comdata1是什么?总结MySQL的ibdata1用法系统表空间是InnoDB数据字典、双写缓冲区
2023-03-13

MySQL中的ibdata1怎么使用

本篇内容主要讲解“MySQL中的ibdata1怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL中的ibdata1怎么使用”吧!MySQL的ibdata1用法系统表空间是InnoD
2023-07-05

如何收缩/清除 MySQL 中的 ibdata1 文件?

ibdata1文件无法收缩,这是MySQL的一个特别麻烦的特性。如果删除所有数据库,删除文件并重新加载 mysqldump,则可以缩小 ibdata1 文件。我们可以配置 MySQL,以便将每个表(包括其索引)存储为单独的文件。从 MyS
2023-10-22

Python3中urlopen()的用法解读

这篇文章主要介绍了Python3中urlopen()的用法解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-14

Pytorch中的torch.nn.Linear()方法用法解读

torch.nn.Linear()方法是一种线性变换层,用于PyTorch中的神经网络,执行矩阵乘法,将输入特征映射到输出特征。其语法为:torch.nn.Linear(in_features,out_features,bias=True),其中in_features为输入特征数量,out_features为输出特征数量,bias是否使用偏置项。在正向传播中,它执行out=weight@input+bias;在反向传播中,计算权重梯度和偏置项梯度。该方法可以用于各种神经网络任务。
Pytorch中的torch.nn.Linear()方法用法解读
2024-04-02

Pycharm中的Python Console用法解读

这篇文章主要介绍了Pycharm中的Python Console用法解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-06

MySQL中delimiter关键字的使用解读

MySQL中的delimiter关键字用于指定查询语句的终止符,常用于批处理语句中。delimiter后接新终止符,新终止符可以是任一字符。delimiter常与批处理语句、存储过程、函数和触发器一起使用,可提高效率、增强可读性并简化管理。使用delimiter时需注意选择合适终止符、确保语句兼容性、避免使用关键字和正确关闭终止符。
MySQL中delimiter关键字的使用解读
2024-04-02

javascript中的some方法使用解读

这篇文章主要介绍了javascript中的some方法使用解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-16

vue中$refs的三种用法解读

这篇文章主要介绍了vue中$refs的三种用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-28

js中关于promise的用法解读

这篇文章主要介绍了js中关于promise的用法解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-06

mysql中共享读锁的方法

这篇文章给大家分享的是有关mysql中共享读锁的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、说明MyISAM表的读操作(添加读书锁)不会阻止其他过程对同一表的读操作,但会阻止同一表的写作操作。只有读锁释
2023-06-15

Android通过json向MySQL中读写数据的方法详解【读取篇】

本文实例讲述了Android通过json向MySQL中读取数据的方法。分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下:private void parseJsonMulti(Str
2022-06-06

编程热搜

目录