2

サーバー1にmysqldbをダンプします

$ 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に切り替える時間ですか?モンゴ?:)

4

3 に答える 3

8

2番目のマシンではinnodbが無効になっているように聞こえるので、mysqlはサイレントにmyisamにフォールバックします。これには、3500ではなくキーごとに1000バイトというさまざまな制限があります。

前回このようなものを見たのは、構成の問題が原因でした。mysqlは起動時にinnodbをセットアップできないため、innodbを無効にします。mysqlエラーログを確認してください。起動時に発生した問題にフラグを立てる必要があります。たとえば、設定がログファイルのサイズ(、、 ...)と一致しない場合、innodbは初期化を拒否しinnodb_log_file_sizeますib_logfile0ib_logfile1

于 2012-06-03T21:29:18.653 に答える
0

また、システムが 64 ビットで、MySQL を yum (リポジトリのデフォルト) から実行している場合、他のシステムからデータベースを復元しようとすると、このエラーが表示されます。「yum install mysql mysql-devel mysql-server」がなぜ 32 ビットで実行されるのかわかりません。

なので、この場合はPerconaかMarinaからMySQLをインストールして使ってください(もちろん64bit版です)

于 2014-08-06T11:44:37.140 に答える