標籤:
mysqldump備份大資料出錯技術
maybe yes 發表於2015-01-26 22:58
原文連結 : http://blog.lmlphp.com/archives/72 來自 : LMLPHP後院
網 站的資料會定期備份,現在資料大了,mysqldump 方法估計是不行了,並且失敗了以後並不能接著上次的位置開始備份。報錯內容:mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `table name` at row: 23699。
Lost connection to MySQL server,在使用 mysqldump 的時候(尤其是向 NFS 上備份的時候),很多人都被“mysqldump:Got error:2013: Lost connection to MySQL server during query when dumping table”的問題困擾,在Manual中對這個問題有一些簡單的說明。
在向NFS上備份的時候,資料的流向是這樣的:MySQL Server 端從資料檔案中檢索出資料,然後分批將資料返回給mysqldump 用戶端,然後 mysqldump 將資料寫入到NFS上。一般地,向 NFS 上寫入資料的速度較之Server端檢索發送資料的速度要慢得多,這就會導致 mysqldump 無法及時的接受 Server 端發送過來的資料,Server 端的資料就會積壓在記憶體中等待發送,這個等待不是無限期的,當 Server 的等待時間超過 net_write_timeout(預設是60秒)時它就失去了耐心,mysqldump 的串連會被斷開,同時拋出錯誤 Got error: 2013: Lost connection。
增加 net_write_timeout 可以解決上述的問題的。在實踐中發現,在增大 net_write_timeout 後,Server 端會消耗更多的記憶體,有時甚至會導致 swap 的使用(並不確定是不是修改 net_write_timeout 所至)。建議在mysqldump 之前修改 net_write_timeout 為一個較大的值(如1800),在 mysqldump 結束後,在將這個值修改到預設的60。
Lost connection to MySQL server during query 錯誤
造成這樣的錯誤原因很多
個人經驗認為先試一試這兩個參數,大部分都是這個原因引起的:
bind-address = 127.0.0.1
skip-name-resolve
這兩個參數任意一個就行。
也就是說遇到2006,2013錯誤就重新串連一下MySQL。
MySQL層面,需要配置一些參數 my.cnf
wait_timeout = x 逾時時間
max_allowed_packet = y 最大允許資料量
一般出現這種情況不是所有例句而是單個表,請你先修複表一般都能解決這類問題
備份不要在資料庫壓力較大的時候進行,每天淩晨備份是比較合適的
如果是事務型引擎(InnoDB),建議使用 --single-transaction 參數,這樣可以讓鎖表時間變得很短。
上 面是做法估計是行不通了,網站在虛擬機器主機上,修改 MySQL 配置是不太可能的。MySQL 官網也有類似的報告 http://bugs.mysql.com/bug.php?id=47702 。暫時只能使用 --ignore-table=<database>.<table> 選項忽略比較大的表暫時不備份吧。
閱(69)評(0)查看評論
mysqldump備份大資料出錯