编辑:这可以是5.0特定错误。 (我在5.0.83)。卸下innodb_log_file_size设置摆脱了这个问题。这使得完整意义上的。不

谷歌搜索关于发现的类似屈指可数,但不是说后来修补在5.0相同的问题。

通过在my.cnf“错误”的设置,在MySQL 5.0中,这个创建语句会给我“指定的键过长,最大密钥长度为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中有很多工作要做,这一点,必须有一些其他的变量。

从上InnoDB表的限制的:

  

在内部最大密钥长度为   3500个字节,但MySQL的本身限制   这3072个字节。 (1024个字节   的MySQL 5.0.17前非64位版本,   和所有构建5.0.15前。)

我还注意到错误4541 表示的1000个字节的限制,并那有没有计划简单地增加这一点。

在性能方面,大索引(和表)等,这将是真很慢。我建议索引只有VARCHAR处理而不是整个字符串的前缀。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top