Mysql資料庫意外崩潰導致表數據文件損壞無法啟動的問題解決

来源:https://www.cnblogs.com/liucx/archive/2020/07/20/13343790.html
-Advertisement-
Play Games

問題故障:Mysql資料庫意外崩潰,一直無法啟動資料庫。報錯日誌: 啟動報錯:service mysqld restartERROR! MySQL server PID file could not be found!Starting MySQL. ERROR! The server quit wi ...


問題故障:
Mysql資料庫意外崩潰,一直無法啟動資料庫。
報錯日誌:

啟動報錯:service mysqld restart
ERROR! MySQL server PID file could not be found!
Starting MySQL. ERROR! The server quit without updating PID file (/www/wdlinux/mysql/var/iZ2358oz5deZ.pid).

資料庫error日誌:
200719 22:07:43 InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Error: trying to add tablespace 840 of name './ob_wp/ob_termmeta.ibd'
InnoDB: to the tablespace memory cache, but tablespace
InnoDB: 840 of name './dev_nss/dg_queue.ibd' already exists in the tablespace
InnoDB: memory cache!
200719 22:07:43 mysqld_safe mysqld from pid file /www/wdlinux/mysql/var/iZ2358oz5deZ.pid ended

提示:資料庫啟動時讀取表空間信息時,ob-wp庫中的表ob_users.ibd表數據文件已存在於表空間中。

拓展:
存儲引擎是myisam, 在資料庫目錄下會看到3類文件:.frm、.myi、.myd
      (a) *.frm--表定義,是描述表結構的文件。
      (b) *.MYD--"D"數據信息文件,是表的數據文件。
      (c) *.MYI--"I"索引信息文件,是表數據文件中任何索引的數據樹
存儲引擎是InnoDB, 在data目錄下會看到2類文件:.frm、.ibd
     (a) *.frm--表結構的文件。
     (b) *.ibd--表數據文件

出處:https://www.cnblogs.com/liucx/

方法一:
根據提示信息判定該InnoDB表損壞,於是嘗試將dev_nss庫目錄中的表結構和表數據文件備份
mv ob_termmeta.ibd ob_termmeta.ibd,bak
mv ob_termmeta.frm ob_termmeta.frm.bak
然後重啟了下mysql,發現還是無法啟動,提示其他表數據文件已存在,連續3次將已損壞的文件備份,還是無法啟動。故放棄此方法。


方法二:
1.查閱官網文檔,在mysql配置文件中/etc/my.cnf添加配置,成功啟動
[mysqld]
innodb_force_recovery = 1

2.備份資料庫
mysqldump -h172.168.2.100 -uroot -p -A > mysql_all_bak.sql
如遇報表不存在,mysqldump可以添加參數:--force ,跳過錯誤

3.刪除資料庫
drop database hxdb; 或者將資料庫資料庫目錄 mv hxdb hxdb_bak (保險)

4.去掉參數 innodb_force_recovery
將之前設置的參數去掉後,重新啟動資料庫

5.導入數據
mysql -uroot -p < mysql_all_bak.sql
Warning: Using a password on the command line interface can be insecure.
ERROR 1050 (42S01) at line 25: Table '`hxdb`.`tb_info`' already exists

如果提示表已經存在,這是因為將innodb_force_recovery參數去掉後,資料庫會進行回滾操作,會生成相應的ibd文件,所以需要將該文件刪除掉,刪除後重新導入
mysql -uroot -p < mysql_all_bak.sql


註:
innodb_force_recovery參數解釋:崩潰恢復模式,通常只有在嚴重故障排除情況下才會改變。可以的值是從0到6。

只有在緊急情況下才將這個變數設置為大於0的值,這樣你才能啟動InnoDB並轉儲你的表。作為一種安全措施,當innodb_force_recovery大於0時,InnoDB可以防止插入、更新或刪除操作。
在5.6.15,innodb_force_recovery設置為4或更大,將InnoDB設置為只讀模式。由於relay_log_info_repository=TABLE和master_info_repository=TABLE在InnoDB表中存儲信息,這些限制可能導致複製管理命令失敗並出現錯誤。

innodb_force_recovery預設情況下為0(正常啟動而不強制恢復)。允許的非零值 innodb_force_recovery是1到6。較大的值包括較小值的功能。例如,值3包含值1和2的所有功能。
如果能夠轉儲 innodb_force_recovery值為3或更小的表,則相對安全的是,僅丟失損壞的單個頁面上的某些數據。4或更大的值被認為是危險的,因為數據文件可能會永久損壞。值6被認為是過分的,因為資料庫頁面處於過時狀態,這反過來可能會使B樹 和其他資料庫結構遭受更多破壞。

為了安全起見,請InnoDB防止 INSERT, UPDATE或 DELETE在innodb_force_recovery大於0 時進行操作 。從MySQL 5.6.15開始, 在只讀模式下innodb_force_recovery設置4個或更多位置InnoDB。
1 (SRV_FORCE_IGNORE_CORRUPT)
讓伺服器運行,即使它檢測到一個損壞的頁面。嘗試讓SELECT * FROM tbl_name跳過損壞的索引記錄和頁面,這有助於轉儲表。
2 (SRV_FORCE_NO_BACKGROUND)
阻止主線程和任何清除線程運行。如果在清除操作期間發生崩潰,則此恢復值將防止崩潰。
3 (SRV_FORCE_NO_TRX_UNDO)
在崩潰恢復後不運行事務回滾。
4 (SRV_FORCE_NO_IBUF_MERGE)
防止插入緩衝區合併操作。如果它們會導致崩潰,就不要做。不計算表統計信息。此值可能永久損壞數據文件。使用此值後,準備刪除並重新創建所有二級索引。在MySQL 5.6.15中,將InnoDB設置為只讀。
5 (SRV_FORCE_NO_UNDO_LOG_SCAN)
啟動資料庫時不要查看撤銷日誌:InnoDB甚至會將未完成的事務視為已提交。此值可能永久損壞數據文件。在MySQL 5.6.15中,將InnoDB設置為只讀。
6 (SRV_FORCE_NO_LOG_REDO)
在恢復時不執行重做日誌前滾。此值可能永久損壞數據文件。使資料庫頁面處於過時狀態,這反過來可能會給b -樹和其他資料庫結構帶來更多損壞。在MySQL 5.6.15中,將InnoDB設置為只讀。

出處:https://www.cnblogs.com/liucx/

參閱官網:
https://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html
https://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_force_load_corrupted

希望能幫到你


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java整個堆大小設置 Xmx 和 Xms設置為老年代存活對象的3-4倍,即FullGC之後的老年代記憶體占用的3-4倍 永久代PermSize和MaxPermSize設置為老年代存活對象的1.2-1.5倍。 永久區並不是老年代的1.2到1.5倍,而是FullGC後永久區的1.2到1.5倍 1.2x ...
  • swap交換記憶體主要是指當物理記憶體不夠用時,系統會啟用硬碟的一部分空間來充當伺服器記憶體,而預設情況下swap記憶體會有一些設置標準,它與物理記憶體的大小也是有關係的,具體標準如下: Ram大小 Swap大小 激活Swap後合計大小 256MB 256MB 512MB 512MB 512MB 1GB 1G ...
  • 一 跨域概述 1.1 同源策略 同源策略是一個安全策略。同源,指的是協議,功能變數名稱,埠相同。瀏覽器處於安全方面的考慮,只允許本功能變數名稱下的介面交互,不同源的客戶端腳本,在沒有明確授權的情況下,不能讀寫對方的資源。 同源策略主要是基於如下可能的安全隱患: 用戶訪問www.mybank.com,登錄併進行網銀 ...
  • 本文更新於2020-04-05,使用MySQL 5.7,操作系統為Deepin 15.4。 使用符號連接分佈IO 利用操作系統的符號連接,將不同的資料庫、表、索引指向不同的物理磁碟,從而達到分佈磁碟IO的目的。 禁止操作系統更新文件的atime屬性 對於讀寫頻繁的資料庫文件來說,記錄文件的訪問時間一 ...
  • Linux(Centos 7) 安裝配置 redis 1.下載reids ( 官網:redis.io,中文網:www.redis.cn) 我下載的是5.0.8版本的 第二步:安裝 解壓(到opt目錄) tar -zxvf redis-5.0.8.tar.gz -C /opt 2.檢查環境(安裝red ...
  • 項目里客戶端突然報錯,原因是SQL Server中某個Function返回值有問題,拿來代碼看還是比較簡單的Function,雖然寫法很不好,但是select dbo.fn_xxxfunction(0)返回值是空就有點奇怪。 IF OBJECT_ID('fn_xxxfunction', 'FN') ...
  • 接上一篇《PG-跨庫操作-dblink》;講下postgres_fdw的使用;postgres_fdw工作原理詳細介紹可以去看下《PostgreSQL指南》第4章; 對FDW特性;還支持在PostgreSQL異構資料庫的同步、遷移的場景。FDW隨著Postgres版本而升級、優化,對分散式架構也是支 ...
  • 墨天輪資料庫周刊第33期發佈啦,每周1次推送本周資料庫相關熱門資訊、精選文章、乾貨文檔。 ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...