ibdata1文件过大

原因分析

ibdata1是一个用来构建innodb系统表空间的文件,关于系统表空间详细介绍参考MySQL官网文档

上面是一个数据库的ibdata1文件,达到了780多G,而且还在不断增长。

这个文件包含了innodb数据字典、修改buffer和双写buffer、撤销日志,还包含在用户在系统表空间创建的表信息和索引数据。

显然,由于所有表的数据索引和缓存都存在这个文件中,随着数据库的不断增大,这个文件肯定会越来越大的。

解决方法

和系统表空间(也称作共享表空间)对应,MySQL提供了另外一种存储文件的方式:独立表空间。

独立表空间模式下,每个innodb表都有自己独立的表空间文件(.ibd文件),存储各种表的索引和数据。

通过配置项:innodb_file_per_table指定MySQL使用独立表空间,MySQL5.6.6以后的版本默认值是ON。MySQL5.6.5以前的版本默认值是OFF。

解决ibdata1文件过大具体操作步骤

如果当前MySQL使用系统表空间的模式,是无法在开启数据库的情况下进行切换到共享表空间的。必须关闭MySQL重建数据结构。步骤如下:

备份数据库

使用mysqldump备份所有InnoDB数据表,包括MySQL的系统表。

使用下面的命令可以参考当前系统表:

SELECT TABLE_NAME from INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='mysql' and ENGINE='InnoDB';

MySQL5.6中包含五张系统表:

innodb_index_stats

innodb_table_stats

slave_master_info

slave_relay_log_info

slave_worker_info

如果数据库只用了InnoDB表,可以直接备份所有数据库。

mysqldump -h localhost -uroot -pxxxxx –all-databases > dump.sql

关闭MySQL服务

使用mysqld_safe关闭MySQL服务。

mysqladmin -uroot -pxxxxx shutdown

删除现有数据库文件

首先需要删除当前存在的所有表空间文件(.idb),包括ibdata1和ib_log文件,以及数据库自带的.idb文件。

然后需要删除所有的表结构描述文件:*.frm。位于数据库名称相应的文件夹下。

修改配置文件

在数据库配置文件my.cnf中的[mysqld]下添加innodb_file_per_table=1配置。

[mysqld]

innodb_file_per_table=1

重新启动服务器并导入数据

最后使用新的配置文件重新启动mysql服务。

mysqld_safe --defaults-file=/your/config/path/my.cnf &

然后导入mysaldump备份的数据

# 登录进入mysql

mysql -hlocalhost -uroot -pxxxxx database_name

# 导入数据

source /your/backup/file/path/dump.sql

独立表空间的优点

刚开始建立数据库时,就推荐使用独立表空间,MySQL5.6.6以后的版本默认是独立表空间。

使用独立表空间很显然能够提高存储效率,拆分表和表之间的耦合,将对数据库的操作粒度降低到表级别。

独立表空间对于存储优化,迁移,备份,恢复和监控来说,都更加灵活和强大。下面列举一些代表性的好处:

truncate和drop表时会释放掉磁盘空间,共享表空间并不会释放而是在ibdata1中开辟新的空间

truncate table时速度更快

可以将表放在不同的磁盘上(用于I/O优化等),共享表空间必须所有表都反正ibdata1中

可以对每个表使用OPTIMIZE TABLE命令进行优化和重建,回收未使用的空间

可以移动单个表,或者将单个表从一个实例复制到另外一个实例

使用Barracuda文件格式,至此压缩和动态行等功能

使用动态行(dynamic row format)可以使得存储大型BLOB和TEXT格式数据更高效

当文件损坏时,提高成功恢复机会,节省服务器重启或备份的时间

当然独立表空间也有一些潜在的缺点:

由于每个表都存在为使用的空间,这些空间只能同一个表使用,可能会造成空间浪费

fsync操作必须在每个打开的表上运行

mysqld必须为每个表保留一个打开的文件句柄,如果表过多,可能会影响性能

在删除表空间的文件时会扫描缓冲池,如果缓冲池达到几十G,则需要几秒的时间,而扫描会造成锁,可能会延迟其他操作

如果许多表正在增长,可能会存在更多的碎片,这回妨碍删除表和扫描表的性能。

原文出处:https://www.cnblogs.com/youyoui/p/10554229.html

mysql表空间过大_详解MySQL表空间以及ibdata1文件过大问题相关推荐

  1. mysql如何进行压测_详解MySQL如何按表创建千万级的压测数据

    有时我们要对系统做压测,或者数据库压力测试,这时候需要对某些表插入几百万或者上千万数据,下面介绍下怎么利用MySQL循环和存储过程对特定表的创建千万行数据. 1. 准备测试表 CREATE TABLE ...

  2. mysql影响行数解析_详解MySQL的数据行和行溢出机制

    一.行 有哪些格式? 你可以像下面这样看一下你的mysql行格式设置. 其实mysql的数据行有两种格式,一种就是图中的 compact格式,还有一种是redundant格式. compact是一种紧 ...

  3. mysql如何查看事务日记_详解 Mysql 事务和Mysql 日志

    事务特性 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节. 2.一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破 ...

  4. mysql分区表truncate分区数据_详解MySQL分区表

    前言: 分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表.但是对于应用程序来讲,分区的表和没有分区的表是一样的.换句话来讲,分区对于应用是透明的,只是数据库对于数据的重新整理 ...

  5. mysql表分区数量限制_详解MySQL分区表的局限和限制的代码实例

    本文对Mysql分区表的局限性做了一些总结,因为个人能力以及测试环境的 原因,有可能有错误的地方,还请大家看到能及时指出,当然有兴趣的朋友可以去官方网站查阅. 禁止构建 分区表达式不支持以下几种构建: ...

  6. mysql外键约束案例_详解MySQL中的外键约束问题

    使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建.检索.更新和删除等操作都是些比较简单的过程 .理论上,只要掌握了最常见的SQL语句的用法,并熟悉您选择使用的服务 ...

  7. mysql 显示前三项_详解MySQL三项实用开发知识

    其实项目应用的瓶颈还是在db端,在只有少量数据及极少并发的情况下,并不需要多少的技巧就可以得到我们想要的结果,但是当数据量达到一定量级的时 候,程序的每一个细节,数据库的设计都会影响到系统的性能.这里 ...

  8. mysql内连接部门平均值_详解MySql基本查询、连接查询、子查询、正则表达查询_MySQL...

    查询数据指从数据库中获取所需要的数据.查询数据是数据库操作中最常用,也是最重要的操作.用户可以根据自己对数据的需求,使用不同的查询方式.通过不同的查询方式,可以获得不同的数据.MySQL中是使用SEL ...

  9. mysql查询男生基本情况_详解MySql基本查询、连接查询、子查询、正则表达查询...

    select * from STUDENT; 2.2.按条件查询 (1) 比较运算符 > , < ,= , != (< >),>= , <= select * fr ...

最新文章

  1. 三、6Gbps SAS冲锋队——Cheetah 15K.7、NS.2
  2. Oracle 根据字符串的长度排序
  3. @RequestMapping报404错误问题解决
  4. (三)通用视图(generic views)
  5. 固定资产打开提示:上年度数据未结转!
  6. 元素不包括_干货 | FDA法规对元素杂质的限度控制及计算方法
  7. 计算机二级链表,计算机二级c语言上机考试——结构体与链表(3页)-原创力文档...
  8. python就业有哪些方向_Python就业有哪些方向?最全信息在这里!
  9. 阿里前 vs 来阿里后,阿里人的真实写照!
  10. ffmpeg转码cpu很高,ffmpeg实现GPU(硬编码)加速转码,解决ffmpeg转码速度慢
  11. AI创作现状与未来发展浅析
  12. magisk卸载内置软件_安卓刷XP框架 手机通用通用(Magisk+Riru+EdXposed)
  13. 网络监测用计算机安全管理制度,计算机信息网络安全管理制度
  14. lisp调用布置天正的图块_为啥天正电气图块插到原建筑条件图里显示特别小,高手指点下哈!...
  15. word插入漂亮的代码块
  16. 物理量与单位符号的书写标准
  17. 线程类的一些常用方法
  18. mysql数据库算法_MySql联接算法
  19. 性能优化--JS、CSS压缩合并
  20. Android开机画面定制

热门文章

  1. Win11延迟高怎么办?Win11延迟高的解决方法
  2. din字体是开源字体吗_12款免费开源英文字体
  3. java开发cms视频教程下载地址_Java + MySQL 开发CMS系统实例教程
  4. 统计匹配检索规则的物品数量
  5. 洛谷——P1876 开灯
  6. Angualr 输入文本框监听enter回车键和esc键方法使用(附常用的键盘事件对应的键码)
  7. git之配置在Terminal显示git分支
  8. 【转】模块(configparser+shutil+logging)
  9. centos6.5搭建lnmp过程
  10. 永川机器人五小区_永川清掏化粪池报价---蚂众蚁