mysql ERROR 1071 (указанный ключ был слишком длинным; максимальная длина ключа - 1000 байт) в простой настройке импорта дампа

Дамп MySQL базы данных на сервере 1

$ mysql --version
mysql  Ver 14.14 Distrib 5.1.54, for debian-linux-gnu (x86_64) using readline 6.2
$ mysqldump -u root -p db > db.sql

импорт на сервер 2

$ mysql --version
mysql  Ver 14.12 Distrib 5.0.95, for unknown-linux-gnu (x86_64) using readline 5.1
$ mysql -u root -p db < db.sql
ERROR 1071 (42000) at line 807: Specified key was too long; max key length is 1000 bytes

Я знаю, что есть много вопросов и ответов об этой ошибке, но она все еще оставляет меня озадаченным.

Это может быть проблема версии? Я подозреваю, нет.

Если я запускаю его с параметром --force, он становится еще более странным:

ERROR 1071 (42000) at line 807: Specified key was too long; max key length is 1000 bytes
ERROR 1146 (42S02) at line 847: Table 'db.users' doesn't exist
ERROR 1146 (42S02) at line 848: Table 'db.users' doesn't exist
ERROR 1146 (42S02) at line 849: Table 'db.users' doesn't exist
ERROR 1146 (42S02) at line 850: Table 'db.users' doesn't exist

что здесь происходит?

Я имею в виду, помимо решения этой проблемы, я хотел бы понять, какие настройки влияют на простое действие импорта-дампа и почему эти параметры не могут быть явными в моем файле дампа и могут быть заданы для импорта.

Я предпочитаю не отлаживать реальные ошибки, это должно быть решаемо на высоком уровне.

ОБНОВЛЕНИЕ: РЕШЕНИЕ, поскольку Фредерик указал мне правильное направление. По сути, мой дамп пытался установить db с движком INNODB, но mysql на сервере 2 был в /etc/my.cnf

[mysqld]
skip-innodb

просто удалив эту опцию и перезапустив mysqld, мой импорт запустился без обмана. Мне очень грустно, что такая простая вещь, как недоступный движок, не заслуживает предупреждения или ошибки, а не проблемы длины ключа, вызванной тихим отступлением к myISAM. Хм. Так что время перейти на posgresql? Монго?:)

3 ответа

Решение

Похоже, что innodb отключен на второй машине, поэтому mysql молча возвращается к myisam, который имеет другие ограничения: 1000 байт на ключ вместо 3500

В последний раз, когда я видел что-то подобное, это было из-за проблемы конфигурации: mysql не может настроить innodb при запуске, поэтому он отключает innodb. Проверьте журнал ошибок MySQL, он должен отмечать любые проблемы, возникающие во время запуска. Например, innodb откажется инициализировать, если innodb_log_file_size настройка не соответствует размеру файлов журнала (ib_logfile0, ib_logfile1...)

Это работа для меня.

mysql -u USERNAME -p

use DATABASENAME;

set global innodb_large_prefix=on;
set global innodb_file_format=Barracuda;
set global innodb_file_per_table=true;

Ошибка: "#1071 - указанный ключ слишком длинный; максимальная длина ключа составляет 767 байт "при импорте mysql db

Кроме того, если ваша система 64-битная и вы используете MySQL от yum (репозиторий по умолчанию), вы увидите эту ошибку при попытке восстановить базу данных из других систем. Я не знаю, почему "yum install mysql mysql-devel mysql-server", они просто работают с 32bit.

Итак, в этом случае, пожалуйста, установите и используйте MySQL от Percona или Marina (конечно, это 64-битная версия)

Другие вопросы по тегам