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

MySQL 備份和恢復策略詳細教程

編輯:關於MYSQL數據庫

       在數據庫表丟失或損壞的情況下,備份你的數據庫是很重要的。如果發生系統崩潰,你肯定想能夠將你的表盡可能丟失最少的數據恢復到崩潰發生時的狀態。本文主要對MyISAM表做備份恢復。

      備份策略一:直接拷貝數據庫文件(不推薦)

      備份策略二:使用mysqlhotcopy備份數據庫(完全備份,適合小型數據庫備份)

      備份策略三:使用mysqldump備份數據庫(完全+增量備份,適合中型數據庫備份)

      備份策略四:使用主從復制機制(replication)(實現數據庫實時備份)

      備份策略一、直接拷貝數據庫文件

      直接拷貝數據文件最為直接、快速、方便,但缺點是基本上不能實現增量備份。為了保證數據的一致性,需要在備份文件前,執行以下 SQL 語句:

      FLUSH TABLES WITH READ LOCK;

      也就是把內存中的數據都刷新到磁盤中,同時鎖定數據表,以保證拷貝過程中不會有新的數據寫入。這種方法備份出來的數據恢復也很簡單,直接拷貝回原來的數據庫目錄下即可。

      備份策略二、使用mysqlhotcopy備份數據庫

      mysqlhotcopy 是一個 PERL 程序,最初由Tim Bunce編寫。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 來快速備份數據庫。它是備份數據庫或單個表的最快的途徑,但它只能運行在數據庫文件(包括數據表定義文件、數據文件、索引文件)所在的機器上,並且mysqlhotcopy 只能用於備份 MyISAM表。

      本備份策略適合於小型數據庫的備份,數據量不大,可以采用mysqlhotcopy程序每天進行一次完全備份。

      備份策略布置:

      (1)、安裝DBD-mysql perl模塊,支持mysqlhotcopy腳本連接到MySQL數據庫。

      shell> tar -xzvf DBD-mysql-4.005.tar.gz

      shell> cd DBD-mysql-4.005

      shell> unset LANG

      shell> perl Makefile.PL -mysql_config=/usr/local/mysql/bin/mysql_config -testuser=root -testpassword=UserPWD

      shell> make

      shell> make test

      shell> make install

      (2)、設置crontab任務,每天執行備份腳本

      shell> crontab -e

      0 3 * * * /root/MySQLBackup/mysqlbackup.sh >/dev/null 2>&1

      每天凌晨3:00執行備份腳本。

      mysqlbackup.sh注釋:

      #!/bin/sh

      # Name:mysqlbackup.sh

      # PS:MySQL DataBase Backup,Use mysqlhotcopy script.

      # Write by:i.Stone

      # Last Modify:2007-11-15

      #

      # 定義變量,請根據具體情況修改

      # 定義腳本所在目錄

      scriptsDir=`pwd`

      # 數據庫的數據目錄

      dataDir=/usr/local/mysql/data/

      # 數據備份目錄

      tmpBackupDir=/tmp/tmpbackup/

      backupDir=/tmp/mysqlbackup/

      # 用來備份數據庫的用戶名和密碼

      mysqlUser=root

      mysqlPWD=111111

      # 定義eMail地址

      [email protected]

      # 如果臨時備份目錄存在,清空它,如果不存在則創建它

      if [[ -e $tmpBackupDir ]]; then

      rm -rf $tmpBackupDir/*

      else

      mkdir $tmpBackupDir

      fi

      # 如果備份目錄不存在則創建它

      if [[ ! -e $backupDir ]];then

      mkdir $backupDir

      fi

      # 清空MySQLBackup.log

      if [[ -s MySQLBackup.log ]]; then

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