一、MySQL的邏輯備份是將數據庫備份成一個文件,這樣有利於查看與編輯。在MySQLk ,使用mysqldump工具來完成邏輯備份;
1、備份指定的庫,或者此庫中的表;
mysqldump [options]db_name [tables]
2、備份指定的一個庫或者多個庫;
mysqldump [options] --database DB1[DB2 DB3......]
3、備份所有數據庫;
mysqldump [options] --all-database
舉例如下;
1、備份所有數據庫:
mysqldump -uroot -p --all-database > all.sql
2、備份product數據庫;
mysqldump -uroot -p product > product.sql
3、備份product數據庫下的code表;
mysqldump -uroot -p product code > code.sql
4、備份product數據庫下的code表和list表;
mysqldump -uroot -p product code list > code_list.sql
......
二、完全恢復;
1、恢復數據庫;
mysql -uroot -p dbname < bakfile
2、重做備份日志;
mysqlbinlog binlog-file | mysql -u root -p
完整舉例如下;
1、第一天,備份數據庫;
mysqldump -uroot -p -l -F product >product.sql
-l:給所有表加讀鎖,-F:生成一個新的日志文件。
2、第二天,插入一部分新數據;
3、第三天,數據庫突然掛了,數據無法訪問,需要恢復備份;
mysql -uroot -p product < product.sql
4、恢復完成後得到的是第一天備份時的數據,此時需要使用mysqldump恢復自mysqldump備份後的binlog:
mysqlbinlog localhost-bin.000012 | mysql -uroot -p product
三、基於時間點還原;
1、如果第三天9點發生誤操作,可以用如下語句從備份和binlog將數據恢復到故障前:
mysqlbinlog --stop-date="2010-09-17 8:59:59" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd
2、跳過故障點繼續恢復;
mysqlbinlog --start-date="2010-09-17 9:01:00" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd
四、基於位置恢復;
和基於時間點的恢復相類似,但更精確,同一時間點可能有多條SQL語句同時執行,恢復的操作步驟如下;
1、在shell下執行如下命令;
mysqlbinlog --start-date="2010-09-17 8:55:00" --stop-date="2010-09-17 9:05:00" /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
此時在tmp下建立了小的文本文件,編輯它並找出錯語句前後的位置號,例如前後號分別為:198765和198869;
2、恢復了以前的備份文件後,接著執行如下命令;
mysqlbinlog --stop-position="198765" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd
mysqlbinlog --start-position="198769" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd
第一行:恢復到停止位置的所有事務;
第二行:將恢復從給定的起始位置直到二進制日志結束的所有事務;
**********************************************************************************************
物理備份和恢復;
物理備份比邏輯備份速度更快,物理備份分為:
1、冷備份:停下MySQL服務,cp數據,恢復時停止MySQL,先進行操作系統級別恢復數據文件,然後重啟MySQL服務,使用mysqlbinlog工具恢復自備份以來的所有binlog.
2、熱備份:對於不同的存儲引擎方法也不同;
A、MyISAM存儲引擎,本質就是將要備份的表加讀鎖,然後再cp數據文件到備份目錄。方法如下兩種;
方法1、使用mysqlhotcopy工具;
mysqlhotcopy工具是mysql自帶的熱備份工具,使用方法如下;
mysqlhotcopy db_name [/path/to/new_directory]
方法2、手工鎖表copy;
mysql>flush tables for read;
然後cp數據文件到備份目錄下;
B、InnoDB存儲引擎;
ibbackup工具可以熱備份InnoDB存儲引擎類數據庫,但有一點它是收費的,此處不研究。