MySQL 5.5 innodb_large_prefix配置设置未生效

时间:2017-06-22 20:20:08

标签: mysql innodb

我在Debian Linux上运行MySQL 5.5.55,我想启用innodb_large_prefix设置,这样我可以拥有大于767字节的表INDEX。

我的/etc/mysql/my.cnf文件中有以下配置:

[mysqld]
...
innodb_file_per_table=1
innodb-large-prefix=ON
innodb_file_format=barracuda

(我也尝试了innodb_large_prefix=ON。)

更新:我仔细检查了,没有其他配置文件存在,例如/etc/my.cnf/usr/etc/my.cnf~root/.my.cnf~mysql/.my.cnf

但是当我重新启动MySQL时,活动配置显示为:

| innodb_file_format             | Barracuda              |
| innodb_large_prefix            | OFF                    |
| innodb_file_per_table          | ON                     |

如果我从MySQL CLI手动更改GLOBAL设置,则设置似乎会更改:

mysql> SET GLOBAL innodb_large_prefix = ON;
...
| innodb_large_prefix            | ON                     |

...但是当我尝试实际使用“大前缀”时,我收到一个错误:

mysql> alter table [...]
ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.

MySQL innodb_large_prefix setting的文档说使用此设置有几个先决条件:

  1. MySQL 5.5.14或更高版本✔
  2. innodb_file_format = Barracuda
  3. innodb_file_per_table = ON
  4. innodb_large_prefix = ON
  5. 在玩了一下后,我能够按照需要转换我的表:

    1. SET GLOBAL innodb_large_prefix = ON;
    2. ALTER TABLE [...], ROW_FORMAT=DYNAMIC;
    3. 大。然后我再次重启MySQL并检查有效设置:

      | innodb_large_prefix            | OFF                    |
      

      使用该表等时没有错误,所以我猜一切都没问题,但设置似乎并不坚持,这很奇怪。

      我尝试将设置设置为OFF重新更改我的表,我无法构建那个大索引。这是否意味着我必须在以这种方式改变表格的任何时候手动将innodb_large_prefix设置为ON?我没有在/etc/mysql/my.cnf中正确配置此设置吗?

1 个答案:

答案 0 :(得分:5)

它有点隐藏,但根据documentation,对于MySQL< 5.6,您必须在配置文件中使用1而不是ON

  

具有“boolean”类型的变量可以设置为0,1,ON或OFF。 (如果在命令行或选项文件中设置它们,请使用数值。)

对于MySQL> = 5.6,您可以使用ONOFF in the config files