![sshでリモートコマンドを実行すると、他のすべてのネットワークアクティビティがハングアップするようです](https://rvso.com/image/652656/ssh%E3%81%A7%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E4%BB%96%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%93%E3%83%86%E3%82%A3%E3%81%8C%E3%83%8F%E3%83%B3%E3%82%B0%E3%82%A2%E3%83%83%E3%83%97%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E3%81%A7%E3%81%99.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
。