MySql ibdata1文件瘦身

原文地址:MySql ibdata1文件太大如何缩小

MySql innodb如果是共享表空间,ibdata1文件越来越大,达到了30多个G,对一些没用的表进行清空:
truncate table xxx;
然后optimize table xxx; 没有效果
因为对共享表空间不起作用。
mysql ibdata1存放数据,索引等,是MYSQL的最主要的数据。
如果不把数据分开存放的话,这个文件的大小很容易就上了G,甚至几十G。对于某些应用来说,并不是太合适。因此要把此文件缩小。
无法自动收缩,必须数据导出,删除ibdata1,然后数据导入,比较麻烦,因此需要改为每个表单独的文件。
解决方法:数据文件单独存放(共享表空间如何改为每个表独立的表空间文件)。
步骤如下:

1)备份数据库
备份全部数据库,执行命令

#mysqldump -q -uroot -ppassword --add-drop-table --all-databases >/home/backup/all.sql

做完此步后,停止数据库服务。

#service mysqld stop

2)找到my.ini或my.cnf文件
linux下执行

# /usr/libexec/mysqld --verbose --help | grep -A 1 'Default options'
Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf 

在里面查找Default options,可以看到查找my.ini的顺序,以找到真实目录

3)修改mysql配置文件
打开my.ini或my.cnf文件
[mysqld]下增加下面配置

innodb_file_per_table=1

验证配置是否生效,可以重启mysql后,执行

#service mysqld restart
#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

4)删除原数据文件
删除原来的ibdata1文件及日志文件ib_logfile*,删除/var/lib/mysql目录下的应用数据库文件夹(mysql文件夹不要删)

5)还原数据库
启动数据库服务
从命令行进入MySQL Server
还原全部数据库,执行命令

#service mysqld start
#mysql -uroot -pocs < /home/backup/all.sql 

经过以上几步后,可以看到新的ibdata1文件就只有几十M了,数据及索引都变成了针对单个表的小ibd文件了,它们在相应数据库的文件夹下面。

# ll
total 295028
drwx------  2 mysql mysql     36864 Apr 22 14:16 glpi
drwx------  2 mysql mysql     36864 Feb 15 13:45 glpi-1
-rw-rw----  1 mysql mysql  10485760 Apr 22 14:27 ibdata1
-rw-rw----. 1 mysql mysql 270532608 Apr 22 14:14 ibdata1-1
-rw-rw----  1 mysql mysql   5242880 Apr 22 14:27 ib_logfile0
-rw-rw----. 1 mysql mysql   5242880 Apr 22 14:14 ib_logfile0_bak
-rw-rw----  1 mysql mysql   5242880 Apr 22 14:28 ib_logfile1
-rw-rw----. 1 mysql mysql   5242880 Apr 21 22:50 ib_logfile1_bak
drwx------  2 mysql mysql      4096 Apr 22 14:16 mrbs
drwx------  2 mysql mysql      4096 Apr 14 12:05 mrbs-1
drwx------. 2 mysql mysql      4096 Apr 22 14:16 mysql
srwxrwxrwx  1 mysql mysql         0 Apr 22 14:16 mysql.sock
drwx------  2 mysql mysql     12288 Apr 22 14:16 ocsweb
drwx------  2 mysql mysql     12288 Nov 16  2011 ocsweb-1

# ll mrbs
total 808
-rw-rw---- 1 mysql mysql     61 Apr 22 14:16 db.opt
-rw-rw---- 1 mysql mysql  10492 Apr 22 14:16 mrbs_area.frm
-rw-rw---- 1 mysql mysql  98304 Apr 22 14:16 mrbs_area.ibd
-rw-rw---- 1 mysql mysql   9264 Apr 22 14:16 mrbs_entry.frm
-rw-rw---- 1 mysql mysql 131072 Apr 22 14:16 mrbs_entry.ibd
-rw-rw---- 1 mysql mysql   9442 Apr 22 14:16 mrbs_repeat.frm
-rw-rw---- 1 mysql mysql  98304 Apr 22 14:16 mrbs_repeat.ibd
-rw-rw---- 1 mysql mysql   8888 Apr 22 14:16 mrbs_room.frm
-rw-rw---- 1 mysql mysql 114688 Apr 22 14:16 mrbs_room.ibd
-rw-rw---- 1 mysql mysql   8688 Apr 22 14:16 mrbs_users.frm
-rw-rw---- 1 mysql mysql  98304 Apr 22 14:16 mrbs_users.ibd
-rw-rw---- 1 mysql mysql   8658 Apr 22 14:16 mrbs_variables.frm
-rw-rw---- 1 mysql mysql  98304 Apr 22 14:16 mrbs_variables.ibd
-rw-rw---- 1 mysql mysql   8738 Apr 22 14:16 mrbs_zoneinfo.frm
-rw-rw---- 1 mysql mysql  98304 Apr 22 14:16 mrbs_zoneinfo.ibd

# ll mrbs-1
total 88
-rw-rw---- 1 mysql mysql    61 Apr 14 12:05 db.opt
-rw-rw---- 1 mysql mysql 10492 Apr 14 12:05 mrbs_area.frm
-rw-rw---- 1 mysql mysql  9264 Apr 14 12:05 mrbs_entry.frm
-rw-rw---- 1 mysql mysql  9442 Apr 14 12:05 mrbs_repeat.frm
-rw-rw---- 1 mysql mysql  8888 Apr 14 12:05 mrbs_room.frm
-rw-rw---- 1 mysql mysql  8688 Apr 14 12:05 mrbs_users.frm
-rw-rw---- 1 mysql mysql  8658 Apr 14 12:05 mrbs_variables.frm
-rw-rw---- 1 mysql mysql  8738 Apr 14 12:05 mrbs_zoneinfo.frm
时间: 2024-09-27 22:55:38

MySql ibdata1文件瘦身的相关文章

MySQL的InnoDB扩容及ibdata1文件瘦身方案完全解析_Mysql

mysql的innodb扩容为了添加一个数据文件到表空间中,首先要关闭 MySQL 数据库,编辑 my.cnf 文件,确认innodb ibdata文件的实际情况和my.cnf的配置是否一致,这里有两种情况: 1.my.cnf的配置 innodb_data_file_path=ibdata1:10G;ibdata2:10G:autoextend 如果当前数据库正在使用ibdata1,或者使用ibdata2,但ibdata2没有超过10G,则对my.cnf配置直接改成: innodb_data_f

mysql ibdata1文件太大,沾满磁盘空间,再有数据往里写的时候怎么处理。?菜鸟求解决!

问题描述 mysql ibdata1文件太大,沾满磁盘空间,再有数据往里写的时候怎么处理.?菜鸟求解决! 前两天遇到mysql ibdata1文件太大,沾满磁盘空间的问题,本人是卸载然后停服务器,再删除那几个文件的处理.如果项目上线,出现这种情况,再有数据往里写的时候怎么处理.?菜鸟求解决!

XP系统之怎样快速给图片文件瘦身

  在初始在相机拍摄的照片的尺寸,如图所示. 右键点击图片,并选打开--打开方式--画图. 在画图程序中,先选文件--另存为. 在文件名处键入新的文件名,或者覆盖原文件.这里选键入新的文件名:A1,以作保存后的比较. 如图所示,图片的格式和像素都没有变,只是图片的容量改变了. 应用:在有些时候,需要保持图片的像素却又要改变图片容量的时候可以用这个简便又实用的方法.

Javascript优化技巧(文件瘦身篇)_javascript技巧

最近一直在研究 Javascript 相关的技术.在<Javascript 高级程序设计>有篇章节着重阐述了优化 Javascript 代码的重要性.相信有很多的 Javascript 开发人员在开发的同时或多或少的会接触到此类的问题. 在大部分情况下,代码的优化并不是实际开发中所需要着重的部分.但是一旦代码完成了以后,开发者总是期待自己的代码能够越短越高效越好.结合从书中获得的知识以及本人实际开发过程中的经验,下面说明本人所采取的一些花招(也算是照本宣科一下). 前言 相比脚本语言,编译型的

ibdata1文件非常大如何解决

分析: 可能启用了共享表空间 改变方法:启用独立表空间innodb_file_per_table(如果这个参数没有开启,mysql会将数据.索引.元数据都存入到ibdata中的)数据表 表索引MVCC(多版本并发控制)数据回滚段撤销表空间表元数据,都写入到了ibdata1文件中.1):mysqldump的所有数据库到一个SQL文本文件 mysqldump -S /tm/mysql3376.sock --master-data=2 --single-transaction -A >ALL-2016

解决MySQL数据库目录ibdata1文件占用空间大问题

经常使用MySQL并启用了InnoDB引擎的时候,会发现数据库相应目录下,ibdata1这个文件会越来越大,并且即便删除表中数据也无法减小其空间占用.所以,接下来的配置就是为了解决这个问题. 1.先停止所有访问数据库的服务: 2.导出数据文件: mysqldump -u root -p dbname| gzip > dbname.sql.gz 该命令会将数据库压缩导出,会慢点,如果你数据库并不大的话,可以不用压缩,那么就是: mysqldump -u root -p dbname > dbna

C盘哪些文件可以删除?Windows 7系统C盘瘦身三大方法介绍

C盘哪些文件可以删除?实际上如果只是单纯的清理垃圾并不能整理出多少空间,而通过Win7系统C盘瘦身三大方法操作之后,磁盘空间起码可以空出10G的空间,具体操作过程请看下文. 一.删除HIBERFIL.SYS休眠文件: 1.打开开始菜单-附件-在命令提示符上右键,选择以管理员身份运行: 2.在打开的窗口中输入:powercfg -h off,关闭了休眠功能,HIBERFIL.SYS文件也被自动删除了. 注:恢复休眠功能则输入:powercfg -h on,就可以恢复休眠功能. 二.关闭或转移虚拟内

为什么 mysql 里的 ibdata1 文件不断的增长?

ibdata1 file 我们在 Percona 支持栏目经常收到关于 MySQL 的 ibdata1 文件的这个问题. 当监控服务器发送一个关于 MySQL 服务器存储的报警时,恐慌就开始了 -- 就是说磁盘快要满了. 一番调查后你意识到大多数地盘空间被 InnoDB 的共享表空间 ibdata1 使用.而你已经启用了 innodb_file_per_table,所以问题是: ibdata1存了什么? 当你启用了 innodb_file_per_table,表被存储在他们自己的表空间里,但是共

不删除文件,Vista系统安全瘦身新法

用过http://www.aliyun.com/zixun/aggregation/15470.html">Vista优化大师内置瘦身功能的朋友都知道,其原理是删除一些无用的驱动文件,来进行瘦身,现在,一位朋友选择了压缩而不是删除,效果也是相当的好哇. 该朋友的系统为Vista SP1 64位系统Ultimate 版,仅装了几个常用的软件,可单 windows 文件夹就有16 G,太大了 . 就想了个不删文件也对Vista系统瘦身的办法,方法就是压缩C:\Windows\System32\