我正试图向表中添加全文索引。运行查询时,
ALTER TABLE thisTable ADD FULLTEXT(thisText);
我明白了
SQL错误(2013):查询期间与MySQL服务器断开连接
而且MySQL服务确实会停止。如果我重新启动服务并再次尝试添加索引,我会得到另一个错误。
SQL错误(1813):表'thisTable/#sql-ib 21134'的表空间已存在。请在导入之前放弃该表空间。
引擎是InnoDb,我运行MySQL 5.6.12,应该支持全文索引,列是TEXT列。
如果有人能给我指出错误的正确方向,我将非常感激。
4条答案
按热度按时间2w3kk1z51#
这个问题与排序缓冲区大小有关。这是mysql/mariadb/percona的已知错误。即使在我报告这个错误几个月后,它也没有得到修复(我们正在使用最新的Mariadb)
kb5ga3dv2#
第二个错误是因为服务器崩溃时部分修改(或创建)了表(或全文索引表)。请删除表,然后从头开始重新创建。
现在,为什么服务器崩溃了?很难确定,但很可能是某个缓冲区达到了容量。通常的怀疑是
innodb_buffer_pool_size
。尝试逐步增加它。pxiryf3j3#
在Ubuntu服务器20.04上,
尽管增加
innodb_buffer_pool_size
是合理的逻辑,但我已经确定OOM Killer在缓冲区很大时杀死了mysql。OOM Killer是Linux内核的一项功能,用于杀死请求操作系统可以分配的更多内存的恶意进程,以便系统能够继续运行。
摘自系统日志:
oom-删除:约束=约束_无,节点掩码=(空),cpuset=/,允许的内存= 0,全局_oom,任务_内存=/系统.切片/mysql.服务,任务=mysqld,pid=98524,uid=114 Jan 10 06:55:40 vps-5520 a8 d5内核:[66118.230690]内存不足:已终止进程98524(mysqld)总计虚拟机:9221052 kB,匿名rss:5461436 kB,文件rss:0 kB,假内存rss:0 kB,UID:114页表:11232 kB对象评分调整:0
所以这意味着,由于巨大的innodb_buffer_pool_size设置,它试图分配太大的内存块,太多的侵略性。
因此,根据这一事实,逻辑要求减小innodb_buffer_pool_size的大小或设置其默认值,我已将其从**/etc/mysql/mysql.conf.d/mysqld.conf**中完全删除,然后使用以下命令重新启动服务器
现在在我的61 M表上添加全文并没有崩溃。
bwitn5fc4#
倒霉的朋友...
InnoDB表不支持FULLTEXT索引。
源代码-http://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html