最简单的linux备份mysql数据库方法

Posted by 老毛 on 九月 9, 2009. Category:Database, Linux. 442 views. No Comment

mysql备份说简单挺简单的,说难吧也挺难的。

何谓备份?当然要能恢复,备份才有意义。

用了很多备份方法貌似恢复时都比较容易失败,今天就介绍一个不仅能备份数据库(费话,不能备份数据库叫备份吗!),而且完完整整的保留了数据库状态,日志什么的一个都不少。恢复稳定、方便的备份方法。

其实就是直接打包数据库Data目录(MyISAM类型的数据库也可直接备份数据库名的目录)。

恢复时直接替换原来的Data目录就可以了。

哈哈,是不是很简单哈,是不是很失望哈,搞了半天就那么点东东。别急,下面就介绍一个备份数据库的脚本,虽然技术含量不是很高,但确实很方便。

编写这个脚本主要是为了实现在WEB页面简单备份、恢复Mysql数据库。当然也可以通过crontab 定时备份数据库。

#!/bin/sh
# 功能:
#    备份数据库、恢复数据库、导出数据库备份列表、删除数据库备份文件
#
# 历史:
#    2009-09-09    Lunas.JZ(http://imjz.org)     First release
#
# 调用方式 backup.sh [option1 option2]
#     备份文件 backup.sh
#        backup前缀为用户主动被份,recover前缀为恢复某一备份文件前程序自动备份。
#     恢复备份文件 backup.sh “recover” “filename”
#     导出备份文件列表 backup.sh “show” “search”
#        search可为 “recover”、”backup”、或grep 正则表达式
#     删除文件 backup.sh “delete” “filename1 filename2″

#数据库文件的存放目录
SourcePath=”/usr/local/mysql”
#数据库
SourceDir=”data”
#备份文件存放目录
BackupPath=”/usr/local/mysql/backup_data”
#备份日志地址
LogFile=”/usr/local/mysql/backup_data/dbbackup.log”
#导出备份文件列表地址
ShowFile=”/usr/local/jboss/server/default/deploy/ROOT.war/WEB-INF/backuplist.properties”

# —————-备份————————-
backup(){
if [ "$1" ]
then
Prefix=”recover”
else
Prefix=”backup”
fi

if [ -d "$BackupPath" ]
then
echo “[$BackupPath]The Backup Directory is exist!” >> $LogFile
else
mkdir “$BackupPath”
echo “[$BackupPath]The Backup Directory Creating successful!” >> $LogFile
fi

NewFile=”$BackupPath”/”$Prefix”\_$(date +%y%m%d%H%M).tar.gz
echo “————————–” >> $LogFile
echo $(date +”%y-%m-%d %H:%M:%S”) >> $LogFile
echo “————————–” >> $LogFile
echo “Backup Data.” >> $LogFile

if [ -f $NewFile ]
then
echo “[$NewFile]The Backup File is exists! Deleting….” >> $LogFile
rm -f $NewFile >> $LogFile 2>&1
fi

tar czvf $NewFile -C $SourcePath $SourceDir >> $LogFile 2>&1

echo “[$NewFile]Backup Success!” >> $LogFile
return 0
}

#——————–恢复——————————
recover(){
BackupFileName=”$BackupPath”/”$1″
SourceFileName=”$SourcePath”/”$SourceDir”

echo “————————–” >> $LogFile
echo $(date +”%y-%m-%d %H:%M:%S”) >> $LogFile
echo “————————–” >> $LogFile
echo “Recover old data.” >> $LogFile

if [ -f "$BackupFileName" ]
then
echo “Backup existing data.” >> $LogFile
backup “recover”

echo “[$SourceFileName]Deleting old Data…” >> $LogFile
rm -rf $SourceFileName >> $LogFile 2>&1

echo “[$BackupFileName]Recovering data…” >> $LogFile
tar xzvf $BackupFileName -C $SourcePath >> $LogFile 2>&1
echo “[$BackupFileName]Recovering successful.” >>$LogFile
else
echo “[$BackupFileName]Recover files not found.” >>$LogFile
echo “[ERROR]Recovering Failure.” >>$LogFile
return 1
fi
return 0
}

#——————–将备份文件输出到指定文件以便程序获取———————–
showfile(){
echo “————————–” >> $LogFile
echo $(date +”%y-%m-%d %H:%M:%S”) >> $LogFile
echo “————————–” >> $LogFile
echo “View the backup files list.” >> $LogFile

if [ "$1" ]
then
ls -1B $BackupPath | grep ‘.tar.gz\>’ | grep $1 > $ShowFile
else
ls -1B $BackupPath | grep ‘.tar.gz\>’ > $ShowFile
fi
return 0
}

#———————-删除备份文件——————————————
deletefile(){
echo “————————–” >> $LogFile
echo $(date +”%y-%m-%d %H:%M:%S”) >> $LogFile
echo “————————–” >> $LogFile
echo “Delete old backup files.”    >> $LogFile

if [ "$1" ]
then
echo “[$1]Deleting old backup files…” >> $LogFile
cd “$BackupPath”
rm -f $1 >> $LogFile 2>&1
else
echo “[ERROR]Missing Parameter!” >> $LogFile
return 1
fi
return 0
}

#———————-执行开始,根据参数选择调用方法—————————-
case “$1″ in
“show”)
showfile “$2″
exit “$?”
;;
“recover”)
service mysqld stop >/dev/null 2>&1
recover “$2″
temp=$?
service mysqld start >/dev/null 2>&1
exit $temp
;;
“delete”)
deletefile “$2″
exit “$?”
;;
*)
service mysqld stop >/dev/null 2>&1
backup
temp=$?
service mysqld start >/dev/null 2>&1
exit $temp
;;
esac

下载地址:http://code.google.com/p/lunasjz/downloads/list

Tags: , , , , , .

Leave a Reply

最近文章

最近评论

分类目录

链接

文章索引模板

标签