MySql ibdata1文件太大如何缩小

MySql innodb如果是共享表空间,ibdata1文件越来越大,达到了30多个G,对一些没用的表进行清空:
truncate table xxx;
然后optimize table xxx; 没有效果
因为对共享表空间不起作用。
mysql ibdata1存放数据,索引等,是MYSQL的最主要的数据。

如果不把数据分开存放的话,这个文件的大小很容易就上了G,甚至几十G。对于某些应用来说,并不是太合适。因此要把此文件缩小。
无法自动收缩,必须数据导出,删除ibdata1,然后数据导入,比较麻烦,因此需要改为每个表单独的文件。

解决方法:数据文件单独存放(共享表空间如何改为每个表独立的表空间文件)。
步骤如下:

 

1)备份数据库

从命令行进入MySQL Server 5.0\bin
备份全部数据库,执行命令
D:\>mysqldump -q -umysql -ppassword --add-drop-table --all-databases > c:/all.sql

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

 

2)找到my.ini或my.cnf文件
linux下执行 ./mysqld --verbose --help | grep -A 1 'Default options'
会有类似显示:
Default options are read from the following files in the given order:
/etc/my.cnf ~/.my.cnf /usr/local/service/mysql3306/etc/my.cnf

windows环境下可以:
mysqld --verbose --help > mysqlhelp.txt
notepad mysqlhelp.txt
在里面查找Default options,可以看到查找my.ini的顺序,以找到真实目录

 

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

验证配置是否生效,可以重启mysql后,执行
show variables like '%per_table%'
看看innodb_file_per_table变量是否为ON

 

4)删除原数据文件

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

 

5)还原数据库

启动数据库服务

从命令行进入MySQL Server 5.0\bin
还原全部数据库,执行命令mysql -uusername -pyourpassword < c:/all.sql

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ibdata1文件MySQL数据库中的一个系统表空间文件,用于存储数据和索引。当该文件过大时,可能会导致一些问题。 首先,当ibdata1文件过大时,数据库的性能可能会受到影响。由于文件较大,读取和写入数据可能会变得更慢,导致查询和更新操作的响应时间延长。 其次,当ibdata1文件过大时,数据库备份和恢复的时间也会增加。由于文件体积较大,备份和恢复整个数据库将花费更多的时间和资源。 此外,ibdata1文件过大还会占用大量的磁盘空间。随着时间的推移,数据库中的数据和索引不断增长,ibdata1文件也会相应增大,导致磁盘空间不足或者需要花费更多资金购买更大的磁盘。 为了解决ibdata1文件过大的问题,可以考虑以下方法: 1. 清理数据库中不再使用的数据。通过删除不必要的数据,可以减少数据库文件的大小。可以使用DELETE或者TRUNCATE语句来删除数据。 2. 对数据库表进行分区。将数据按照不同的条件(如时间、地区等)分散存储在不同的表中,可以减小ibdata1文件的大小,提高查询性能。 3. 压缩数据库文件。可以使用MySQL提供的OPTIMIZE TABLE语句来压缩数据库文件,这将减小数据库文件的大小。 4. 考虑使用独立的表空间。可以将不同的表放在不同的表空间中,这样可以分散数据存储,并且可以方便地管理和控制每个表空间的大小。 总之,当ibdata1文件过大时,可能会影响数据库的性能、备份和恢复的效率,以及磁盘空间的利用。通过清理数据、分区、压缩文件和使用独立的表空间等方法,可以有效地解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值