tablespace - MySQL從5.5升級(jí)到5.7后innodb_file_per_table默認(rèn)開(kāi)啟問(wèn)題
問(wèn)題描述
最近將數(shù)據(jù)庫(kù)從庫(kù)從5.5升級(jí)到5.7,發(fā)現(xiàn)儲(chǔ)存MySQL磁盤(pán)空間一下子占用變大了很多,排查了一下發(fā)現(xiàn)是升級(jí)后MySQL的系統(tǒng)表空間(ibdata1)很大[原本就很大],單個(gè)innodb表的表空間也變得很大[升級(jí)后變大],正常情況下應(yīng)該只有一方會(huì)很大(系統(tǒng)的MyISAM表不多)
具體情況如下:升級(jí)前,mysql數(shù)據(jù)庫(kù)5.5,innodb_file_per_table使用默認(rèn)配置,即是關(guān)閉的,innodb的表和索引都存儲(chǔ)在一起(ibdata1文件很大);升級(jí)到5.7時(shí),innodb_file_per_table仍使用默認(rèn)配置,但是默認(rèn)是開(kāi)啟的,升級(jí)時(shí)使用mysql_upgrade后,每個(gè)表使用了獨(dú)立的表空間,即每個(gè)數(shù)據(jù)庫(kù)文件夾下的表空間文件很大,但是原本的系統(tǒng)表空間ibdata1并沒(méi)有對(duì)應(yīng)的變小。
查詢手冊(cè)發(fā)現(xiàn):在mysql5.5的時(shí)候innodb_file_per_table配置是默認(rèn)關(guān)閉的,但是數(shù)據(jù)庫(kù)升級(jí)到5.7的時(shí)候,innodb_file_per_table配置默認(rèn)開(kāi)啟了(其實(shí)在mysql5.6.6的時(shí)候就默認(rèn)開(kāi)啟了),官網(wǎng)說(shuō)明:http://dev.mysql.com/doc/refm...
請(qǐng)問(wèn)有沒(méi)有方法在不重新導(dǎo)入數(shù)據(jù)的情況下(重新導(dǎo)入耗時(shí)太長(zhǎng)),使原本的系統(tǒng)表空間ibdata1文件變小。
問(wèn)題解答
回答1:首先需要明確你要做什么
1、MySQL 從5.5 升級(jí)到 5.72、不想重新導(dǎo)數(shù)據(jù),減少ibdata1空間
如果你是生產(chǎn)環(huán)境的數(shù)據(jù),建議你做好數(shù)據(jù)庫(kù)升級(jí)前的兼容性工作,充分的評(píng)估并找到不兼容或問(wèn)題點(diǎn),并解決。生產(chǎn)環(huán)境進(jìn)行版本升級(jí)建議做數(shù)據(jù)庫(kù)的導(dǎo)入導(dǎo)出操作,不建議原地升級(jí)。
如果是測(cè)試環(huán)境你可以隨意折騰,甚至是執(zhí)行完mysql_upgrade后 關(guān)閉MySQL,刪除ibdata1 文件,重啟后看看效果。
或者使用一些表整理命令或者嘗試修改表存儲(chǔ)引擎的方式整理一些表看看有沒(méi)有效果。
相關(guān)文章:
1. 在應(yīng)用配置文件 app.php 中找不到’route_check_cache’配置項(xiàng)2. 跨類調(diào)用后,找不到方法3. sql語(yǔ)句 - 如何在mysql中批量添加用戶?4. 怎么php怎么通過(guò)數(shù)組顯示sql查詢結(jié)果呢,查詢結(jié)果有多條,如圖。5. mysql - 表名稱前綴到底有啥用?6. 編輯成功不顯示彈窗7. tp 6.0 數(shù)據(jù)查詢,求教!8. 為什么php修改數(shù)據(jù)無(wú)法同步到數(shù)據(jù)庫(kù),只是當(dāng)前頁(yè)面修改成功?9. 哭遼 求大佬解答 控制器的join方法怎么轉(zhuǎn)模型方法10. 在mybatis使用mysql的ON DUPLICATE KEY UPDATE語(yǔ)法實(shí)現(xiàn)存在即更新應(yīng)該使用哪個(gè)標(biāo)簽?
