Из экземпляра GCE я выполняю следующее из командной строки
> mysql -udbase -p -DmyDb -hmyIp
>
> mysql> SELECT account, count(account)
> -> FROM `headers`
> -> where labelIds='["SENT"]'
> -> group by account order by 2 desc limit 0,50;
После запуска я слежу за командой SQL в другой оболочке, проверяя список процессов. Я вижу SQL, processId и время, необходимое для выполнения.
После этого последнего теста processId изменился с Query на режим сна через 1172 секунды.
Однако команда mysql не получает ответа, она просто остается там, как будто все еще ожидая ответа от CloudSql.
Через минуту или две processID исчезает из списка процессов, а команда mysql все еще присутствует, как будто ожидая.
Спустя очень долгий период времени (более 2 часов, оставил на ночь) я наконец получил:
ОШИБКА 2013 (HY000) в строке 1: потеряно соединение с сервером MySQL во время запроса
Это похоже на разрыв связи между GCE и CloudSQL, просто клиент этого не осознает.
Согласно рекомендациям в другом посте, я преувеличил цифры в
sudo / sbin / sysctl -w net.ipv4.tcp_keepalive_time = 1800 net.ipv4.tcp_keepalive_intvl = 1800 net.ipv4.tcp_keepalive_probes = 50
Но единственное, что это могло сделать, - это продлить время между завершением запроса и окончательным отключением клиента.
Если применяется net_read_timeout, не должен ли клиент выдавать ошибку намного раньше?
Спасибо за вашу помощь.
Я неправильно прочитал статью об устранении неполадок https://cloud.google.com/compute/docs/troubleshooting#communicatewithinternet фиксация всех параметров исправила это