Mysql資料不算大,備份卻非常慢

2021-06-23 08:02:11 字數 887 閱讀 5163

環境

硬體:dell 1950, 146g sas 15k rpms * 2, 8g ram

軟體:2.6.9-55.elsmp x86_64, mysql 5.1.x

現象2個庫,其中1個業務庫下有20多個表,表檔案大小總量不到2g。

另乙個為日誌庫,下400多個表,大致是每天會產生5個表,其中有乙個表較大,約400mb,總量約40多gb。

每次備份耗時較長,最嚴重的一次花了5個多小時才完成。

業務庫為當前活動庫,日誌庫則主要用作備份,每天日誌歸檔,過期資料表很少有讀寫請求。

innodb buffer pool總共分配了2g,從系統命令 top 結果來看,mysqld 只分配了 1.7g 記憶體,buffer pool 並沒有全部耗盡。

show engine innodb status 結果中也看到了,buffer pool 確實沒用完,還有不少空閒的。

備份時,觀察 vmstat 結果,發現 bi 和 bo 的量較大,而且兩個的值基本相當,備份其中乙個表約 500mb,耗時 46 秒。

按照這個耗時計算,全部備份出來也不需要5個多小時,這是為什麼呢?

分析大家先分析下,看是什麼原因,稍後給出答案 :)

原因 其實問題原因很簡單,但一般人不容易想到。那就是,那些歷史的日誌表,由於長時間不讀取,大部分資料沒有在innodb buffer中。所以,每次備份時,大部分資料都要產生大量的物理讀,然後再產生物理寫,然而該伺服器只有2塊硬碟,i/o效能有限,所以備份非常慢。

這時候,我們可以有幾種解決辦法:

1. 刪除過期日誌表,或者放到線下的歸檔資料庫上

2. 如果innodb buffer還有大量空閒的話,可以不定期執行select * from table,將這部分資料load到buffer中,減少備份時的物理i/o,提高速度

mysql 備份源資料 mysql 資料備份與還源

一 資料備份 1 使用mysqldump命令備份 mysqldump命令將資料庫中的資料備份成乙個文字檔案。表的結構和表中的資料將儲存在生成的文字檔案中。mysqldump命令的工作原理很簡單。它先查出需要備份的表的結構,再在文字檔案中生成乙個create語句。然後,將表中的所有記錄轉換成一條ins...

mysql備份資料 mysql 備份資料

1 備份命令 格式 mysqldump h主機名 p埠 u使用者名稱 p密碼 dbname tbname 檔名.sql 如果tbname不填,就是單個資料據的所有表 例如 mysqldump h 192.168.1.100 p 3306 uroot ppassword database cmdb d...

mysql資料備份

mysql教程資料庫教程的備份 匯入 匯出 資料匯入 資料匯出 資料庫和資料表的匯入匯出我們用的是mysqldump 來操作,資料的匯入匯出我們用load data infile 與 load data outfile操作 匯出資料庫方法 引數 mysqldump u使用者名稱 p密碼 資料庫 儲存...