Не удалось выполнить оператор: потеряло соединение с сервером MySQL во время запроса - PullRequest
0 голосов
/ 28 мая 2018

Передавая фрейм данных R в таблицу базы данных MySQL (MariaDB), я получаю следующую ошибку: Lost connection to MySQL server during query

Пример данных можно загрузить в R с помощью этой команды

cntxt <- read.delim("http://ec.europa.eu/eurostat/estat-navtree-portlet-prod/BulkDownloadListing?sort=1&file=comext%2FCOMEXT_METADATA%2FCLASSIFICATIONS_AND_RELATIONS%2FENGLISH%2FCN.txt", header = FALSE, quote = "", stringsAsFactors = FALSE)

Я использую пакет RMySQL для передачи фрейма данных в базу данных:

con <-  RMySQL::dbConnect(RMySQL::MySQL(), dbname = "test")    
RMySQL::dbWriteTable(con, "cntxt", cntxt, row.names = FALSE, overwrite = TRUE)

Операция записи в базу данных отлично работает на моем ноутбуке для таблиц любого размера.Но на сервере он возвращает ошибку.Ошибка появляется только для достаточно больших таблиц (более 1000 строк):

dbWriteTable() успешно для 1000 строк данных

RMySQL::dbWriteTable(con, "cntxt", head(cntxt,1000), row.names = FALSE, overwrite = TRUE)
# [1] TRUE

dbWriteTable() не удается для 2000 строк данных

RMySQL::dbWriteTable(con, "cntxt", head(cntxt,2000), row.names = FALSE, overwrite = TRUE)
# Error in .local(conn, statement, ...) : 
#  could not run statement: Lost connection to MySQL server during query

Исходя из связанных вопросов , я проверил значение max_allowed_packet:

mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
| max_allowed_packet | 16777216 |

16Mb должно быть более чем достаточно для 2000 строк данных.Откуда исходит ошибка?В mysql ничего не видно в журнале ошибок /var/log/mysql/error.log.

Версия сервера: 10.1.26-MariaDB-0 + deb9u1 Debian 9.1

1 Ответ

0 голосов
/ 29 мая 2018

Замените пакет RMySQL на более новый пакет RMariaDB

install.packages("RMariaDB")

Затем таблицы более 2000 строк могут быть перенесены снова.

con <- RMariaDB::dbConnect(RMariaDB::MariaDB(), dbname="test")
cntxt <- read.delim("http://ec.europa.eu/eurostat/estat-navtree-portlet-prod/BulkDownloadListing?sort=1&file=comext%2FCOMEXT_METADATA%2FCLASSIFICATIONS_AND_RELATIONS%2FENGLISH%2FCN.txt", header = FALSE, quote = "", stringsAsFactors = FALSE)
RMariaDB::dbWriteTable(con, "cntxt", cntxt, row.names = FALSE, overwrite = TRUE)
...