![使用 ssh 運行遠端命令似乎會掛起所有其他網路活動](https://rvso.com/image/652656/%E4%BD%BF%E7%94%A8%20ssh%20%E9%81%8B%E8%A1%8C%E9%81%A0%E7%AB%AF%E5%91%BD%E4%BB%A4%E4%BC%BC%E4%B9%8E%E6%9C%83%E6%8E%9B%E8%B5%B7%E6%89%80%E6%9C%89%E5%85%B6%E4%BB%96%E7%B6%B2%E8%B7%AF%E6%B4%BB%E5%8B%95.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
表。