my.cnfの中に異なる設定が原因となっているエラー「最大キー長は1000バイトです」

StackOverflow https://stackoverflow.com/questions/1731149

  •  20-09-2019
  •  | 
  •  

質問

編集:これは5.0特有のバグかもしれません。 (私は5.0.83でよ)。 innodb_log_file_size設定を削除することは、問題を取り除きます。これは完全に理にかなっています。ではない。

についてグーグルは後でパッチし5.0に類似するが、同一ではない問題の一握りを見つけます。

のmy.cnfで「間違った」設定では、MySQLの5.0上でこのcreate文は、「指定されたキーが長すぎました;最大キー長が1000バイトである」私を与えるだろう。

CREATE TABLE ReproduceTheProblem (
COLUMN_ONE varchar(200) character set utf8 default NULL,
COLUMN_TWO varchar(200) character set utf8 default NULL,  
KEY ThisKeyBreaks(COLUMN_ONE, COLUMN_TWO)  
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

のパフォーマンスを改善しようと、私はうまく実行my.cnfの設定に到着しましたが、取得エラー「キーを長すぎました」。私は、このキーを作成することができますmy.cnfの設定を持っていますが、それは違う、非常に大きなテーブルにデータをインポートするにひどく実行します。

(私はで異なる設定をダイヤルしようとするから、といくつかの奇抜な値を持っている)動作しますが、ひどく実行設定をます:

[client]
port        = 3306
socket      = /tmp/mysql.sock

[mysqld]
port        = 3306
socket      = /tmp/mysql.sock
skip-locking
key_buffer_size = 384M
max_allowed_packet = 1024M 
table_cache = 256
max_sp_recursion_depth=255
sort_buffer_size = 2M 
read_buffer_size = 2M 
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
myisam_max_sort_file_size = 30G
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 8
max_heap_table_size = 9900000
skip-federated
log-bin=mysql-bin
server-id   = 1

[mysqldump]
quick
max_allowed_packet = 256M

[mysql]
no-auto-rehash

[isamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M
[myisamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

うまく実行しますが、私は、キーの長さの誤差を与える設定:

[client]
port            = 3306
socket          = /tmp/mysql.sock

[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
max_allowed_packet = 200M
table_cache = 256
query_cache_type = 1
query_cache_limit = 20M
query_cache_size = 500M
long_query_time = 2
thread_cache_size = 1000
thread_concurrency = 4
innodb_thread_concurrency = 4 
old_passwords = 1
max_connections = 1000
max_sp_recursion_depth = 255
server-id       = 0
innodb_buffer_pool_size = 800M
innodb_additional_mem_pool_size = 50M
innodb_log_file_size=50M
innodb_log_buffer_size = 200M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout =50

[mysqldump]
quick
max_allowed_packet = 200M

[mysql]
no-auto-rehash
役に立ちましたか?

解決

私はあなたのmy.cnfのはこのと大いに関係している、いくつかの他の変数が存在しなければならないと思います。

制限に:

  

内部最大鍵長であります   3500のバイトが、MySQL自体は制限し   この3072バイトまで。 (1024バイトのために   非64ビットは、MySQLの5.0.17以前のビルド   そして、すべてのために5.0.15の前に構築します。)

私も注意してくださいバグ4541 には、1000バイトの限界を示しており、単にこれを増やす予定はありませんもの。

パフォーマンスの面では、このような大きなインデックス(とテーブル)は本当に遅くなります。私は唯一のvarcharの接頭辞ではなく、文字列全体のインデックスをお勧めしたい。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top