mysql 错误 1071(指定的密钥太长;最大密钥长度为 1000 字节)在简单的转储导入设置中



dump mysql db on server 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

这是怎么回事?

我的意思是除了解决这个问题之外,我还想了解哪些设置会影响简单的转储导入行为,以及为什么这些设置不能在我的转储文件中显式设置并设置为 t import。

我宁愿不必调试实际错误,这必须在高级别上解决。

更新:解决方案弗雷德里克为我指出了正确的方向。基本上我的转储试图使用 INNODB 引擎设置 db,但服务器 2 上的 mysql 在/etc/my.cnf 中

[mysqld]
skip-innodb

通过简单地删除此选项并重新启动 MySQLD,我的导入运行没有呱呱声。我很伤心像不可用的引擎这样简单的事情不值得警告或错误,而不是由于默默回退到 myISAM 而导致的关键长度问题。嗯。那么是时候切换到posgresql了?蒙戈?:)

听起来innodb在第二台机器上被禁用了,所以mysql默默地回退到myisam,它有不同的限制:每个键1000字节而不是3500字节

我最后一次看到这样的东西是因为配置问题:mysql 无法在启动时设置 innodb,因此它会禁用 innodb。检查您的 mysql 错误日志,它应该标记启动过程中遇到的任何问题。例如,如果innodb_log_file_size设置与日志文件的大小不匹配(ib_logfile0ib_logfile1、...),innodb 将拒绝初始化。

这对我来说是有用的。

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 – 指定的密钥太长;导入 MySQL 数据库时的最大密钥长度为 767 字节"

此外,如果您的系统是 64 位并且您从 yum 运行 MySQL(存储库默认),则在尝试从其他系统还原数据库时会看到此错误。我不知道为什么"yum install mysql mysql-devel mysql-server",它们只是以 32 位运行。

因此,在这种情况下,请从Percona或Marina安装和使用MySQL(当然是64位版本)

相关内容

最新更新