最近发现MYSQL 的碎片狂大,在一张有上千万的表空间里面碎片占用十分厉害,但是单独的用alert table table_name engine=innodb 基本无法执行,因为表实在是过大,ALERT方法适合一些中小型的数据库。所以最后的办法就是导入导出的步骤
mysql ibdata1存放数据,索引等,是MYSQL的最主要的数据。
如果不把数据分开存放的话,这个文件的大小很容易就上了G,甚至10+G。对于某些应用来说,并不是太合适。因此要把此文件缩小。
方法:数据文件单独存放。
步骤:
1,备份数据库
从命令行进入MySQL Server 5.0\bin
备份全部数据库,执行命令mysqldump -q -uusername -pyourpassword --add-drop-table -all-databases > /all.sql
做完此步后,停止数据库服务。
2,修改mysql配置文件
修改my.ini文件,增加下面配置
innodb_file_per_table
对每张表使用单独的innoDB文件, 修改/etc/my.cnf文件
3,删除原数据文件
删除原来的ibdata1文件及日志文件ib_logfile*,删除data目录下的应用数据库文件夹(mysql文件夹不要删)
4,还原数据库
启动数据库服务
从命令行进入MySQL Server 5.0\bin
还原全部数据库,执行命令mysql -uusername -pyourpassword < /all.sql
经过以上几步后,可以看到新的ibdata1文件就只有几十M了,数据及索引都变成了针对单个表的小ibd文件了,它们在相应数据库的文件夹下面。
关于innodb_file_per_table
使用过MySQL的同学,刚开始接触最多的莫过于MyISAM表引擎了,这种引擎的数据库会分别创建三个文件:表结构、表索引、表数据空间。我们可以将某个数据库目录直接迁移到其他数据库也可以正常工作。然而当你使用InnoDB的时候,一切都变了。
InnoDB 默认会将所有的数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1,这样就感觉不爽,增删数据库的时候,ibdata1文件不会自动收缩,单个数据库的备份也将成为问题。通常只能将数据使用mysqldump 导出,然后再导入解决这个问题。
在MySQL的配置文件[mysqld]部分,增加innodb_file_per_table参数。
可以修改InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间。
独立表空间:
优点:
1. 每个表都有自已独立的表空间。
2. 每个表的数据和索引都会存在自已的表空间中。
3. 可以实现单表在不同的数据库中移动。
4. 空间可以回收(除drop table操作处,表空不能自已回收)
a) Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:alter table TableName engine=innodb;回缩不用的空间。
b) 对于使innodb-plugin的Innodb使用turncate table也会使空间收缩。
c) 对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。
缺点:
单表增加过大,如超过100个G。
结论:
共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整一 下:innodb_open_files 。
InnoDB Hot Backup(冷备)的表空间cp不会面对很多无用的copy了。而且利用innodb hot backup及表空间的管理命令可以实现单现移动。
1.innodb_file_per_table设置.开启方法:
在my.cnf中[mysqld]下设置
innodb_file_per_table=1
2.查看是否开启:
mysql> show variables like ‘%per_table%’;
3.关闭独享表空间
innodb_file_per_table=0关闭独立的表空间
mysql> show variables like ‘%per_table%’;
分享到:
相关推荐
MYSQL数据库碎片恢复工具,已经完工。专门针对MYSQL的ibdata1 引擎 编写,支持MYSQL 3 4 5 6版本,任意平台的IBDATA文件恢复。支持误删除 ,所在分区被格式化,支持黑客故意破坏等情况,自动侦测半页。提取合成。
当MySQL服务尝试启动时,如果`ibdata1`文件损坏,它将无法正常完成初始化过程,从而导致服务立即关闭。从给出的错误日志中,我们可以看到一些关键信息: 1. 错误日志显示MySQL尝试启动并加载InnoDB存储引擎。 2. 在...
MYSQL数据库碎片恢复工具,已经完工。专门针对MYSQL的ibdata1 引擎 编写,支持MYSQL 3 4 5 6版本,任意平台的IBDATA文件恢复。支持误删除 ,所在分区被格式化,支持黑客故意破坏等情况,自动侦测半页。提取合成
MySQL的InnoDB存储引擎在处理大量数据时,其系统表空间文件`ibdata1`往往会变得非常庞大,占据了大量硬盘空间。本篇文章将全面解析如何对InnoDB进行扩容以及如何瘦身`ibdata1`文件。 ### InnoDB扩容 扩容InnoDB表...
标题“mysql Unable to lock ./ibdata1, error: 11”所反映的问题是MySQL数据库在运行过程中遇到了一个常见的错误,提示无法锁定数据文件`ibdata1`,错误代码11。这个错误通常与数据库的表空间管理、并发操作或者...
这个问题通常表明MySQL的InnoDB存储引擎无法获取对`ibdata1`文件的锁,`ibdata1`是InnoDB用来存储数据和系统表空间的文件。这个错误可能是由于多种原因导致的,包括但不限于以下几点: 1. **另一个mysqld进程正在...
ibdata1文件是什么? ibdata1是一个用来构建innodb系统表空间的文件,这个文件包含了innodb表的元数据、撤销记录、修改buffer和双写buffer。如果file-per-table选项打开的话,该文件则不一定包含所有表的数据。当...
ibdata1-recover-for-mysql ibdata1 还原数据库 ibdata1 还原表结构
3. 将备份的原始数据库文件中的所有 .frm 文件(保持原来的目录结构)和 ibdata1 文件复制到新服务器的数据库文件目录中。 4. 使用 -innodb_force_recovery=6 参数启动数据库服务器进程:/etc/init.d/mysqld start -...
MySQL数据库的InnoDB存储引擎使用一个名为`ibdata1`的数据文件来存储表数据和索引,以及系统表空间信息。当这个文件被意外删除时,可能会引发严重的数据丢失问题,尤其是在没有最近备份的情况下。然而,如果MySQL...
ibdata1文件是Mysql数据库的真实数据存放文件,错误的ibdata1文件将导致ERROR 1146错误的出现。解决方法是删除ibdata1文件,然后重新生成正确的ibdata1文件。 InnoDB存储引擎的配置 InnoDB存储引擎是Mysql数据库中...
1. ibdata1:这是InnoDB存储引擎的数据文件,包含InnoDB表的数据和索引。 2. *.frm:表结构文件,存储了表的定义信息。 3. *.ibd:InnoDB表的独立数据文件,从MySQL 5.6开始引入,用于存储用户数据。 4. *.myd:...
- **ibdata1、.ibd文件**:默认存放于MySQL安装目录下的data文件夹内。例如,如果MySQL安装在C盘的Program Files目录下,那么这些文件可能位于: ``` C:\Program Files\MySQL\MySQL Server 5.1\data ``` 值得...
数据日志文件,如`ibdata1`和`ib_logfile*`,存储了数据库的实际数据和事务日志。如果这些文件损坏,可能导致无法启动MySQL服务。在这种情况下,备份用户数据后,替换这些文件可能会解决问题,但请注意,这可能会...
可是,有些时候这样不行,查询的时候会出现某某表不存在的问题,在确认.frm ,db.opt 文件完整的情况下,那么这种表使用的应该是innodb表引擎,应该将数据目录中的innodb数据文件(默认ibdata1) 也一并复制过来。...