Mysql

為什麼 MySQL 在載入 mysqldump 後沒有保留 innodb_file_format

  • July 10, 2019

我今天在載入 mysql 轉儲時遇到

ERROR 1118 (42000) at line 279: Row size too large (> 8126)

我認為這很奇怪,因為我知道我已經打開了行壓縮並在該伺服器上使用梭子魚。我也知道我沒有在生產數據庫上遇到這個問題。

我檢查了生產數據庫,果然

show variables like "%innodb_file%";
+--------------------------+-----------+
| Variable_name            | Value     |
+--------------------------+-----------+
| innodb_file_format       | Barracuda |
| innodb_file_format_check | ON        |
| innodb_file_format_max   | Barracuda |
| innodb_file_per_table    | ON        |
+--------------------------+-----------+

但在載入轉儲的伺服器上,file_format 變數設置為:

mysql> show variables like "%innodb_file%";
+--------------------------+-----------+
| Variable_name            | Value     |
+--------------------------+-----------+
| innodb_file_format       | Antelope  |
| innodb_file_format_check | ON        |
| innodb_file_format_max   | Antelope  |
| innodb_file_per_table    | ON        |
+--------------------------+-----------+

這是我的 MySQL 轉儲的樣子

sudo mysqldump -u mysqlbackups --databases limbo | gzip > /local_backup_directory'+%m-%d-%Y'.sql.gz

為什麼不轉儲 innodb_file_format 和 format_max 變數?如何告訴 mysqldump 轉儲 file_format 和 format_max 變數?

根據 MySQL 文件

innodb_file_format

用於新 InnoDB 表的文件格式。目前支持 Antelope 和 Barracuda。這僅適用於具有自己的表空間的表,因此要使其生效,必須啟用 innodb_file_per_table。某些 InnoDB 功能(例如表壓縮)需要梭子魚文件格式。

innodb_file_format_max

在伺服器啟動時,InnoDB 將此變數的值設置為系統表空間中的文件格式標記(例如 Antelope 或 Barracuda)。如果伺服器創建或打開具有“更高”文件格式的表,它會將 innodb_file_format_max 的值設置為該格式。

由於這些中的每一個都屬於my.cnf而不是數據,因此就 mysqldump 而言,InnoDB 的格式是不可知的。如果您想即時將所有內容轉移到梭子魚,有兩種方法(請在開發和暫存伺服器上測試我的建議)

技術#1:在 mysqldump 中添加 Barracuda 選項

假設呼叫 mysqldump 文件mydump.sql。做這個:

echo "SET GLOBAL innodb_file_format = 'Barracuda';" > mynewdump.sql
cat mydump.sql >> mynewdump.sql

現在,只需載入轉儲

mysql -uroot -p < mynewdump.sql

技巧#2:在載入轉儲之前設置梭子魚選項

登錄到 mysqlroot@localhost並從 mysql 提示符執行它

mysql> SET GLOBAL innodb_file_format = 'Barracuda';
mysql> source mynewdump.sql

警告

請在開發和登台伺服器上測試建議

試一試 !!!

引用自:https://dba.stackexchange.com/questions/69163