处理MySQL的ibdata1文件过大问题

本人在对数据库进行大量的数据插入和删除的时候,发现ibdata1的占了将近一个T

ibdata1文件是什么?

ibdata1是一个用来构建innodb系统表空间的文件,这个文件包含了innodb表的元数据、撤销记录、修改buffer和双写buffer。如果file-per-table选项打开的话,该文件则不一定包含所有表的数据。当innodb_file_per_table选项打开的话,新创建表的数据和索引则不会存在系统表空间中,而是存放在各自表的.ibd文件中.

显然这个文件会越来越大,innodb_autoextend_increment选项则指定了该文件每次自动增长的步进,默认是8M.

是什么原因导致ibdata1文件会越来越大?

ibdata1存放数据,索引和缓存等,是MYSQL的最主要的数据。所以随着数据库越来越大,表也会越大,这个无法避免的。如果时间长了,越来越大,我们在处理日志和空间的时候就不是那么方便了,就不知从何入手了。接下来我们就要处理下这样的情况,分库存储数据。

该如何处理呢?

首先我们把数据库文件备份下来,然后直接删除ibdata文件(为了保险起见最好先全备一次,做到数据安全和完整),然后再重新导入数据库文件即可!

具体操作步骤如下(截图并不完整,但是首先要弄懂大概情况和原理):

第一种方法:

1、停止业务,备份一次全库

mysqldump -uroot -ppassword --all-databases  > all_mysql.sql

2、备份完成,停止数据库

systemctl stop mariadb 或者 service mysqld stop

3、修改配置文件

在[mysqld]下增加下面配置 innodb_file_per_table=1 验证配置是否生效,可以重启mysql后,执行 #service mysqld restart

4、验证

mysql -uroot -ppassword mysql

show variables like '%per_table%';

+-----------------------+-------+

| Variable_name | Value |

+-----------------------+-------+

| innodb_file_per_table | ON |

+-----------------------+-------+

1 row in set (0.00 sec)

innodb_file_per_table的状态变为ON

5、删除ibdata1文件和日志

rm -rf ibdata1

rm -rf ib_logfile*

6、还原数据库

mysql -uuser -ppassword

source all_mysql.sql

数据文件单独存放(共享表空间改为每个表独立的表空间文件)。

第二种方法:

把数据库的表引擎为InnoDB 的数据表转为MyIsam 后,删除ibdata1,按上面方法修改成独立的表空间,在把改成MyIsam引擎的表改为InnoDB,这个就要衡量那种方法的时间耗时最短,两者取其优。数据的表和库很多的通常不建议这么做,耗时间。

ibdata1文件非常大如何解决,ibdata单独存储

启用独立表空间innodb_file_per_table(如果这个参数没有开启,mysql会将数据、索引、元数据都存入到ibdata中的) 数据表 表索引 MVCC(多版本并发控制)数据 回滚段 撤销表空间 表元数据,都写入到了ibdata1文件中。

show variables like '%per_table'; 查看innode_file_per_table 参数的状态

想要将共享表空间转化为独立表空间有两种方法:
    1.先逻辑备份,然后修改配置文件my.cnf中的参数innodb_file_per_table参数为1,重启服务后将逻辑备份导入即可。
    2.修改配置文件my.cnf中的参数innodb_file_per_table参数为1,重启服务后将需要修改的所有innodb表都执行一遍:alter table table_name engine=innodb;

使用第二种方式修改后,原来库中的表中的数据会继续存放于ibdata1中,新建的表才会使用独立表空间

1 简介
    Innodb存储引擎可将所有数据存放于ibdata*的共享表空间,也可将每张表存放于独立的.ibd文件的独立表空间。
    共享表空间以及独立表空间都是针对数据的存储方式而言的。
    共享表空间:  某一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在data目录下。 默认的文件名为:ibdata1  初始化为10M。
    独立表空间:  每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有一个.ibd文件。 其中这个文件包括了单独一个表的数据内容以及索引内容,默认情况下它的存储位置也是在表的位置之中。
2 二者优缺点
    2.1 共享表空间:

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

Command-Line Format --innodb_file_per_table
System Variable Name innodb_file_per_table
Variable Scope Global
Dynamic Variable Yes
Permitted Values (<= 5.6.5) Type boolean
Default OFF
Permitted Values (>= 5.6.6) Type boolean
Default ON

    3.2 参数功能
    该参数在mysql5.6.6及其后续版本默认开启,开启该参数的时候,Innodb将每个新创建的表的数据及索引存储在一个独立的.ibd文件里,而不是系统的表空间。当这些innodb表被删除或清空的时候,存储空间会被回收。
    开启innodb_file_per_table,在ALTER TABLE操作重建表的情况下,会将innodb表从系统共享表空间移动到独立的.ibd文件。
    不开启innodb_file_per_table,innodb会将所有表及索引的数据存储在构成系统表空间的ibdata文件。这样会降低文件系统操作的性能开销,例如DROP TABLE 或 TRUNCATE TABLE。它最适合于将整合磁盘都用于存储mysql数据的情况,因为系统表空间不会收缩,所有的数据库都在一个空间实例里面。当innodb_file_per_table=OFF的时候,应避免在空间受限的系统表空间里导入大量临时数据。
    innodb_file_per_table 可通过SET GLOBAL动态的修改为ON或OFF,也可以在my.cnf中做永久性修改,在my.cnf中修改后生效的话需要重启mysqld服务。
[plain] view plain copy

  1. mysql> set global innodb_file_per_table =ON;
  2. mysql> show variables like '%per_table%';
  3. +-----------------------+-------+
  4. | Variable_name         | Value |
  5. +-----------------------+-------+
  6. | innodb_file_per_table | ON    |
  7. +-----------------------+-------+

注:动态修改后仅对后续操作生效,如原来为共享表空间,动态修改为独立表空间后仅新建的表为独立表空间。
4 innodb共享表空间转化为独立表空间
    查看当前表空间情况:
[plain] view plain copy

  1. mysql> show variables like '%per_table';
  2. +-----------------------+-------+
  3. | Variable_name         | Value |
  4. +-----------------------+-------+
  5. | innodb_file_per_table | OFF   |
  6. +-----------------------+-------+

表示当前是共享表空间。

想要将共享表空间转化为独立表空间有两种方法:
    1.先逻辑备份,然后修改配置文件my.cnf中的参数innodb_file_per_table参数为1,重启服务后将逻辑备份导入即可。
    2.修改配置文件my.cnf中的参数innodb_file_per_table参数为1,重启服务后将需要修改的所有innodb表都执行一遍:alter table table_name engine=innodb;

使用第二种方式修改后,原来库中的表中的数据会继续存放于ibdata1中,新建的表才会使用独立表空间

ibdata1文件过大问题相关推荐

  1. mysql表空间过大_详解MySQL表空间以及ibdata1文件过大问题

    ibdata1文件过大 原因分析 ibdata1是一个用来构建innodb系统表空间的文件,关于系统表空间详细介绍参考MySQL官网文档 上面是一个数据库的ibdata1文件,达到了780多G,而且还 ...

  2. mysql ibdata1 解析_详解MySQL表空间以及ibdata1文件过大问题

    ibdata1文件过大 原因分析 ibdata1是一个用来构建innodb系统表空间的文件,关于系统表空间详细介绍参考MySQL官网文档 上面是一个数据库的ibdata1文件,达到了780多G,而且还 ...

  3. mysql ibdata1 压缩_MySQL ibdata1文件太大的解决办法

    在MySQL数据库中,如果不指定innodb_file_per_table=1参数单独保存每个表的数据,MySQL的数据都会存放在ibdata1文件里,时间久了这个文件就会变的非常大. 下面是参考网上 ...

  4. mysql data ibdata1_database - 如何在MySQL中收缩/清除ibdata1文件

    database - 如何在MySQL中收缩/清除ibdata1文件 我在localhost中使用MySQL作为在R中执行统计的"查询工具",也就是说,每次运行R脚本时,我创建一个 ...

  5. mysql ibdata作用_mysql data文件夹下ibdata1 文件作用

    ibdata1这个文件超级大, 查了一下, 大概的作用如下 是储存的格式 INNODB类型数据状态下, ibdata用来储存文件的数据 而库名的文件夹里面的那些表文件只是结构而已 由于mysql4.1 ...

  6. mysql data文件夹下的ibdata1 文件作用

    这个文件超级大, 查了一下, 大概的作用如下 是储存的格式 INNODB类型数据状态下, ibdata用来储存文件的数据 而库名的文件夹里面的那些表文件只是结构而已 由于mysql4.1默认试inno ...

  7. mysql里的ibdata1文件

    mysql大多数磁盘空间被 InnoDB 的共享表空间 ibdata1 使用.而你已经启用了 innodb_file_per_table,所以问题是: ibdata1存了什么? 当你启用了innodb ...

  8. 释放mysql ibdata1文件_释放MySQL ibdata1文件的空间

    在MySQL数据库中,如果不指定innodb_file_per_table参数,单独存在每个表的数据,MySQL的数据都会存放在ibdata1文件. mysql ibdata1存放数据,索引等,是MY ...

  9. mysql 5.6 ibdata1_mysql 里的 ibdata1 文件不断的增长?

    我们在 Percona 支持栏目经常收到关于 MySQL 的 ibdata1 文件的这个问题.当监控服务器发送一个关于 MySQL 服务器存储的报警时,恐慌就开始了 -- 就是说磁盘快要满了.一番调查 ...

最新文章

  1. java Windows7 下环境变量设置
  2. Hazelcast分布式
  3. 成功解决D8016“/ZI”和“/Gy-”命令行选项不兼容
  4. 10.31NOIP模拟赛解题报告
  5. net MVC 重定向总结
  6. oracle 日志 安全审计,等保测评2.0:Oracle安全审计(下)
  7. 游戏制造商Atari与去中心化游戏平台Enjin达成合作
  8. C++还有前景吗?做服务器这一块可以吗?
  9. CRC全套~~~ 转载
  10. 《Fortran95程序设计》(彭国伦)
  11. VS2010/MFC编程入门系列教程
  12. 集线器、交换机和网桥三者有什么区别
  13. 087 定积分求面积应用习题
  14. 从学员角度体验教练技术之考驾照
  15. 资料1:中小企业局势分析
  16. 上午写了一段代码,下午就被开除了。。。
  17. java 游标 查数据_Java中的大量数据查询
  18. 从头认识Spring-1.14 SpEl表达式(3)-SpEl表达式的两个坑:Bean的顺序与Bean的toString方法
  19. unzip:unzip解压文件到指定目录
  20. 如何安装OCSNG及GLPI

热门文章

  1. ai换脸h5换脸技术php,H5换脸视频背后的京东云技术十几秒内处理数万个换脸任务_联商网...
  2. oracle字体为红色,ORACLE 显示 中文字体
  3. mysql联合索引的使用
  4. os.listdir如何排序
  5. Codeforces Round #530 (Div. 1) C. Construct a tree 想法
  6. html获取数组最小值,javascript如何获取数组长度?
  7. 爬虫第二式:猫眼电影前100排行榜
  8. js求时间差 计算 天 小时 分钟
  9. 解决xshell上传文件速度为0的方法
  10. HR招聘_(三)_招聘方法论(招聘途径及流程)