创建索引时在查询期间丢失与 MySQL 服务器的连接
Lost connection to MySQL server during query when creating index
我正在大型 table 上创建全文索引(使用命令行),因此我预计它会花费很长时间。不幸的是,每次我在一段时间后(大约 1 小时)收到此错误:
mysql> CREATE FULLTEXT INDEX ix_fulltext_catalog ON catalog(catalog_content);
ERROR 2013 (HY000): Lost connection to MySQL server during query
然后当我尝试 运行 任何命令时,它只是重新连接:
mysql> show variables like 'connect_timeout';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 8
我尝试将许多变量设置为更高的值,但没有帮助。这些是我的价值观:
| Variable_name | Value |
+-----------------------------------------------+--------------------+
| connect_timeout | 172800 |
| disconnect_on_expired_password | ON |
| init_connect | |
| max_connect_errors | 100 |
| max_connections | 151 |
| max_user_connections | 0 |
| mysqlx_connect_timeout | 30 |
| mysqlx_max_connections | 100 |
| performance_schema_session_connect_attrs_size | 512 |
| connect_timeout | 172800 |
| delayed_insert_timeout | 300 |
| have_statement_timeout | YES |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 172800 |
| lock_wait_timeout | 31536000 |
| mysqlx_connect_timeout | 30 |
| mysqlx_idle_worker_thread_timeout | 60 |
| mysqlx_interactive_timeout | 28800 |
| mysqlx_port_open_timeout | 0 |
| mysqlx_read_timeout | 30 |
| mysqlx_wait_timeout | 28800 |
| mysqlx_write_timeout | 60 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| rpl_stop_slave_timeout | 31536000 |
| slave_net_timeout | 60 |
| wait_timeout | 172800 |
+-----------------------------------------------+--------------------+
我也检查了error.log
文件,完全没有错误!看起来服务器在 1 小时后才 'falls asleep',就好像后台什么都没发生一样。有人可以帮忙吗?
编辑: 正如@danblack 建议的那样,我尝试使用 dmesg
并且它显示我 运行 内存不足。
Out of memory: Killed process 489295 (mysqld) total-vm:12674556kB, anon-rss:10791368kB,
file-rss:0kB, shmem-rss:0kB, UID:126 pgtables:21724kB oom_score_adj:0
由于 OOM:
选项 1:
增加索引时减少innodb_buffer_pool_size
(在线)
选项 2:
使用另一个全文搜索实现而不是 MySQL。 Solr、Sphinx-search 等用于文本搜索的专用应用程序可以更好地进行直观搜索。
(免责声明我只使用了 MySQL-8.0 之前的版本)。
我正在大型 table 上创建全文索引(使用命令行),因此我预计它会花费很长时间。不幸的是,每次我在一段时间后(大约 1 小时)收到此错误:
mysql> CREATE FULLTEXT INDEX ix_fulltext_catalog ON catalog(catalog_content);
ERROR 2013 (HY000): Lost connection to MySQL server during query
然后当我尝试 运行 任何命令时,它只是重新连接:
mysql> show variables like 'connect_timeout';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 8
我尝试将许多变量设置为更高的值,但没有帮助。这些是我的价值观:
| Variable_name | Value |
+-----------------------------------------------+--------------------+
| connect_timeout | 172800 |
| disconnect_on_expired_password | ON |
| init_connect | |
| max_connect_errors | 100 |
| max_connections | 151 |
| max_user_connections | 0 |
| mysqlx_connect_timeout | 30 |
| mysqlx_max_connections | 100 |
| performance_schema_session_connect_attrs_size | 512 |
| connect_timeout | 172800 |
| delayed_insert_timeout | 300 |
| have_statement_timeout | YES |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 172800 |
| lock_wait_timeout | 31536000 |
| mysqlx_connect_timeout | 30 |
| mysqlx_idle_worker_thread_timeout | 60 |
| mysqlx_interactive_timeout | 28800 |
| mysqlx_port_open_timeout | 0 |
| mysqlx_read_timeout | 30 |
| mysqlx_wait_timeout | 28800 |
| mysqlx_write_timeout | 60 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| rpl_stop_slave_timeout | 31536000 |
| slave_net_timeout | 60 |
| wait_timeout | 172800 |
+-----------------------------------------------+--------------------+
我也检查了error.log
文件,完全没有错误!看起来服务器在 1 小时后才 'falls asleep',就好像后台什么都没发生一样。有人可以帮忙吗?
编辑: 正如@danblack 建议的那样,我尝试使用 dmesg
并且它显示我 运行 内存不足。
Out of memory: Killed process 489295 (mysqld) total-vm:12674556kB, anon-rss:10791368kB,
file-rss:0kB, shmem-rss:0kB, UID:126 pgtables:21724kB oom_score_adj:0
由于 OOM:
选项 1:
增加索引时减少innodb_buffer_pool_size
(在线)
选项 2:
使用另一个全文搜索实现而不是 MySQL。 Solr、Sphinx-search 等用于文本搜索的专用应用程序可以更好地进行直观搜索。
(免责声明我只使用了 MySQL-8.0 之前的版本)。