在數(shù)據(jù)庫(kù)表丟失或損壞的情況下,備份你的數(shù)據(jù)庫(kù)是很重要的。如果發(fā)生系統(tǒng)崩潰,你肯定想能夠?qū)⒛愕谋肀M可能丟失最少的數(shù)據(jù)恢復(fù)到崩潰發(fā)生時(shí)的狀態(tài)。本文主要對(duì)MyISAM表做備份恢復(fù)。
備份策略一:直接拷貝數(shù)據(jù)庫(kù)文件(不推薦)
備份策略二:使用mysqlhotcopy備份數(shù)據(jù)庫(kù)(完全備份,適合小型數(shù)據(jù)庫(kù)備份)
備份策略三:使用mysqldump備份數(shù)據(jù)庫(kù)(完全+增量備份,適合中型數(shù)據(jù)庫(kù)備份)
備份策略四:使用主從復(fù)制機(jī)制(replication)(實(shí)現(xiàn)數(shù)據(jù)庫(kù)實(shí)時(shí)備份)
備份策略一、直接拷貝數(shù)據(jù)庫(kù)文件
直接拷貝數(shù)據(jù)文件最為直接、快速、方便,但缺點(diǎn)是基本上不能實(shí)現(xiàn)增量備份。為了保證數(shù)據(jù)的一致性,需要在備份文件前,執(zhí)行以下 SQL 語(yǔ)句:
FLUSH TABLES WITH READ LOCK;
也就是把內(nèi)存中的數(shù)據(jù)都刷新到磁盤(pán)中,同時(shí)鎖定數(shù)據(jù)表,以保證拷貝過(guò)程中不會(huì)有新的數(shù)據(jù)寫(xiě)入。這種方法備份出來(lái)的數(shù)據(jù)恢復(fù)也很簡(jiǎn)單,直接拷貝回原來(lái)的數(shù)據(jù)庫(kù)目錄下即可。
備份策略二、使用mysqlhotcopy備份數(shù)據(jù)庫(kù)
mysqlhotcopy 是一個(gè) PERL 程序,最初由Tim Bunce編寫(xiě)。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 來(lái)快速備份數(shù)據(jù)庫(kù)。它是備份數(shù)據(jù)庫(kù)或單個(gè)表的最快的途徑,但它只能運(yùn)行在數(shù)據(jù)庫(kù)文件(包括數(shù)據(jù)表定義文件、數(shù)據(jù)文件、索引文件)所在的機(jī)器上,并且mysqlhotcopy 只能用于備份 MyISAM表。
本備份策略適合于小型數(shù)據(jù)庫(kù)的備份,數(shù)據(jù)量不大,可以采用mysqlhotcopy程序每天進(jìn)行一次完全備份。
備份策略布置:
(1)、安裝DBD-mysql perl模塊,支持mysqlhotcopy腳本連接到MySQL數(shù)據(jù)庫(kù)。
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)、設(shè)置crontab任務(wù),每天執(zhí)行備份腳本
shell> crontab -e
0 3 * * * /root/MySQLBackup/mysqlbackup.sh >/dev/null 2>&1
每天凌晨3:00執(zhí)行備份腳本。
mysqlbackup.sh注釋:
#!/bin/sh
# Name:mysqlbackup.sh
# PS:MySQL DataBase Backup,Use mysqlhotcopy script.
# Write by:i.Stone
# Last Modify:2007-11-15
#
# 定義變量,請(qǐng)根據(jù)具體情況修改
# 定義腳本所在目錄
scriptsDir=`pwd`
# 數(shù)據(jù)庫(kù)的數(shù)據(jù)目錄
dataDir=/usr/local/mysql/data/
# 數(shù)據(jù)備份目錄
tmpBackupDir=/tmp/tmpbackup/
backupDir=/tmp/mysqlbackup/
# 用來(lái)備份數(shù)據(jù)庫(kù)的用戶名和密碼
mysqlUser=root
mysqlPWD=111111
# 定義eMail地址
# 如果臨時(shí)備份目錄存在,清空它,如果不存在則創(chuàng)建它
if [[ -e $tmpBackupDir ]]; then
rm -rf $tmpBackupDir/*
else
mkdir $tmpBackupDir
fi
# 如果備份目錄不存在則創(chuàng)建它
if [[ ! -e $backupDir ]];then
mkdir $backupDir
fi
# 清空MySQLBackup.log
if [[ -s MySQLBackup.log ]]; then
更多信息請(qǐng)查看IT技術(shù)專欄