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 端口,像这样:
请注意,Manticore 没有用户身份验证功能,因此请确保 MySQL 端口对外部网络不可访问。
VIP 连接
可以使用一个单独的 MySQL 端口进行 "VIP" 连接。当连接到该端口时,将绕过线程池,并总是创建一个专用线程。这在服务器过载严重时非常有用,因为在这种情况下,服务器可能会停止或阻止通过常规端口的连接。
通过标准 MySQL 客户端连接
使用标准的 MySQL 客户端连接到 Manticore 是最简单的方式:
安全的 MySQL 连接
MySQL 协议支持 SSL 加密。可以在相同的 mysql
监听端口上建立安全连接。
压缩的 MySQL 连接
MySQL 连接可以使用压缩功能,并且客户端默认可以使用该功能。客户端只需要指定连接应该使用压缩即可。
使用 MySQL 客户端的示例:
压缩功能可以在安全连接和非安全连接中使用。
关于 MySQL 连接器的注意事项
官方的 MySQL 连接器可以用于连接 Manticore Search,然而它们可能需要在 DSN 字符串中传递某些设置,因为连接器可能尝试运行 Manticore 尚未实现的某些 SQL 命令。
JDBC 连接器 6.x 及以上版本需要 Manticore Search 2.8.2 或更高版本,DSN 字符串应包含以下选项:
默认情况下,Manticore Search 会向连接器报告其自身的版本,但这可能会导致一些问题。为了解决这个问题,应在配置文件的 searchd 部分中将 mysql_version_string
指令设置为低于 5.1.1 的版本:
.NET MySQL 连接器默认使用连接池。为了正确获取 SHOW META
的统计信息,查询与 SHOW META
命令应作为单个多语句发送 (SELECT ...;SHOW META
)。如果启用了连接池,则需要在连接字符串中添加 Allow Batch=True
选项以允许多语句:
关于 ODBC 连接的注意事项
Manticore 可以通过 ODBC 访问。推荐在 ODBC 字符串中设置 charset=UTF8
。某些 ODBC 驱动程序可能不接受 Manticore 服务器报告的版本,因为它们会将其视为非常旧的 MySQL 服务器。可以通过 mysql_version_string
选项来覆盖该行为。
注释语法
Manticore SQL 在 MySQL 协议上支持 C 风格的注释语法。/*
开始到 */
结束的内容都将被忽略。注释可以跨越多行,不能嵌套,并且不会被记录。MySQL 特定的 /*! ... */
注释也会被忽略。(添加注释支持主要是为了与 mysqldump
生成的转储文件更好兼容,而不是为了提高 Manticore 和 MySQL 之间的通用查询互操作性。)
最后更新于