Mysql

如果我的 ssh 會話超時,mysql db 導入會被中斷嗎?

  • March 30, 2020

我有一個大型(幾 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

引用自:https://dba.stackexchange.com/questions/140565