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-битная версия)