我有一個其中包含InnoDB表的數據庫,其中一個InnoDB表被標記爲損壞(並且我知道數據丟失等)。但是,當我重新啓動MySQL時,它不會崩潰。Innodb表在執行mysqlcheck時已損壞,但mysql服務器現在或重新啓動時不會崩潰
我預計它會崩潰,但事實並非如此。 (我之前讀過,如果innodb表損壞,MySQL服務器將被停止)
它應該不會崩潰嗎?
innodb是我的默認數據庫引擎。
我有一個其中包含InnoDB表的數據庫,其中一個InnoDB表被標記爲損壞(並且我知道數據丟失等)。但是,當我重新啓動MySQL時,它不會崩潰。Innodb表在執行mysqlcheck時已損壞,但mysql服務器現在或重新啓動時不會崩潰
我預計它會崩潰,但事實並非如此。 (我之前讀過,如果innodb表損壞,MySQL服務器將被停止)
它應該不會崩潰嗎?
innodb是我的默認數據庫引擎。
損壞的表不一定會導致崩潰。你應該修復表,如果可能的話,從備份重新加載表。在腐敗的桌子上操作最好是片狀的,無論如何,它是通過而不是給你正確的結果,因爲你已經發現了。
不要相信系統不「爆炸」的事實 - 數據庫有幾個中間狀態。你現在所在的那個人很可能是「我還沒有爆炸,我正在等待腐敗蔓延並污染其他表格的數據」。如果您知道表格已損壞,請立即行動。
關於修復InnoDB表格,請參閱How do I repair an InnoDB table?。
要驗證InnoDB表是否損壞,請參閱https://dba.stackexchange.com/questions/6191/how-do-you-identify-innodb-table-corruption。
要做到這一點,你需要一個驗收測試將檢查一組數據,並給它一個健康清潔法案 - 與否。將表導出到SQL並查看是否有可能,和/或對元組cardinality和/或關係進行檢查,以及...你會得到我的漂移。 在沒有人需要寫入的表上,以便任何修改都等於損壞,磁盤文件的MD5可能會更快。
爲了提高效率(例如在生產系統中),您可以考慮文件快照或數據庫複製甚至高可用性。這些方法將檢測到程序性損壞(例如一個惡意UPDATE),但可能無法檢測到主機上的某些硬件損壞(給出一個錯誤的否定結論:從機上的檢查泛出,和數據仍然損壞主人),或者可能在從服務器中出現故障(由於主服務器上的數據實際上沒有被識別,所以失敗併產生誤報)。
監測系統重要統計數據非常重要(也是有效的),既可以捕捉即將發生的故障的第一個症狀(例如使用SMART)併爲法醫調查提供數據(「每當數據庫出故障時總是在系統負載突然高峯後不久 - 如果我們發現導致那麼?「)。
當然要依靠完整和充足的備份(並且時不時地運行一次測試恢復。在那裏,完成了這一步,把我的屁股交給了我)。
腐敗源與軟件的設置而異。一般來說,東西必須闖入server memory representation-writer process-OS handle-journaling-IOSS-OS cache-disk-disk cache-internal file layout
鏈,並造成嚴重破壞。
不正確的系統關閉可能會在多個層面混亂,導致數據無法在管道的任何階段被寫入。
用最後一個階段(使用自己的管道,其中服務器什麼都不知道)來處理磁盤上的文件。
其他更esotheric可能性存在:
hdparm
將您的硬盤拉得太細。如果每個組件都適合該性能水平並且知道它或至少能夠發出信號(如果它不是),那麼將磁盤設置爲最高性能是非常好的。有時你所得到的所有「警告」都是系統故障。hddhealth
或smartctl
)。當然,還有更多其他的可能性取決於設置。谷歌搜索文件損壞發現一個萬頁;有用的術語添加到查詢文件系統(ext4,NTFS,brtfs,...),硬盤製造商和型號,操作系統,軟件遭遇問題,其他軟件安裝。
我需要知道的是,是否有任何其他機制發現這種腐敗?如果我在生產中有一個數據庫,並且我想監視它以儘早檢測到腐敗,我應該怎麼做?(因爲根據我的經驗,儘管表損壞了,mysql服務器運行正常) 如果我有一個守護進程運行來監視數據庫的健康狀況,它應該生成什麼命令? mysqlcheck鎖定表,所以看起來不像生產模式中最高效的那樣,對嗎? – Serenade
如果在讀取的頁面中發生損壞,服務器將停止。如果它發生在別處,這是一個問題,因爲檢測問題的最快最可靠的方法是通過讀取數據來觸發它。我認爲你的問題在於表格在崩潰後已經恢復,但是丟失了一些數據,並且完整性被打了。如果經常發生,請仔細檢查您的硬件。如果你有一張「不穩定」的表,把它轉儲到一個.SQL文件中,儘可能檢查並刪除並重新導入。但是,如果你手頭有備份,不要猶豫,使用它。 – LSerni
@iserni,如果你不觸摸內部的mysql文件,我也不會有電源關閉,無論如何,腐敗如何發生? – Pacerier
你有什麼具體問題? 「這個可以嗎?」 「如何讓表在mysqlcheck中不會像腐敗一樣返回?」或者是其他東西? –
我希望它崩潰,我的問題是爲什麼MySQL服務器不崩潰,而innodb表被標記爲損壞? – Serenade