![запуск удаленной команды с помощью ssh, похоже, останавливает всю остальную сетевую активность](https://rvso.com/image/652656/%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%20%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20ssh%2C%20%D0%BF%D0%BE%D1%85%D0%BE%D0%B6%D0%B5%2C%20%D0%BE%D1%81%D1%82%D0%B0%D0%BD%D0%B0%D0%B2%D0%BB%D0%B8%D0%B2%D0%B0%D0%B5%D1%82%20%D0%B2%D1%81%D1%8E%20%D0%BE%D1%81%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D1%83%D1%8E%20%D1%81%D0%B5%D1%82%D0%B5%D0%B2%D1%83%D1%8E%20%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D1%8C.png)
Я запускаю следующую команду для резервного копирования базы данных MySQL с удаленного компьютера:
ssh [email protected] 'mysqldump mainserver' | gzip -c > mainserver.sql.gz
Я засек время выполнения команды, и, похоже, она занимает около 2,5–3 минут. Кажется, все работает без проблем.
Однако проблема в том, что весь остальной сетевой трафик на удаленном сервере, по-видимому, прерывается.
Удаленный сервер имеет "кометные" http-соединения (соединения, которые остаются открытыми в течение длительного периода), и эти соединения, похоже, останавливаются. Есть также другие TCP-соединения, которые остаются открытыми, которые, похоже, отключаются именно в тот момент, когда указанная выше команда ssh завершается. (по крайней мере, сообщения журнала появляются, когда команда ssh останавливается, но я подозреваю, что до этого никакие данные не передаются).
решение1
База данных заблокирована.
Хотя в вопросе это описано как «весь остальной сетевой трафик на удаленном сервере, похоже, прерван», гораздо более вероятно, что дамп базы данных блокирует (все) таблицы innodb.
В этом сценарии любой процесс чтения/записи в заблокированные таблицы будет ждать завершения дампа, прежде чем он сможет получить блокировку, прочитать/записать в базу данных и завершить запрос. Если весь http-трафик должен читать/писать в базу данных, это создаст впечатление, что весь http-трафик заблокирован.
Предотвращение блокировок
Mysqldump предоставляет--отдельная транзакцияфлаг, который позволяет mysqldumpнетзаблокировать innodb
таблицы.