リモート マシンから 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
。