Недавно, я пытался сделать ведомое устройство, работающее путем дампа через 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 во время запроса при дампе таблицы
Решение было довольно легко. Эта проблема произошла, потому что, когда дамп является передающим через ssh канал и операцию, любят, "изменяются", работает, передача данных должна быть остановлена, обвинив, чтобы querie закончился. Время, когда соединение будет ожидать к новым данным, определяется в my.cnf в действительно низкое время (30 секунд по умолчанию).
Для фиксации эта ошибка, единственная необходимая вещь, изменяют это два параметрических усилителя на конфигурации mysql:
net_read_timeout = 3600
net_write_timeout = 3600
Это предотвратит соединение, чтобы получить тайм-аут и запросить эту ошибку.
Из-за docu, определяется как:
Число секунд для ожидания большего количества данных из соединения прежде, чем прервать чтение. Когда сервер читает от клиента, net_read_timeout является управлением значения тайм-аута, когда прерваться. Когда сервер пишет в клиент, net_write_timeout является управлением значения тайм-аута, когда прерваться. См. также slave_net_timeout.