1. 程式人生 > >人工誤刪除innodb ibdata資料檔案,如何恢復

人工誤刪除innodb ibdata資料檔案,如何恢復

1.用sysbench模擬資料寫入
sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 --max-requests=10000 \
--num-threads=100 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=admin --mysql-password=Dmjxjbgc6u \
--mysql-db=test --max-time=600 --mysql-socket=/tmp/mysql3306.sock prepare
2.用rm -f ib*刪除資料檔案和重做日誌檔案

資料庫可以正常工作,不要把mysqld程序殺死,且不能關閉mysql服務

恢復工作:
a 查到mysqld的pid
[[email protected] binlog]$ netstat -nltp|grep mysqld
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 :::3306                     :::*                        LISTEN      18401/mysqld

這裡18401
2.利用程序pid檢視對應的檔案描述符
[[email protected] binlog]$ ll /proc/18401/fd|egrep 'ib_|ibdata'
lrwx------ 1 mysql mysql 64 8月  11 10:33 10 -> /mysql/server/data/ib_logfile1
lrwx------ 1 mysql mysql 64 8月  11 10:33 11 -> /mysql/server/data/ib_logfile2
lrwx------ 1 mysql mysql 64 8月  11 10:33 4 -> /mysql/server/data/ibdata1
lrwx------ 1 mysql mysql 64 8月  11 10:33 9 -> /mysql/server/data/ib_logfile0

上面的10、11、4和9就是我們要恢復的檔案

3、關閉前端業務或執行flush tables with read lock;  不讓有資料寫入

4、驗證有沒有資料寫入

a.先輸入下面命令,讓髒頁儘快寫入到磁盤裡
set global innodb_max_dirty_pages_ptc=0;
b.檢視binlog日誌寫入情況,確保file和position沒有變化  show master status;
c.最後檢視innodb狀態資訊,確保髒頁已刷入到磁碟中
show engine inndodb status\G

TRANSACTIONS
...........
trx id counter A21837
Purge don for trx's n:o<A21837 undo n:o<0
##確保後臺purge程序把undo log全部清除掉,事務ID要一致


INSERT BUFFER AND ADAPTIVE HASH INDEX
Ibuf:size 1,free kust keb 65,seg size67,0 merges
##插入buffer合併插入快取等於1


LOG
Log sequence number xxxx
Log flushed up to xxxx
Last checkpoint at xxx
##確保這3個值不在變化


BUFFER POOL AND MEMORY
............
Modified db pages 0
##確保髒頁數量為0


ROW OPERATIONS
..................
0.00 inserts/s,0.00 updates/s,0.00 deletes/s,0.00 reads/s
#確保插入、更新、刪除為0

5.恢復操作

[[email protected] binlog]$ ll /proc/18401/fd|egrep 'ib_|ibdata'
lrwx------ 1 mysql mysql 64 8月  11 10:33 10 -> /mysql/server/data/ib_logfile1
lrwx------ 1 mysql mysql 64 8月  11 10:33 11 -> /mysql/server/data/ib_logfile2
lrwx------ 1 mysql mysql 64 8月  11 10:33 4 -> /mysql/server/data/ibdata1
lrwx------ 1 mysql mysql 64 8月  11 10:33 9 -> /mysql/server/data/ib_logfile0


將上面檔案複製並改名:

cp 10 /mysql/server/data/ib_logfile1
cp 11 /mysql/server/data/ib_logfile2
cp 4 /mysql/server/data/ibdata1
cp 9 /mysql/server/data/ib_logfile0

授權:
cd /mysql/server/data
chown -R mysql:dba ib*

最後重啟mysql

相關推薦

人工刪除innodb ibdata資料檔案如何恢復

1.用sysbench模擬資料寫入sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 --max-requests=10000 \ --num-threads=100 --my

0929刪除innodb ibdata數據文件

-i serve sta slow 再次 warn ads 查看 操作 今天在群裏看到有人說不熟悉innodb把ibdata(數據文件)和ib_logfile(事務日誌)文件誤刪除了。不知道怎麽解決。當時我也不知道怎麽辦。後來查閱相關資料。終找到解決方法。其實恢復也挺簡單的

MFC下對檔案資料夾的操作(複製、剪下、刪除、建立資料檔案)

1 void CFileOperationDlg::OnButtonCopy() 2 { 3 // TODO: Add your control notification handler code here 4 UpdateData(TRUE); 5 CString m_

linux刪除 dev 下特殊檔案怎麼辦

若不小心誤刪除了 /dev/null 這樣的特殊檔案,或者chroot到其他目錄需要手工建立 /dev/null 怎麼辦呢?   我們可以用 mknod 來重新建立   sudo /bin/mknod -m 0666 /dev/null c 1 3

IO流讀取資料檔案資料寫入資料庫並記錄資料匯入日誌

流程分析: 資料型別: ROUTE_ID,LXBM,ROAD_NAME,SRC_LON,SRC_LAT,DEST_LON,DEST_LAT 10000,G50,滬渝高速,115.8605349,30.08934467,115.5437817,30.08898601 10001,G

伺服器刪除虛擬機器資料恢復成功

一、伺服器資料恢復描述 需要進行資料恢復的伺服器採用Linux作業系統、EXT4檔案系統。由於實習生操作失誤將伺服器上的KVM虛擬機器刪除了3臺。該伺服器上每臺虛擬機器包含一個qcow2格式的磁碟檔案,和一個大小約為1.2T的raw格式的磁碟檔案,主要需恢復raw格式的磁碟檔案。 二、

MongoDB匯入大的json、csv資料檔案匯入不完全的解決方法

轉載文章:轉自:點選開啟“https://blog.csdn.net/qq_33206732/article/details/78788483#commentsedit” 昨天,做了一個東西,就是把生產上的mongodb資料使用mongoexport匯出了一個.json檔案用於本地做分析使用,裡

rac遷移ocr,votedisk,引數檔案資料檔案控制檔案密碼檔案redoundotempasm磁碟

概述:資料庫沒有開啟歸檔,當前環境12.1。votedg(normal)遷移到dg_vote(external),把votedg下的磁碟新增到dg_vote中,並幹掉votedg 因為只建立了votedg磁碟組,cdb,pdb也建立在上面,過程還是比較複雜,因為資料庫很多檔案都放在voted

清空回收站的檔案也可以找回來嗎?

相信大家的windows系統的回收站都是放置於系統盤的吧,回收站的檔案過多會影響我們系統盤的使用的,所有大多是人都有清除回收站資料的習慣,但是總會遇到想要找回的時候呀。**superrecovery**的誤清空回收站資料恢復功能對資料進行恢復處理。【當然,超級資料恢復軟體的誤清空回收站資料恢

ZT:mysql資料庫刪除後的資料恢復操作說明

在日常運維工作中,對於mysql資料庫的備份是至關重要的!資料庫對於網站的重要性使得我們對mysql資料的管理不容有失! 然後,是人總難免會犯錯誤,說不定哪天大腦短路了來個誤操作把資料庫給刪除了,怎麼辦??? 下面,就mysql資料庫誤刪除後的恢復方案進行說明。

工作記錄:處理閃燈資料檔案需要將10進位制轉為3位十六進位制

Vixen生成的.csv檔案,需要把裡面的資料轉為3位的16進位制。自己寫了一個程式來處理,在此記錄一下。 平臺:Qt Creator /*********************** * Name : main.cpp * Author : Lon * Date

linux資料檔案恢復

--------------建立測試表 [[email protected] ~]$ sqlplus / as sysdba SQL>create user test identified by test default tablespace users;

linux平臺通過lsof命令恢復刪的oracle資料檔案

背景:測試環境suse12作業系統,開發人員誤刪了/home/oracle下面的資料檔案             oracle狀態看起來一切正常,但資料檔案已經被rm掉。 恢復方法:通過lsof命令找到被刪除的資料檔案,拷貝出來

jdk8刪除非空資料拷貝自StackOverflow

import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Comparator

如何恢復DB2中刪除表的資料

1. 首先資料庫要可以前滾恢復(資料庫配置引數logretain或userexit開啟)。 db2 connect to dbname db2 update db cfg using logretain on db2 backup db dbname (當開啟歸檔日誌後,該資料庫會處於rollforward

使用logmnr方法找回被刪除Oracle的資料的指令碼

俗話說,常在河邊走,哪有不溼鞋的。作為一個經常與資料庫打交道的程式設計師,偶爾不小心誤刪除或誤操作的資料也是在所難免的。如果是Oracle資料庫,這裡給您介紹一種從日誌中找回資料的辦法,下面這個地址是我以前曾經做過的一個指令碼,在plsql的command中執行,供您參考

刪ORACLE的DBF檔案導致無法啟動ORACLE。

微博:https://weibo.com/6274976536/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1 錯誤:ORA-01033: ORACLE initialization or shutd

IMP非DBA使用者匯出的dmp資料檔案提示需要DBA

【問題背景】:     DMP資料庫檔案在匯入時,提示“IMP-00013只有 DBA 才能匯入由其他 DBA 匯出的檔案”,在跟資料提供方確認是用的非DBA使用者匯出的,而且fromuser,touser的設定正確。     雖然使用者可以通過DBA臨時授權能

Linux 平臺下 刪 oracle 資料檔案恢復方法

1  問題描述 之前寫過一篇刪除oracle home目錄的blog,參考: 本篇是這邊的引深,本來應該是年前整理的,拖到年後了。 模擬現狀:     資料庫在正常執行,誤操作,直接rm 掉了資料檔案。 測試環境: [[email protec

c# 刪除程式佔用的檔案強力刪除檔案徹底刪除檔案解除檔案佔用

c# 刪除程式佔用的檔案,清理刪除檔案,徹底刪除檔案,解除檔案佔用 檔案開啟時,以共享讀寫模式開啟 FileStream inputStream = new FileStream(name, FileMode.Open, FileAccess.Read, FileSha