【发布时间】:2012-06-08 02:05:45
【问题描述】:
在服务器 1 上转储 mysql 数据库
$ 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
发生了什么事?
我的意思是除了解决这个问题之外,我想了解哪些设置会影响简单的转储导入操作,以及为什么这些设置不能在我的转储文件中明确显示并设置为导入。
我宁愿不必调试实际错误,这必须在高层次上解决。
更新:解决方案 弗雷德里克为我指出了正确的方向。基本上我的转储试图用 INNODB 引擎设置 db,但服务器 2 上的 mysql 在 /etc/my.cnf 中
[mysqld]
skip-innodb
只需删除此选项并重新启动 mysqld,我的导入运行就不会发出呱呱声。 我很伤心这样一个简单的事情,比如一个不可用的引擎不值得警告或错误,而不是因为默默地退回到 myISAM 而导致的密钥长度问题。唔。那么是时候切换到 posgresql 了吗?蒙哥? :)
【问题讨论】:
-
你在使用innodb吗?两台机器上都启用了innodb吗? (检查 show variables 输出中的 has_innodb 变量)
-
@FrederickCheung 在服务器 1 上是,在服务器 2 上禁用。