Mysql導入sql文件報錯 Row size too large (> 8126) 的解決方案


產生這個問題的原因是InnoDB 表的最大行限制設置的大小:

引用網上的描述:

原因是因為mysql-innodb是按照page存儲數據的,每個page max size是16K,然后每個page兩行數據,所以每行最大8K數據。如果你的字段是blob之類的話,會存儲在page之外的溢出區里。

但是innodb默認的approach(羚羊)存儲格式會把每個blob字段的前864個字節存儲在page里,所以你的blob超過一定數量的話,單行大小就會超過8k,所以就報錯了。

也都會給出對應的解決方案:

解決方式是使用innodb的Barracuda(梭魚)存儲格式。這種格式對blob字段的處理方式是在page里面只存儲一個20byte大小的指針,其他完全存在溢出區,所以輕易不會超過8K.

方案對應的操作就是加下面兩個參數:

ROW_FORMAT= DYNAMIC

innodb_file_per_table=1

但是這個方案不適合sql文件批量導入,因為表是隨着sql一起導入的,在不修改sql文件的情況下,無法先建表再導入數據。

冥思苦想,最后發現在剛剛的描述中,問題的根源是page max size的默認16K不夠用,如果我把它加倍呢?

innodb_page_size=32K

再重新啟動mysql的時候,啟動失敗,查看日志有報錯:之前的日志文件是按照16KB分頁的,但是現在是默認32KB分頁,不兼容。因為我本地是測試環境,我直接把所有數據庫都刪掉了,重新建庫建表,問題就解決了。但是如果是線上環境,那么可能得考慮其他解決方案,或者想辦法把原有數據處理一下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM