正在导出具有 FTS 索引的 MySQL 数据库
Exporting MySQL database with FTS index
我最近在迁移 MySQL 数据库,发现了一个与 FTS 索引相关的问题。
以下是产生问题的步骤:
我使用以下命令导出了数据库:
mysqldump -p -u username database_name > export.sql
并导入:
mysql -p -u username database_name < export.sql
接下来,我 运行 在每个需要它们的 table 上执行 FTS 索引命令:
ALTER TABLE table_name ADD FULLTEXT(colnames...)
检查这些 table 的 table 状态时,记录数是正确的。但是,index_length
与原始数据库(我们从中导出的数据库)有很大不同。
结果是 FTS 部分工作(一些字符串匹配但不是全部)。因此,如果我使用 "test" 之类的字符串执行 MATCH
,它对两者都有效,但是当我使用 "hello" 之类的字符串执行 MATCH
时,它仅适用于原始数据库。
这种行为的原因可能是什么?我非常小心地确保所有 table 都添加到 FTS 索引中。 table 每个都有大约 150,000 条记录。
一直都是这样不是吗。花费数小时尝试解决问题,并在 Whosebug 上发帖后几分钟内找到答案。
所以问题出在 sql 配置文件中的 FTS 参数上。之前,我删除了停用词列表并减少了最小字长。忘记将这些参数带到新服务器。
我最近在迁移 MySQL 数据库,发现了一个与 FTS 索引相关的问题。
以下是产生问题的步骤:
我使用以下命令导出了数据库:
mysqldump -p -u username database_name > export.sql
并导入:
mysql -p -u username database_name < export.sql
接下来,我 运行 在每个需要它们的 table 上执行 FTS 索引命令:
ALTER TABLE table_name ADD FULLTEXT(colnames...)
检查这些 table 的 table 状态时,记录数是正确的。但是,index_length
与原始数据库(我们从中导出的数据库)有很大不同。
结果是 FTS 部分工作(一些字符串匹配但不是全部)。因此,如果我使用 "test" 之类的字符串执行 MATCH
,它对两者都有效,但是当我使用 "hello" 之类的字符串执行 MATCH
时,它仅适用于原始数据库。
这种行为的原因可能是什么?我非常小心地确保所有 table 都添加到 FTS 索引中。 table 每个都有大约 150,000 条记录。
一直都是这样不是吗。花费数小时尝试解决问题,并在 Whosebug 上发帖后几分钟内找到答案。
所以问题出在 sql 配置文件中的 FTS 参数上。之前,我删除了停用词列表并减少了最小字长。忘记将这些参数带到新服务器。