3

我在 Windows 机器上安装了 Sonar 3.4.1 和 Mysql 5.6.10。

我创建了一个 mysql 模式“声纳”并将其所有权限授予用户“声纳”。我已将声纳配置为使用此用户。我按照codehaus 声纳页面上的说明进行了此操作。

启动声纳时,它开始在模式中创建表。有时会发生错误,指出“指定的密钥太长;最大密钥长度为 767 字节”(最后有完整的错误消息)。

根据这个问题,mysql中的索引长度是有限的。因为这是记录在案的,所以我希望 Sonar 创建的索引不会超过限制。显然它试图这样做。

是我遗漏了一些重要的配置,还是 sonar 和 mysql 的两个版本不兼容?我该怎么做才能让它与这些版本一起使用?

完整的错误信息:

信息 | 虚拟机 1 | 2013/02/11 11:28:25 |
信息 | 虚拟机 1 | 2013/02/11 11:28:25 | == CreateProperties:迁移 ============================================= ==
信息 | 虚拟机 1 | 2013/02/11 11:28:25 | -- create_table("属性")
信息 | 虚拟机 1 | 2013/02/11 11:28:25 | -> 0.0320s
信息 | 虚拟机 1 | 2013/02/11 11:28:25 | -> 0 行
信息 | 虚拟机 1 | 2013/02/11 11:28:25 | -- add_index(:properties, :prop_key, {:name=>"properties_key"})
2013.02.11 11:28:25 错误 jruby.rack 无法创建共享应用程序实例
org.jruby.rack.RackInitializationException:发生错误,所有后续迁移都取消:

ActiveRecord::JDBCError: 指定的键太长;最大密钥长度为 767 字节: CREATE INDEX `properties_key` ON `properties` (`prop_key`)
    来自 D:/Programs/sonar-3.4.1/war/sonar-server/WEB-INF/gems/gems/activerecord-jdbc-adapter-1.1.3/lib/arjdbc/jdbc/adapter.rb:183:in `执行'
[省略堆栈跟踪]
org.jruby.exceptions.RaiseException: (StandardError) 发生错误,所有后来的迁移都取消了:

ActiveRecord::JDBCError: 指定的键太长;最大密钥长度为 767 字节: CREATE INDEX `properties_key` ON `properties` (`prop_key`)
2013.02.11 11:28:25 ERROR jruby.rack 错误:应用程序初始化失败
org.jruby.rack.RackInitializationException:发生错误,所有后续迁移都取消:

ActiveRecord::JDBCError: 指定的键太长;最大密钥长度为 767 字节: CREATE INDEX `properties_key` ON `properties` (`prop_key`)
    来自 D:/Programs/sonar-3.4.1/war/sonar-server/WEB-INF/gems/gems/activerecord-jdbc-adapter-1.1.3/lib/arjdbc/jdbc/adapter.rb:183:in `执行'
[省略堆栈跟踪]
org.jruby.exceptions.RaiseException: (StandardError) 发生错误,所有后来的迁移都取消了:

ActiveRecord::JDBCError: 指定的键太长;最大密钥长度为 767 字节: CREATE INDEX `properties_key` ON `properties` (`prop_key`)
信息 | 虚拟机 1 | 2013/02/11 11:28:25 | 2013-02-11 11:28:25.421:INFO::Started SelectChannelConnector@0.0.0.0:9000
4

1 回答 1

2

没错,某些索引的创建长度大于最大限制。问题是 MySQL 5.6 不再默默地截断索引。这种行为似乎不是预期的(参见http://dev.mysql.com/doc/refman/5.6/en/innodb-restrictions.html和错误http://bugs.mysql.com/bug.php? id=68453)。

也就是说,Sonar 3.5 通过创建具有正确长度的索引来解决这个问题(参见http://jira.codehaus.org/browse/SONAR-4137)。

于 2013-03-05T21:42:41.253 回答