mysqldump: Ошибка 2013: Потерянное соединение с сервером MySQL во время запроса при дампе таблицы

Недавно, я пытался сделать ведомое устройство, работающее путем дампа через ssh баз данных.

У меня был discart percona-xtrabackup, потому что мне понравилось выбирать, который базам данных i'de нравится синхронизировать.

Для делают ведомую работу, я использовал следующий сценарий, которые соединяются с ведущим устройством, делает дамп избранной базы данных, и восстановите его:

#!/bin/bash

sql_error_check()
{
    if [ $? -ne 0 ]; then
        echo "ERROR at mysql command!"
        exit 1
    fi
}


DBS=( db1 db2 db3 db4 db5... )
PASSW="SuperSecurePass"

for i in ${DBS[*]}
do
    echo "- Deleting ${i}"
    mysql -p${PASSW} -e "drop database IF EXISTS ${i}"
    sql_error_check
    echo "- Creating ${i}"
    mysql -p${PASSW} -e "create database ${i}"
    sql_error_check
    echo "- Dumping & restoring ${i}"
    ssh -C root@master.hostname "mysqldump -p${PASSW} -q --max_allowed_packet=1024M ${i}" | pv | mysql -p${PASSW} ${i}
    sql_error_check 
done

Каждая вещь, кажется, работает прекрасная, но в некоторых запросах (огромный изменяют таблицы), я получаю ошибку:

mysqldump: Ошибка 2013: Потерянное соединение с сервером MySQL во время запроса при дампе таблицы

0
задан 17 January 2019 в 03:18

1 ответ

Решение было довольно легко. Эта проблема произошла, потому что, когда дамп является передающим через ssh канал и операцию, любят, "изменяются", работает, передача данных должна быть остановлена, обвинив, чтобы querie закончился. Время, когда соединение будет ожидать к новым данным, определяется в my.cnf в действительно низкое время (30 секунд по умолчанию).

Для фиксации эта ошибка, единственная необходимая вещь, изменяют это два параметрических усилителя на конфигурации mysql:

net_read_timeout    = 3600 
net_write_timeout   = 3600

Это предотвратит соединение, чтобы получить тайм-аут и запросить эту ошибку.

Из-за docu, определяется как:

Число секунд для ожидания большего количества данных из соединения прежде, чем прервать чтение. Когда сервер читает от клиента, net_read_timeout является управлением значения тайм-аута, когда прерваться. Когда сервер пишет в клиент, net_write_timeout является управлением значения тайм-аута, когда прерваться. См. также slave_net_timeout.

0
ответ дан 26 October 2019 в 12:52

Другие вопросы по тегам:

Похожие вопросы: