tablespace - MySQL从5.5升级到5.7后innodb_file_per_table默认开启问题
问题描述
最近将数据库从库从5.5升级到5.7,发现储存MySQL磁盘空间一下子占用变大了很多,排查了一下发现是升级后MySQL的系统表空间(ibdata1)很大[原本就很大],单个innodb表的表空间也变得很大[升级后变大],正常情况下应该只有一方会很大(系统的MyISAM表不多)
具体情况如下:升级前,mysql数据库5.5,innodb_file_per_table使用默认配置,即是关闭的,innodb的表和索引都存储在一起(ibdata1文件很大);升级到5.7时,innodb_file_per_table仍使用默认配置,但是默认是开启的,升级时使用mysql_upgrade后,每个表使用了独立的表空间,即每个数据库文件夹下的表空间文件很大,但是原本的系统表空间ibdata1并没有对应的变小。
查询手册发现:在mysql5.5的时候innodb_file_per_table配置是默认关闭的,但是数据库升级到5.7的时候,innodb_file_per_table配置默认开启了(其实在mysql5.6.6的时候就默认开启了),官网说明:http://dev.mysql.com/doc/refm...
请问有没有方法在不重新导入数据的情况下(重新导入耗时太长),使原本的系统表空间ibdata1文件变小。
问题解答
回答1:首先需要明确你要做什么
1、MySQL 从5.5 升级到 5.72、不想重新导数据,减少ibdata1空间
如果你是生产环境的数据,建议你做好数据库升级前的兼容性工作,充分的评估并找到不兼容或问题点,并解决。生产环境进行版本升级建议做数据库的导入导出操作,不建议原地升级。
如果是测试环境你可以随意折腾,甚至是执行完mysql_upgrade后 关闭MySQL,删除ibdata1 文件,重启后看看效果。
或者使用一些表整理命令或者尝试修改表存储引擎的方式整理一些表看看有没有效果。
相关文章:
1. dockerfile - 为什么docker容器启动不了?2. web服务器 - ubuntu下布置apache加wsgi加python3. android 如何实现如图中的键盘上的公式及edittext的内容展示呢4. CSS3的渐变属性的疑惑5. python - pip install出现下面图中的报错 什么原因?6. 数据挖掘 - 如何用python实现《多社交网络的影响力最大化问题分析》中的算法?7. python - 怎么通过vpn连内网ftp?8. javascript - 有没有什么办法过滤掉数据库中的乱码?9. python - Flask写的注册页面,当注册时,如果填写数据库里有的相同数据,就报错10. python - 用ffmpeg采集视频,用terminate没法结束进程

网公网安备