MySQL備份與恢復整理

一、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&gt;flush tables for read;
                 然後cp數據文件到備份目錄下;
   B、InnoDB存儲引擎;
                ibbackup工具可以熱備份InnoDB存儲引擎類數據庫,但有一點它是收費的,此處不研究。

You May Also Like