備份前讀鎖定涉及的表,MySQL>LOCK TABLES tbl1 READ,tbl1 READ,…
下面是備份一個數據庫的例子:
1、備份前讀鎖定涉及的表
MySQL>LOCK TABLES tbl1 READ,tbl1 READ,…
如果,你在MySQLdump實用程序中使用--lock-tables選項則不必使用如上SQL語句。
2、導出數據庫中表的結構和數據
shell>MySQLdump --opt db_name>db_name.sql
3、啟用新的更新日志
shell>MySQLadmin flush-logs
這樣可以記錄你備份後的數據改變為恢復數據准備。
4、解除表的讀鎖
MySQL>UNLOCK TABLES;
為了加速上述過程,你可以這樣做:
shell> mysqldump --lock-tables --opt db_name>db_name.sql; MySQLadmin flush-logs
但是這樣可能會有點小問題。上命令在啟用新的更新日志前就恢復表的讀鎖,
在更新繁忙的站點,可能有備份後的更新數據沒有記錄在新的日志中。
現在恢復上面備份的數據庫
1、對涉及的表使用寫鎖
MySQL>LOCK TABLES tbl1 WRITE,tbl1 WRITE,…
2、恢復備份的數據
shell>MySQL db_name < db_name.sql
3、恢復更新日志的內容
shell>MySQL --one-database db_name < hostname.nnn
假設需要使用的日志名字為hostname.nnn
4、啟用新的更新日志
shell>MySQLadmin flush-logs
5、解除表的寫鎖
MySQL>UNLOCK TABLES;
希望上面的例子能給你啟發,因為備份數據的手法多種多樣,你所使用的和上面所述可能大不一樣,但是對於備份和恢復中,表的鎖定、啟用新的更新日志的時機應該是類似的,仔細考慮這個問題。
思考題
請在完成這些思考題之前,啟用常規日志和更新日志,因為下面的思考題將涉及到這個問題。
1、使用帶有帶有--all-databases選項的MySQLdump實用程序,備份你現有的所有數據到一個文件all.sql中(如果你的數據不太多的話),查看輸出的SQL語句。
2、使用帶有--ab選項的MySQLdump,把你的test數據庫中的表結構和數據分別備份到一個目錄中。檢查一下生成的SQL語句與上題中備份文件中的有什麼不同。
3、建立一個新的數據庫test1,把上題的備份文件恢復到該數據庫中。請簡述一下過程。
4、查看你的更新日志和常規日志,看看上述操作是否都留下了記錄以及留下了什麼記錄。
5、先在test數據庫中的任意一個表中INSERT一個記錄,然後在刪除這個記錄。(目的是在更新日志中留下記錄。)刪除數據庫test1,試試如何從更新日志恢復test1數據庫。