Решение: Specified key was too long; max key length is 767 bytes

Однажды в Ubuntu Server 18.04 я обновлял Zabbix 4.4 до 5.0 и обнаружил ошибку в логах во время обновления:

current database version (mandatory/optional): 04050003/04050003
required mandatory version: 05000000
optional patches were found
starting automatic database upgrade
[Z3005] query failed: [1071] Specified key was too long; max key length is 767 bytes [create index items_1 on items (hostid,key_(1021))]
database upgrade failed

В моем случае использовался сервер баз данных MariaDB 10.1.48, а минимальные версии по требованиям Zabbix 5.0 следующие:
php 7.2
MySQL 5.5.62
MariaDB 10.0.37
PostgreSQL 9.2.24
Oracle 11.2
К счастью с этим все было хорошо, я проверил командами:

php -v
mysql -v

Для решения ошибки я просто выполнил SQL запрос:

SET GLOBAL innodb_default_row_format='dynamic';

И включил innodb_large_prefix:

SELECT @@innodb_large_prefix;
set global innodb_large_prefix=on;
nano /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
innodb_large_prefix=1

А также на всяких случай изменил кодировку базы данных и всех таблиц на рекомендуемую в официальной документации Zabbix:

SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4                  | utf8mb4_general_ci   |
+--------------------------+----------------------+

SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = "zabbix";

ALTER DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin;

SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;') FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'zabbix';

После этого перезапустил zabbix-server и база данных успешно обновилась:

service zabbix-server restart

Смотрите также другие мои статьи:
Про Zabbix
Про MySQL

Оставьте комментарий

Добавить комментарий