MySQL備份與恢復

2021-07-25 07:56:14 字數 1836 閱讀 9811

首先中要的一點,需要在配置檔案中加入log-bin配置項:

log_bin=mysql-bin
然後會在資料儲存的目錄(視不同的作業系統)出現mysql-bin.000001檔案,這就是用來做恢復的檔案.這個會在重啟或者是呼叫flush logssql**就會生成新的乙個檔案.

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';

這樣的語句注意idint型別, 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 後面接資料庫...