你不可能隨時備份資料,但你的資料丟失時,或者資料庫目錄中的檔案損壞時,你只能恢復已經備份的檔案,而在這之後的插入或更新的資料,就無能為力了。解決這個問
題,就必須使用更新日誌。更新日誌可以實時記錄更新、插入和刪除記錄的sql語句。
一、啟用日誌
當以--log-update=file_name選項啟動時,mysqld將所有更新資料的sql命令寫入記錄檔案中。檔案被寫入資料目錄並且有乙個名字file_name.#,這裡#是乙個數字,它在每次
執行mysqladmin refresh或mysqladmin flush-logs、flush logs語句、或重啟伺服器時加1。
如果你不指定file_name,預設使用伺服器的主機名。
如果你在檔案命中指定副檔名,那麼更新日誌不再使用順序檔案,使用指定的檔案。但是當你它在每次執行mysqladmin refresh或mysqladmin flush-logs、flush logs語句、
或重啟伺服器時日誌檔案被清空。
更新記錄很聰明,因為它僅僅記載真正更新資料的語句。因此乙個用where的update或delete找不到行,它就不被寫入記錄檔案。它甚至跳過將設定乙個列為它已經有的值的
update語句。
二、重寫日誌
必須著重指出的是,在下列情況之一,將使用新的日誌檔案——日誌檔案的順序自動增加(未指定file_name或者指定的file_name不包括副檔名)或者清空檔案(指定的
file_name包括副檔名):
命令mysqladmin refresh
命令mysqladmin flush-logs
sql語句flush logs
伺服器重新啟動
三、恢復日誌內容
對於所有的更新日誌檔案,你都可以把它指定為mysql客戶機的輸入,來執行其中的sql語句,恢復資料。例如:
shell>mysql
但是,你可能因為執行drop database誤刪除了,希望只恢復該資料庫的內容,為了這個目的,你可以使用--one-database選項:
shell>mysql --one-database db_name < hostname.nnn
如果你要批量恢復更新日誌的資料,在unix中可以這樣:
$ ls –t –r –l hostname.[0-9]* | xargs cat | mysql --one-database db_name
注意由於檔案是按時間時間排序的,如果你修改的其中的任何檔案,都會因為順序的錯誤導致可能匯入錯誤的資料。
如果按檔案順序恢復資料,就去掉-t和-r選項:
$ ls -l hostname.[0-9]* | xargs cat | mysql --one-database db_name
OpenCV學習筆記(十五)之凸包
老規矩 妹妹鎮樓 輸入候選點,來自findcontours outputarray hull,凸包 bool clockwise,順時針方向 bool returnpoints,true表示返回點個數,如果第二個引數是vector則自動忽略 首先把影象從rgb轉為灰度影象 轉為二值影象 通過發現輪廓...
《設計模式之禪》學習筆記(十五)
命令模式的定義 encapsulat a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable ...
Mysql學習筆記(持續更新中)
1.資料型別的選擇原則 1.不好的設計 1.正規化的優點 1.有時提公升效能最好的方法是同一張表中儲存衍生的冗餘資料,有時也需要建立一張完全獨立的彙總表或快取表 2.物化檢視,mysql並不原生支援,flexviews 3.如果應用在表中儲存計數器,則在更新計數器時可能踫到併發問題,建立一張獨立的表...