mysql數(shù)據(jù)庫不小心還原了需要按照以下步驟恢復(fù)。
成都創(chuàng)新互聯(lián)服務(wù)項目包括師宗網(wǎng)站建設(shè)、師宗網(wǎng)站制作、師宗網(wǎng)頁制作以及師宗網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,師宗網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到師宗省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
1、先確認(rèn)MYSQL有沒有啟用bin日志?,就是看下mysql.ini(my.cnf)里的log-bin=mysql-bin,?可以?自定義一個目錄和前綴名,比如/data/log/mylog這樣。
2、然后在數(shù)據(jù)庫文件存放的data目錄就能看到mysql-bin.00000x這樣的文件,這就是二進(jìn)制日志了,可以導(dǎo)出成txt格式的,里面其實就是對數(shù)據(jù)庫的各種操作SQL語句。
3、導(dǎo)出txt文件:
E:\wamp\bin\mysql\mysql5.6.12\binmysqlbinlog --database=testdatabase E:\wamp\bin\mysql\mysql5.6.12\data\mysql-bin.000312 C:\\test1.txt
這是WINDOWS下的導(dǎo)出,linux也是類似的。
database=數(shù)據(jù)庫名
從最早的日志還始還原
linux下可以很方便的?mysql-bin.000*
可以加參數(shù)開始時間和結(jié)束時間,就是你執(zhí)行那條SQL語句的時間
start-datetime="2014-12-04 11:25:56" --stop-datetime="2014-12-04 13:23:50"
4、恢復(fù)數(shù)據(jù):
E:\wamp\bin\mysql\mysql5.6.12\binmysqlbinlog --database=yundongchao E:\wamp\bin\mysql\mysql5.6.12\data\mysql-bin.000179 | mysql -u root -p
------------------------------------------------
數(shù)據(jù)庫丟失了最好的恢復(fù)方法是從備份中還原文件,數(shù)據(jù)庫的文件一般都會有備份。如果備份也損壞了,無法進(jìn)行還原,那就需要使用數(shù)據(jù)恢復(fù)軟件來恢復(fù)了。從網(wǎng)上找恢復(fù)軟件,然后掃描一下,看是否可以搜索到需要的文件。
如果你要恢復(fù)的數(shù)據(jù)庫是包含授權(quán)表的mysql數(shù)據(jù)庫,您將需要使用--skip贈款-tables選項來運(yùn)行服務(wù)器恢復(fù)整個數(shù)據(jù)庫
- 首先,。否則,服務(wù)器會抱怨不能找到授權(quán)表?;謴?fù)表后,執(zhí)行mysqladmin沖水privileges告訴服務(wù)器裝載授權(quán)表,并用它們來啟動。數(shù)據(jù)庫目錄到其他地方的原始內(nèi)容
復(fù)制。例如,您可以使用它們在以后的事后分析檢查表(驗尸)的崩潰。
酒店與最新的數(shù)據(jù)庫備份文件重新加載。如果您打算使用mysqldump的所加載的文件,則需要輸入它們作為mysql的。如果您打算使用從數(shù)據(jù)庫文件直接拷貝(例如,使用tar或CP),它會復(fù)制他們直接回數(shù)據(jù)庫目錄中。然而,在這種情況下,你應(yīng)該在關(guān)閉之前,該服務(wù)器復(fù)制這些文件,然后重新啟動它。在備份過程中
重做日志,然后查詢更新數(shù)據(jù)庫表中。對于所有可用的更新日志,你可以使用它作為mysql的輸入。指定--one-database選項,因此MySQL只是要還原的數(shù)據(jù)庫執(zhí)行查詢。如果你意識到有必要使用所有的更新日志文件,可以使用包含以下命令日志的目錄:
%LS-TRL更新(0-9)* | xargs的貓| mysql--。一個數(shù)據(jù)庫DB_NAME
ls命令生成一個單獨(dú)的日志文件更新列表,更新日志文件根據(jù)服務(wù)器(你知道,如果你其中的任何文件,排序順序生成的順序進(jìn)行排序會發(fā)生變化,這將導(dǎo)致在更新日志中以錯誤的順序使用)。有限公司您可能需要使用一些更新日志。例如,如果日志,因為命名update.392備份,pdate.393等產(chǎn)生的,可以在命令重新運(yùn)行它們:
%的mysql - 一個數(shù)據(jù)庫DB_NAME 錄入。 392
%的mysql - 一個數(shù)據(jù)庫DB_NAME updata.393 ...
如果您正在運(yùn)行的恢復(fù),并打算使用更新日志恢復(fù)由于失誤降數(shù)據(jù)的基礎(chǔ)上,DROPTABLE或DELETE語句和丟失的信息時,一定要在開始更新日志刪除這些語句。
恢復(fù)單個表
恢復(fù)單個表是非常困難的。如果是的mysqldump備份文件生成的,它只是不包含數(shù)據(jù),您需要一個表,你需要提取的相關(guān)線路,并利用它們作為mysql的輸入,這部分比較容易。困難的是,提取在該表的更新日志中使用的片段。你會發(fā)現(xiàn):mysql_find_rows工具在這方面有所幫助,它可以提取多行從更新日志查詢。另一種可能性是使用另一臺服務(wù)器
恢復(fù)整個數(shù)據(jù)庫,然后將該文件復(fù)制到表的原始數(shù)據(jù)庫。這其實很容易!當(dāng)文件被復(fù)制回數(shù)據(jù)庫目錄,確保原始數(shù)據(jù)庫服務(wù)器關(guān)閉。
簡單情況下:進(jìn)入原來mysql安裝路徑下的data文件夾下,找到相應(yīng)的庫和ibdata1,進(jìn)行copy,就可回復(fù)原來的數(shù)據(jù)。
復(fù)雜情況下:
從另一臺機(jī)上把MySQL數(shù)據(jù)庫的mysql文件夾拷貝到本地機(jī)上,目的是恢復(fù)本地機(jī)對數(shù)據(jù)的訪問和操作。經(jīng)過如下幾種情況的操作。
1. 在本地重裝MySQL(安裝目錄D:\Program Files\MySQL\MySQL Server 5.0),直接把mysql文件夾拷貝至D:\Program Files\MySQL\MySQL Server 5.0\。結(jié)果,失?。簲?shù)據(jù)庫連接錯誤。
2. 卸載后重裝MySQL,將D:\Program Files\MySQL\MySQL Server 5.0\下的數(shù)據(jù)備份,只把mysql\data文件夾全部內(nèi)容拷貝到D:\Program Files\MySQL\MySQL Server 5.0\data下。結(jié)果,失敗:數(shù)據(jù)庫連接錯誤。將備份的數(shù)據(jù)還完覆蓋。結(jié)果,失敗,還是連接不上數(shù)據(jù)庫。
3. 卸載后重裝MySQL,將mysql\data文件夾里的cf1,last文件夾(這兩個是原來MySQL里的數(shù)據(jù)庫)拷貝進(jìn)D:\Program Files\MySQL\MySQL Server 5.0\data。連接成功,在Navicat for MySQL里看到數(shù)據(jù)庫cf1和last,但是不能訪問,因為數(shù)據(jù)全為零。明白了原來data里以數(shù)據(jù)庫命名的文件存儲的是數(shù)據(jù)庫的表結(jié)構(gòu),不是元數(shù)據(jù)。下一步,把data文件夾里的ibdata1文件(3.4G大,明顯存儲了元數(shù)據(jù))拷貝到D:\Program Files\MySQL\MySQL Server 5.0\data里,代替原來的ibdata1文件。重啟電腦,打開Navicat for MySQL,連接成功,數(shù)據(jù)可以訪問操作。
至此,操作終于成功。其實當(dāng)初在那臺機(jī)上把數(shù)據(jù)導(dǎo)出來,而不是現(xiàn)在直接把文件夾mysql復(fù)制過來會更容易恢復(fù)。但那臺機(jī)已經(jīng)重裝了系統(tǒng),也就是說MySQL失效了。
在解決的過程中,以下幾種嘗試:
1.如果開啟了日志,直接mysqlbinlog 使用日志恢復(fù)即可。
2.如果不是刪除了一個表的部分?jǐn)?shù)據(jù),而是刪除整個表,那么可以在刪除后馬上用磁盤數(shù)據(jù)恢復(fù)軟件嘗試恢復(fù)。(因為刪除表后會有文件被刪除,而刪除表的部分?jǐn)?shù)據(jù),文件還是存在)
3.找數(shù)據(jù)恢復(fù)的公司,使用工具分析ibdata1(分析過程參考一頁一頁查看有沒有歷史記錄存在,使用ibdata1恢復(fù)數(shù)據(jù),應(yīng)該是在了解數(shù)據(jù)表結(jié)構(gòu)的前提下,數(shù)據(jù)庫除ibdata1外其他數(shù)據(jù)受損不能正常使用數(shù)據(jù)庫時嘗試,而不是刪了表數(shù)據(jù)后恢復(fù)什么的。(事實上,這個文件是存儲現(xiàn)有表數(shù)據(jù)的,其實也可以設(shè)置成每個表一個文件。)
4.mysql下有ib_logfile0和ib_logfile1兩個文件,其實這兩個文件里,記錄了Mysql的一些事物日志,用于事務(wù)的前滾后滾,是Mysql自身使用的,這個文件用文本工具打開后,有很多亂碼,但卻可以查找到被刪除的少量數(shù)據(jù)的insert記錄,極少數(shù)的亂碼通過前后語句找出了原文,最終通過事物日志恢復(fù)了刪除的文件。
注:用事物日志恢復(fù),需要幾個前提。
1:知道被刪除數(shù)據(jù)的大概位置,不要這邊查找,那邊又不斷有新數(shù)據(jù)插入。
2:因為有很多亂碼,適用于查找少量數(shù)據(jù),而不是用作大量數(shù)據(jù)的恢復(fù),浪費(fèi)體力。
3:如果二進(jìn)制日志沒開,沒有備份,那么只能用這種方法恢復(fù)了。
一 加速備份
1、 加了single-transaction參數(shù) 備份時 需要先flush table with read lock 這個過程中會有一個鎖表的過程,如果有事務(wù)或語句正在執(zhí)行,沒有結(jié)束,那么備份進(jìn)程會一直等待,并且阻塞別的事務(wù),那么也會影響業(yè)務(wù)。所以要先確認(rèn)備份的時候沒有大的事務(wù)在運(yùn)行。具體 single-transaction的加鎖可以參考 我的博客:mysqldump備份時加single-transaction會不會加鎖2 、mysqldump是單進(jìn)程的,沒有辦法并行,但現(xiàn)在機(jī)器的瓶頸多是出現(xiàn)在IO方面,可以使用更了的IO設(shè)備加快速度3 、mysqldump時如果空間夠的話,不要邊壓縮邊備份二 加速恢復(fù)
1 關(guān)閉binlog:不寫入Binlog會大大的加快數(shù)據(jù)導(dǎo)入的速度2 innodb_flush_log_at_trx_commit=0
3 更好的配置
建議:
如果非要使用邏輯備份,可以考慮mysqldumper, mysqlpump(5.7)這兩個工具去備份,這兩個在備份的時候支持并行操作,mysqldumper還可以對單表進(jìn)行恢復(fù),在只需要恢復(fù)單表的情況下,恢復(fù)速度會大大加快使用物理備份 xtrabackup (open source),MEB(oracle提供,收費(fèi)): 他們的備份原理是基于mysql crash recover, 備份速度 是和邏輯備份的相差不太大。但是恢復(fù)速度卻有很大的提升。
邏輯備份 備出來的是sql語句文件,恢復(fù)時需要一條一條的執(zhí)行sql,所以恢復(fù)很慢。
而物理備份和還原的速度 相當(dāng)于直接copy文件,所以恢復(fù)的時候性能有很大的提升并且這兩個軟件還支持并行,效果更好。
邏輯備份最大的優(yōu)點是 備份好的文件經(jīng)壓縮后占用空間較小,最大缺點恢復(fù)太慢物理備份可以很快的恢復(fù),但是備份好的文件壓縮后占用空間比邏輯備份要大