在命令列匯入期間不斷收到「MySQL 伺服器已消失」錯誤

在命令列匯入期間不斷收到「MySQL 伺服器已消失」錯誤

我使用以下命令從使用 mysqldump 在另一台伺服器上建立的 160 MB 檔案中匯入資料。我要導入的環境正在運行最新的 WAMP 伺服器,並將 max_allowed_pa​​cket 設定為「16M」。

C:\wamp\bin\mysql\mysql5.1.36\bin>mysql --max_allowed_packet=15M -u root -pXXX drupal < C:\prod.sql

ERROR 2006 (HY000) at line 644: MySQL server has gone away

這似乎在大約 39 秒並導入 85.5 MB 後持續發生。

我在 my.ini 中讀到了很多關於增加 max_allowed_pa​​cket 的建議,因此我將其設為 16M,而不是預設的 1M。然而,無論我做什麼,我收到的錯誤仍然存在。有任何想法嗎?

現在在 my.ini 中解決:

[wampmysqld]
port        = 3306
socket      = /tmp/mysql.sock
key_buffer = 384M
max_allowed_packet = 100M
table_cache = 4096
sort_buffer_size = 2M
net_buffer_length = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 64M
myisam_sort_buffer_size = 64M
basedir=c:/wamp/bin/mysql/mysql5.1.36
log-error=c:/wamp/logs/mysql.log
datadir=c:/wamp/bin/mysql/mysql5.1.36/data
thread_cache_size = 8
query_cache_size = 32M

innodb_buffer_pool_size = 384M
innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 10M
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 100

wait_timeout = 28800

[mysqldump]
quick
max_allowed_packet = 100M

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

答案1

sql中的資料結構是什麼?

其中一列可能是一個 blob,可能是大於 16M 的圖像或 PDF。為什麼不將 max_allowed_pa​​cket 設為 160MB(因為沒有一個資料包可以大於整個檔案大小)並再次測試它,您可以隨時將其切換回來。

如果您使用 SHOW TABLE STATUS 命令獲取匯入的資料來獲取資料大小,則可以獲得更準確的值,然後您將看到它應該有多大。

然而,該錯誤非常普遍,並且列出了您看到該錯誤的可能原因在mysql網站上

您必須逐一檢查才能找到問題所在,但根據我的經驗,問題始終是資料包太大。正是出於這個原因,我在我的一台生產設備上將 max_packet_size 設定為 180MB。

答案2

嘗試將 my.cnf 中的 wait_timeout 設定為 100,然後重新啟動伺服器

wait_timeout = 100

答案3

雖然理查德的答案是常見的解決方案,但請檢查您的.err日誌。 MySQL 可能記憶體不足並重新啟動。我最近也遇到過這種情況,硬體故障。

相關內容