如果我的 ssh 會話超時,mysql db 導入會被中斷嗎?
我有一個大型(幾 GB)mysql 數據庫,我打算通過它導入
mysql -u root -p mydb < mydb.sql
在 SSH 會話中。
如果我的 SSH 連接斷開會發生什麼?
執行類似的東西是否更安全
nohup mysql -u root -p mydb < mydb.sql
還是mysql不在乎?
使用以下
- MySQL 5.1.45
- CentOS 5.x
如果 SSH 在沒有將 mysql 會話置於後台(連同 nohup 一起)的情況下斷開,則數據庫連接受 SSH 會話的支配。所以,是的,mysql 會關心 SSH 會話的生命週期。
您應該
&
在最後啟動它,如下所示:nohup mysql -u root -p mydb < mydb.sql &
然後,您可以感覺OK(此時您實際上可以有意註銷)離開,因為程序1(
init
)將在SSH會話終止(自願或非自願)時獲取正在執行mysql會話的程序ID,因為它是突然的孤兒(多麼偉大的父親!!!)。
聚會有點晚了,但我自己在這個問題上苦苦掙扎,找到了解決方案並想分享。
解決方案 1
使用 screen 非常適合這種情況,因為即使您關閉終端,您的程序也會執行。
sudo apt install screen
打開一個螢幕
screen
現在您可以在此處執行命令並導入 mysql db 轉儲。
mysql -u username -p database_name < sqldump.sql
或者只需登錄到您的數據庫並導入文件source /var/www/html/db/my_database.sql;
退出螢幕“ctrl + a + d”
您可以通過以下方式列出可用的螢幕
screen -ls
只需通過以下方式打開螢幕screen -r
工作完成後,只需打開螢幕並使用
exit
命令關閉螢幕。解決方案 2
第二種方法是使用 nohup ,我注意到有時 nohup 在會話關閉時也會終止。要排序,你必須使用
disown
nohup mysql -u'root' -p'password' databasename < sqldump.sql & > sql_load.log 2>sql_load_err.log disown %1