當前位置:首頁 » 數據倉庫 » innodb恢復資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

innodb恢復資料庫

發布時間: 2022-05-30 01:57:10

❶ mysql的數據刪除後怎麼恢復

如果你要恢復的資料庫是包含授權表的mysql資料庫,您將需要使用--skip贈款-tables選項來運行伺服器恢復整個資料庫
- 首先,。否則,伺服器會抱怨不能找到授權表。恢復表後,執行mysqladmin沖水privileges告訴伺服器裝載授權表,並用它們來啟動。資料庫目錄到其他地方的原始內容

復制。例如,您可以使用它們在以後的事後分析檢查表(驗屍)的崩潰。
酒店與最新的資料庫備份文件重新載入。如果您打算使用mysqlmp的所載入的文件,則需要輸入它們作為mysql的。如果您打算使用從資料庫文件直接拷貝(例如,使用tar或CP),它會復制他們直接回資料庫目錄中。然而,在這種情況下,你應該在關閉之前,該伺服器復制這些文件,然後重新啟動它。在備份過程中

重做日誌,然後查詢更新資料庫表中。對於所有可用的更新日誌,你可以使用它作為mysql的輸入。指定--one-database選項,因此MySQL只是要還原的資料庫執行查詢。如果你意識到有必要使用所有的更新日誌文件,可以使用包含以下命令日誌的目錄:

%LS-TRL更新(0-9)* | xargs的貓| mysql--。一個資料庫DB_NAME

ls命令生成一個單獨的日誌文件更新列表,更新日誌文件根據伺服器(你知道,如果你其中的任何文件,排序順序生成的順序進行排序會發生變化,這將導致在更新日誌中以錯誤的順序使用)。有限公司您可能需要使用一些更新日誌。例如,如果日誌,因為命名update.392備份,pdate.393等產生的,可以在命令重新運行它們:

%的mysql - 一個資料庫DB_NAME <錄入。 392
%的mysql - 一個資料庫DB_NAME <updata.393 ...

如果您正在運行的恢復,並打算使用更新日誌恢復由於失誤降數據的基礎上,DROPTABLE或DELETE語句和丟失的信息時,一定要在開始更新日誌刪除這些語句。

恢復單個表

恢復單個表是非常困難的。如果是的mysqlmp備份文件生成的,它只是不包含數據,您需要一個表,你需要提取的相關線路,並利用它們作為mysql的輸入,這部分比較容易。困難的是,提取在該表的更新日誌中使用的片段。你會發現:mysql_find_rows工具在這方面有所幫助,它可以提取多行從更新日誌查詢。另一種可能性是使用另一台伺服器

恢復整個資料庫,然後將該文件復制到表的原始資料庫。這其實很容易!當文件被復制回資料庫目錄,確保原始資料庫伺服器關閉。

❷ Mysql中InnoDb數據如何恢復重做了系統,只有data文件夾還在

停止MySQL服務。
修改my.ini,
在文件最後增加上面一行指令 innodb_force_recovery=4
修改文件中datadir以及innodb_data_home_dir的指向--指向之前的數據文件目錄。
保存my.ini。
重新啟動MySQL。
檢查資料庫及表,是否恢復正常。
如正常,去掉my.ini中的innodb_force_recovery = 4
重新啟動MySQL。
OK。

❸ 如何從MySQL/InnoDB數據文件中的恢復數據

停止mysql服務。
修改my.ini,
在文件最後增加上面一行指令
innodb_force_recovery=4
修改文件中datadir以及innodb_data_home_dir的指向--指向之前的數據文件目錄。
保存my.ini。
重新啟動mysql。
檢查資料庫及表,是否恢復正常。
如正常,去掉my.ini中的innodb_force_recovery
=
4
重新啟動mysql。
ok。

❹ innodb結構資料庫損壞恢復方法有哪些

這種情況,要是很重要的資料庫,還是直接尋求專業的數據恢復機構處理吧,免得加重問題,導致最終徹底丟失無法恢復

❺ mysql8 ibdata文件丟失怎麼恢復數據

因為磁碟空間不足,我的一個虛擬機伺服器崩潰了。結果資料庫伺服器進程無法啟動,數據也就無法導出。只能想辦法從資料庫原始文件 ibdata 和 frm 文件中恢復資料庫。
因為沒有經驗,好不容易才找到了恢復方法。特此記錄,以備後用。
磁碟空間不足之後,mysqld 進程無法啟動,提示「Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)」。這真是讓人無比頭大,資料庫根本連接不上。
目錄 Contents
1. 保存原始資料庫文件
2. 恢復方法
3. 參考資料:
1. 保存原始資料庫文件¶
好在資料庫原始文件還在。在我的系統環境和配置情況下,這些文件位於 /var/lib/mysql/ 文件夾下面。假設資料庫名是 test,則這些文件表現為:
--mysql
|--test
|--1.frm
|--2.frm
|...
|--mysql
|...
|--ib_logfile0
|--ib_logfile1
|--ibdata1
|...
這些就是原始資料庫文件,可以用來恢復資料庫。將這些文件額外保存一份,以防萬一。
2. 恢復方法¶
我的原始虛擬機完全沒有磁碟空間而無法啟動資料庫伺服器進程。雖然試著刪除一些不需要的文件,但是資料庫卻始終無法連接。於是我新建了一個幾乎一樣的虛擬機(當然磁碟加大了),試圖將這些資料庫文件導入並恢復資料庫。
在經歷了很多錯誤之後,終於找到了正確的方法:
安裝完成新伺服器之後,通過命令行新建了與原來一樣的資料庫:資料庫名稱、用戶名、密碼都一樣。如果有多個資料庫需要恢復,就都給建好。(跟配置新伺服器一樣,參見安裝和配置 MYSQL 資料庫伺服器。)
停止 mysqld 進程
service mysqld stop
將備份的原始資料庫文件中的所有 .frm 文件(保持原來的目錄結構)和 ibdata1 文件復制到新伺服器的資料庫文件目錄中(如果新伺服器操作系統和配置環境一樣,那麼目錄結構也一樣),其它文件不要。
使用 -innodb_force_recovery=6參數啟動資料庫伺服器進程,這里是
/etc/init.d/mysqld start -defaults-file=/etc/my.cnf -standalone -console -innodb_force_recovery=6
OK,資料庫恢復完成。

❻ 怎樣修復損壞了的innodb 表

InnoDB表損壞
InnoDB擁有內部恢復機制,假如資料庫崩潰了,InnoDB通過從最後一個時間戳開始運行日誌文件,來嘗試修復資料庫。
大多數情況下會修復成功,而且整個過程是透明的。
假如InnoDB自行修復失敗,那麼資料庫將不能啟動。
在繼續操作前,先瀏覽下MySQL的日誌文件,確定資料庫是因為InnoDB表的損壞而崩潰。
有一種方法是更新InnoDB的日誌文件計數器以跳過引起崩潰的查詢,這種情況下,將造成數據的不一致性而且會經常使主從復制中斷。
一旦確定MySQL因為InnoDB表損壞無法啟動時,就可以按照以下5步進行修復:
1.添加如下配置到/etc/my.cnf文件中
innodb_force_recovery = 4
2.這時就可以重新啟動資料庫了,在innodb_force_recovery配置的作用,所有的插入與更新操作將被忽略;
3.導出所有的數據表;
4.關閉資料庫並刪除所有數據表文件及目錄,再運行 mysql_install_db來創建MySQL默認數據表;
5.在/etc/my.cnf中刪除innodb_force_recovery這一行,再啟動MySQL(這時MySQL正常啟動);
6.從第3步備份的文件中恢復所有的數據。

❼ 怎麼恢復MySQL資料庫 InnoDB類型的數據

- 恢復策略
前面說到未提交的事務和回滾了的事務也會記錄Redo Log,因此在進行恢復時,這些事務要進行特殊的的處理.有2中不同的恢復策略:
A. 進行恢復時,只重做已經提交了的事務。
B. 進行恢復時,重做所有事務包括未提交的事務和回滾了的事務。然後通過Undo Log回滾那些未提交的事務。
- InnoDB存儲引擎的恢復機制
MySQL資料庫InnoDB存儲引擎使用了B策略, InnoDB存儲引擎中的恢復機制有幾個特點:
A. 在重做Redo Log時,並不關心事務性。 恢復時,沒有BEGIN,也沒有COMMIT,ROLLBACK的行為。也不關心每個日誌是哪個事務的。盡管事務ID等事務相關的內容會記入Redo Log,這些內容只是被當作要操作的數據的一部分。

B. 使用B策略就必須要將Undo Log持久化,而且必須要在寫Redo Log之前將對應的Undo Log寫入磁碟。Undo和Redo Log的這種關聯,使得持久化變得復雜起來。為了降低復雜度,InnoDB將Undo Log看作數據,因此記錄Undo Log的操作也會記錄到redo log中。這樣undo log就可以像數據一樣緩存起來,而不用再redo log之前寫入磁碟了。

包含Undo Log操作的Redo Log,看起來是這樣的:

記錄1: <trx1, Undo log insert <undo_insert …>>

記錄2: <trx1, insert …>

記錄3: <trx2, Undo log insert <undo_update …>>

記錄4: <trx2, update …>

記錄5: <trx3, Undo log insert <undo_delete …>>

記錄6: <trx3, delete …>

C. 到這里,還有一個問題沒有弄清楚。既然Redo沒有事務性,那豈不是會重新執行被回滾了的事務?確實是這樣。同時Innodb也會將事務回滾時的操作也記錄到redo log中。回滾操作本質上也是對數據進行修改,因此回滾時對數據的操作也會記錄到Redo Log中。

一個回滾了的事務的Redo Log,看起來是這樣的:

記錄1: <trx1, Undo log insert <undo_insert …>>

記錄2: <trx1, insert A…>

記錄3: <trx1, Undo log insert <undo_update …>>

記錄4: <trx1, update B…>

記錄5: <trx1, Undo log insert <undo_delete …>>

記錄6: <trx1, delete C…>

記錄7: <trx1, insert C>

記錄8: <trx1, update B to old value>

記錄9: <trx1, delete A>

一個被回滾了的事務在恢復時的操作就是先redo再undo,因此不會破壞數據的一致性.
- InnoDB存儲引擎中相關的函數
Redo: recv_recovery_from_checkpoint_start()
Undo: recv_recovery_rollback_active()
Undo Log的Redo Log: trx_undof_page_add_undo_rec_log()

❽ 如何為 MySQL 資料庫修正損壞的 InnoDB

InnoDB擁有內部恢復機制,假如資料庫崩潰了,InnoDB通過從最後一個時間戳開始運行日誌文件,來嘗試修復資料庫。大多數情況下會修復成功,而且整個過程是透明的。

假如InnoDB自行修復失敗,那麼資料庫將不能啟動。無論怎樣一次又一次的嘗試啟動MySQL,它都只是發出一條錯誤信息。這也是在使用 InnoDB時,需要運行master/master的原因,只有這樣才能在一個master宕掉時,還有一台冗餘master做後備。

在繼續操作前,先瀏覽下MySQL的日誌文件,確定資料庫是因為InnoDB表的損壞而崩潰。
有一種方法是更新InnoDB的日誌文件計數器以跳過引起崩潰的查詢,但是經驗告訴我們這不是個好方法。這種情況下,將造成數據的不一致性而且會經常使主從復制中斷。
一旦確定MySQL因為InnoDB表損壞無法啟動時,就可以按照以下5步進行修復:
1.添加如下配置到/etc/my.cnf文件中
innodb_force_recovery = 4
2.這時就可以重新啟動資料庫了,在innodb_force_recovery配置的作用,所有的插入與更新操作將被忽略;
3.導出所有的數據表;
4.關閉資料庫並刪除所有數據表文件及目錄,再運行 mysql_install_db來創建MySQL默認數據表;
5.在/etc/my.cnf中刪除innodb_force_recovery這一行,再啟動MySQL(這時MySQL正常啟動);
6.從第3步備份的文件中恢復所有的數據。