MySQL协议

Manticore Search 通过 MySQL 协议实现了 SQL 接口,允许任何 MySQL 库或连接器,以及许多 MySQL 客户端,像连接 MySQL 服务器一样连接 Manticore Search 并进行操作。

然而,Manticore Search 的 SQL 方言不同,只有 MySQL 中 SQL 命令或函数的一个子集。此外,还包含一些 Manticore Search 独有的子句和函数,例如用于全文搜索的 MATCH() 子句。

Manticore Search 不支持服务端的预处理语句,但可以使用客户端的预处理语句。需要注意的是,Manticore 实现了多值(MVA)数据类型,而 MySQL 或实现预处理语句的库中没有对应的等价物。在这些情况下,MVA 值必须在原始查询中构造。

一些 MySQL 客户端/连接器要求提供用户/密码和/或数据库名称的值。由于 Manticore Search 没有数据库的概念,也没有实现用户访问控制,因此这些值可以随意设置,Manticore 会直接忽略它们。

配置

SQL 接口的默认端口是 9306,并且默认启用。

您可以在配置文件的 searchd 部分中使用 listen 指令配置 MySQL 端口,像这样:

searchd {
...
   listen = 127.0.0.1:9306:mysql
...
}

请注意,Manticore 没有用户身份验证功能,因此请确保 MySQL 端口对外部网络不可访问。

VIP 连接

可以使用一个单独的 MySQL 端口进行 "VIP" 连接。当连接到该端口时,将绕过线程池,并总是创建一个专用线程。这在服务器过载严重时非常有用,因为在这种情况下,服务器可能会停止或阻止通过常规端口的连接。

searchd {
...
   listen = 127.0.0.1:9306:mysql
   listen = 127.0.0.1:9307:mysql_vip
...
}

通过标准 MySQL 客户端连接

使用标准的 MySQL 客户端连接到 Manticore 是最简单的方式:

mysql -P9306 -h0

安全的 MySQL 连接

MySQL 协议支持 SSL 加密。可以在相同的 mysql 监听端口上建立安全连接。

压缩的 MySQL 连接

MySQL 连接可以使用压缩功能,并且客户端默认可以使用该功能。客户端只需要指定连接应该使用压缩即可。

使用 MySQL 客户端的示例:

mysql -P9306 -h0 -C

压缩功能可以在安全连接和非安全连接中使用。

关于 MySQL 连接器的注意事项

官方的 MySQL 连接器可以用于连接 Manticore Search,然而它们可能需要在 DSN 字符串中传递某些设置,因为连接器可能尝试运行 Manticore 尚未实现的某些 SQL 命令。

JDBC 连接器 6.x 及以上版本需要 Manticore Search 2.8.2 或更高版本,DSN 字符串应包含以下选项:

jdbc:mysql://IP:PORT/DB/?characterEncoding=utf8&maxAllowedPacket=512000&serverTimezone=XXX

默认情况下,Manticore Search 会向连接器报告其自身的版本,但这可能会导致一些问题。为了解决这个问题,应在配置文件的 searchd 部分中将 mysql_version_string 指令设置为低于 5.1.1 的版本:

searchd {
...
   mysql_version_string = 5.0.37
...
}

.NET MySQL 连接器默认使用连接池。为了正确获取 SHOW META 的统计信息,查询与 SHOW META 命令应作为单个多语句发送 (SELECT ...;SHOW META)。如果启用了连接池,则需要在连接字符串中添加 Allow Batch=True 选项以允许多语句:

Server=127.0.0.1;Port=9306;Database=somevalue;Uid=somevalue;Pwd=;Allow Batch=True;

关于 ODBC 连接的注意事项

Manticore 可以通过 ODBC 访问。推荐在 ODBC 字符串中设置 charset=UTF8。某些 ODBC 驱动程序可能不接受 Manticore 服务器报告的版本,因为它们会将其视为非常旧的 MySQL 服务器。可以通过 mysql_version_string 选项来覆盖该行为。

注释语法

Manticore SQL 在 MySQL 协议上支持 C 风格的注释语法。/* 开始到 */ 结束的内容都将被忽略。注释可以跨越多行,不能嵌套,并且不会被记录。MySQL 特定的 /*! ... */ 注释也会被忽略。(添加注释支持主要是为了与 mysqldump 生成的转储文件更好兼容,而不是为了提高 Manticore 和 MySQL 之间的通用查询互操作性。)

SELECT /*! SQL_CALC_FOUND_ROWS */ col1 FROM table1 WHERE ...

最后更新于