首先中要的一點,需要在配置檔案中加入log-bin
配置項:
log_bin=mysql-bin
然後會在資料儲存的目錄(視不同的作業系統)出現mysql-bin.000001檔案,這就是用來做恢復的檔案.這個會在重啟或者是呼叫flush logs
sql**就會生成新的乙個檔案.
1.假如我們不小心運算元據庫的時候刪除了或者批量更改了資料
這時候
我們需要這樣進行處理:
mysqlbinlog --start-datetime= "2016-1-1 12:00:00" --stop-datetime="2016-1-2 12:00:00" /usr/local/var/mysql/mysql-bin.0* > /tmp/bak.sql
起始時間要恢復資料的起始時間(可以設定久遠一點,這樣可以匯出資料庫全部資料了),截止時間為誤操作的時間(如果不知道,只能整個匯出mysql-bin.000001檔案,然後查詢相應的刪除語句,就會有對應的時間戳與position),上述**會生成可執行的sql語句 注意是在這個時間段的並且屬於mysql-bin.000001這個檔案的.注意mysql-bin.0* 會把所有的mysql-bin檔案集體匯出到/tmp/bak.sql
檔案當中.
2.我們現在得到了要恢復的檔案/tmp/bak.sql
檔案,先把當前的資料庫(被修改的)匯出乙份,以防萬一.
mysqldump -uroot -p -databases dbname > /tmp/my.sql
或者
mysqldump -uroot -p -a > /tmp/my.sql
3.刪除當前資料庫
drop
database dbname
4.匯入從二進位制檔案的資料
mysql -uroot -p < /tmp/bak.sql
這種方式最直接,操作簡單.
至此資料庫恢復完畢,其中可能遇到一些問題.
問題1 分散的資料
假設我們執行的是這樣一條sql語句:
update orders set name = '1liu'
where id = '1liu';
這樣的語句注意id
為int
型別, sql語句不會報錯,並且會查詢id
為1的name
字段更新.
先別驚訝,你可以試下,首先更嚴重的問題是,你需要怎麼恢復?
這條語句直觀反應的問題比較簡單,在實際環境中你可能會遇到比這嚴重多的多的後果.
按上述方式恢復坑定的需要不少的時間,有之前這些修改之前的資料還好說,沒有的話就很難辦.
最最主要的問題是如何查詢到我們之前插入的語句,而且上述執行更改的資料可能是分散的,那就更難辦了.這樣的話只能是重新恢復資料庫.
問題2 mysql-bin的檔案被刪除
你可能會遇到這樣的情況,伺服器的磁碟空間不知不覺的被佔滿,結果一看是mysql-bin的二進位制檔案占用過多的空間,有些人沒有刪除這些檔案之前使用mysqldump
進行備份,那麼可以說這是個噩耗,在沒有二進位制檔案可恢復與備份的情況下刪除資料庫,那麼恢復資料會很困難.
建議:再刪除這些檔案之前,一定要使用mysql-dump
進行一次資料備份,進行mysql-dump
會生成乙個最新的mysql-bin
檔案.
mysql 備份與恢復 MySQL 備份與恢復
1 檢視資料庫的資料儲存在哪個目錄下 shiyanlou mysql uroot e show variables like datadir variable name value datadir var lib mysql 2 備份資料的方法 select into outfile 檔名 或者 s...
mysql 備份與恢復 Mysql 備份與恢復
資料檔案一致性處理 在完全備份的情況下,檔案不是時間點一致的,因為進行快照的時間點不一樣。如果嘗 試在未prepare資料的情況下還原資料庫,雖然操作上支援恢復,但是在啟動的時候仍會 進行資料recovery。執行帶 prepare 選項的 mariabackup 命令會使資料檔案進行統一,達到資料...
mysql備份恢復 mysql之備份與恢復
工作中,我們經常會遇到資料庫的備份與恢復場景 目錄1 mysql的備份與恢復 2 mysql的匯入與匯出 1 mysql的備份與恢復 mysql的備份命令是mysqldump,mysql之備份 mysqldump u user h host port p db table.file u 後面接資料庫...