`

mysql ibdata 分开

 
阅读更多

 

转载地址 http://deeplyloving.iteye.com/blog/1542234

不知道为什么 innodb_file_per_table  没有设置成innodb的默认配置

 

共享表空间不会收缩! ibdata1 只会一个劲的增长。对于一台服务器上面n个库而且存在库的删除的情况就郁闷了。

 

 

mysql ibdata1存放数据,索引等,是MYSQL的最主要的数据。

这个文件的大小很容易就上了G。因此要把此文件缩小。数据文件单独存放。

 

先备份所有库

备份全部数据库,执行命令mysqldump -q -uusername -pyourpassword --add-drop-table -all-databases > /all.sql

 

修改my.ini文件,增加下面配置

innodb_file_per_table

 

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

 

 

还原数据库

执行命令mysql -uusername -pyourpassword < /all.sql

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

 

 

共享表空间:

优点:

可以放表空间分成多个文件存放到各个磁盘上(表空间文件大小不受表大小的限制,如一个表可以分布在不同步的文件上)。数据和文件放在一起方便管理。

缺点:

所有的数据和索引存放到一个文件中以为着将有一个很常大的文件,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日值系统这类应用最不适合用共享表空间。

我们知道共享表空间管理会出现表空间分配后不能回缩的问题,当出现临时建索引或是创建一个临时表的操作表空间扩大后,就是删除相关的表也没办法回缩 那部分空间了。我们存在磁盘监控时,也许就报警不断了,但实际上MySQL还可以运行良好。另外,当磁盘上占用较多时性能也不是太好。

这种情况处理只能是是建一个新的Slave从主库上Dump出来,然后在Dump到从库中,动作较大。

对于InnoDB Hot Backup备份的操作(或是直接冷备),每次需要CP的文件比较大。如果现在有180G的表空间,但实际数据只有50多G,那么我们将面对每次需要拷180G的数据。

这种方式也许mysqldump是一个好的处理方式了。

 

独立表空间:

在配置文件(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。

对于单表增长过大的问题,如果使用共享表空间可以把文件分开,但有同样有一个问题,如果访问的范围过大同样会访问多个文件,一样会比较慢。对于独立 表空间也有一个解决办法是:使用分区表,也可以把那个大的表空间移动到别的空间上然后做一个连接。其实从性能上出发,当一个表超过100个G有可能响应也 是较慢了,对于独立表空间还容易发现问题早做处理。

 

 

备份:

InnoDB Hot Backup(冷备)的表空间cp不会面对很多无用的copy了。而且利用innodb hot backup及表空间的管理命令可以实现单现移动。

监控:

可以更好从系统上监控数据的大小,每个表的大小。

另外推荐使用独立表空间的原因:

从性能上对比共享表空间和独立表空间:

共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。这里也有一个TIPS当启用独立表空间时,请合理调整一下:innodb_open_files 。

从Linux系统处理上出发:

文件系统fsync一大片更新数据,对系统io冲击较大。若分隔成多个小数据fsync,能够减少对读的影响。 同时从mysql代码,发现mysql保证两次fsync之间至少有20ms的sleep,这样的话,若将一次fsync变成多次小数据操作,应该能够减 少慢查询的比例。所以对于大量更新操作的系统不太适合用共享表空间

 

分享到:
评论

相关推荐

    MYSQL ibdata文件恢复工具 2.1

    MYSQL数据库碎片恢复工具,已经完工。专门针对MYSQL的ibdata1 引擎 编写,支持MYSQL 3 4 5 6版本,任意平台的IBDATA文件恢复。支持误删除 ,所在分区被格式化,支持黑客故意破坏等情况,自动侦测半页。提取合成。

    完美解决mysql启动后随即关闭的问题(ibdata1文件损坏导致)

    3. **修复`ibdata1`文件**:可以尝试使用`mysqlcheck`工具进行修复,或者在安全模式下启动MySQL,看是否能够成功。如果`mysqlcheck`不可用,可能需要使用第三方工具,如Percona的XtraDB Cluster或InnoDB Recovery ...

    MYSQL ibdata文件恢复工具

    MYSQL数据库碎片恢复工具,已经完工。专门针对MYSQL的ibdata1 引擎 编写,支持MYSQL 3 4 5 6版本,任意平台的IBDATA文件恢复。支持误删除 ,所在分区被格式化,支持黑客故意破坏等情况,自动侦测半页。提取合成

    ibdata1-recover-for-mysql

    ibdata1-recover-for-mysql ibdata1 还原数据库 ibdata1 还原表结构

    mysql Unable to lock ./ibdata1, error: 11

    标题“mysql Unable to lock ./ibdata1, error: 11”所反映的问题是MySQL数据库在运行过程中遇到了一个常见的错误,提示无法锁定数据文件`ibdata1`,错误代码11。这个错误通常与数据库的表空间管理、并发操作或者...

    MySQL启动报错问题InnoDB:Unable to lock/ibdata1 error

    【MySQL启动报错问题InnoDB:Unable to lock/ibdata1 error】是一个常见的MySQL服务器启动时遇到的问题。这个问题通常表明MySQL的InnoDB存储引擎无法获取对`ibdata1`文件的锁,`ibdata1`是InnoDB用来存储数据和系统表...

    mysql 误删除ibdata1之后的恢复方法

    MySQL数据库的InnoDB存储引擎使用一个名为`ibdata1`的数据文件来存储表数据和索引,以及系统表空间信息。当这个文件被意外删除时,可能会引发严重的数据丢失问题,尤其是在没有最近备份的情况下。然而,如果MySQL...

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

    MySQL的InnoDB存储引擎在处理大量数据时,其系统表空间文件`ibdata1`往往会变得非常庞大,占据了大量硬盘空间。本篇文章将全面解析如何对InnoDB进行扩容以及如何瘦身`ibdata1`文件。 ### InnoDB扩容 扩容InnoDB表...

    使用ibdata和frm文件恢复MySQL数据库.docx

    幸运的是,我们可以通过使用 ibdata 和 frm 文件恢复 MySQL 数据库。 一、使用 ibdata 和 frm 文件恢复 MySQL 数据库 在实际应用中,磁盘空间不足可能会导致服务器崩溃,数据库服务器进程无法启动,数据也无法导出...

    MySQL问答系列之如何避免ibdata1文件大小暴涨

    ibdata1文件是什么? ibdata1是一个用来构建innodb系统表空间的文件,这个文件包含了innodb表的元数据、撤销记录、修改buffer和双写buffer。如果file-per-table选项打开的话,该文件则不一定包含所有表的数据。当...

    php+mysql图书管理系统.zip

    将bms和mysql整个文件夹和ibdata1复制粘贴到xampp安装路径下的mysql文件夹里的data文件夹里面, 如我的路径即是D:\xampp\mysql\data\bms,接着打开XMAPP,然后再打开浏览器输入 网址http://localhost/phpmyadmin/...

    MySQL口令修改_MYSQL服务配置器

    3. **数据文件位置**:MySQL的数据文件(如ibdata1, ib_logfile0, ib_logfile1等)通常位于安装目录下的data子目录。通过`datadir`配置项可以修改这个位置。 4. **日志文件**:MySQL的日志系统包括错误日志、查询...

    centos7安装mysql8以及常规操作.txt

    centos7安装mysql8以及常规操作 ------------------------------------- [root@...opt]# vi /etc/my.cnf [mysqld] socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/...

    MySQL数据库文件介绍及存放位置

    MyISAM是MySQL早期常用的存储引擎,它将数据和索引分开存储。 - **.MYD文件**:即MYData,存储表的数据。每个表对应一个.MYD文件。 - **.MYI文件**:即MYIndex,存储表的索引。每个表对应一个.MYI文件。 - **.log...

    mysql通过data文件夹恢复数据和存储过程的方法

    ### MySQL通过Data文件夹恢复数据和存储过程的方法 在MySQL数据库管理中,有时我们需要从data文件夹中恢复数据和存储过程。这种情况可能出现在多种场景下,例如:误删除了重要的数据库对象、数据库出现故障需要紧急...

    mysql服务启动问题

    - 找到配置MySQL服务器时指定的`InfoDB`目录,并删除其中的`ibdata1`文件。 - 在`my.ini`文件中可以通过以下设置查找该目录: ```ini #***INNODBSpecificoptions*** innodb_data_home_dir="D:/" ``` - `...

Global site tag (gtag.js) - Google Analytics