程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL備份與恢復整理

MySQL備份與恢復整理

編輯: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存儲引擎類數據庫,但有一點它是收費的,此處不研究。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved