-
Documentation task
-
Resolution: Fixed
-
Trivial
-
4.0.13
-
Sprint 57 (Oct 2019), Sprint 58 (Nov 2019), Sprint 59 (Dec 2019), Sprint 60 (Jan 2020), Sprint 61 (Feb 2020)
Steps to reproduce:
Install clean MariaDB 10.4.8.
Install 4.0.13, try to load data.
Result:
Error 1 related to the [https://jira.mariadb.org/browse/MDEV-20194|MDEV-20194] - on database internal cache load unsafe table will generate such WARN messages. This error affects current setups with where only MariaDB is upgraded:
2019-10-08 10:34:13 14 [Warning] InnoDB: Cannot add field `proxy_address` in table `zabbix`.`hosts` because after adding it, the row size is 8494 which is greater than maximum allowed size (8126) for a record on index leaf page. 2019-10-08 10:34:13 14 [Warning] InnoDB: Cannot add field `location` in table `zabbix`.`host_inventory` because after adding it, the row size is 8772 which is greater than maximum allowed size (8126) for a record on index leaf page. 2019-10-08 10:34:13 14 [Warning] InnoDB: Cannot add field `error` in table `zabbix`.`items` because after adding it, the row size is 8562 which is greater than maximum allowed size (8126) for a record on index leaf page.
Error 2: strict mode on, trying to load data first time:
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
Disabling strict mode is not a solution (inserts/updates may be broken), also setting innodb_page_size=65536 will not take effect until data will be unloaded and loaded back (database should be recreated).
Expected:
No errors on LTS version.
Some workaround for affected tables:
On active setup:
set global innodb_strict_mode='OFF'; # on affected tables ALTER TABLE table_name ROW_FORMAT=DYNAMIC; # host_inventory should upgrade field size ALTER TABLE host_inventory MODIFY name varchar(128) COLLATE utf8mb4_bin NOT NULL DEFAULT ''; ALTER TABLE host_inventory MODIFY alias varchar(128) COLLATE utf8_bin NOT NULL DEFAULT ''; ALTER TABLE host_inventory MODIFY os varchar(128) COLLATE utf8_bin NOT NULL DEFAULT ''; ALTER TABLE host_inventory MODIFY os_short varchar(128) COLLATE utf8_bin NOT NULL DEFAULT ''; set global innodb_strict_mode='ON';
On new setups add to the configuration file:
innodb-strict-mode=1 #this will take effect only on new setups innodb_page_size=65536 innodb_default_row_format=dynamic
Regards,
Edgar