最简单的linux备份mysql数据库方法
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”
fiif [ -d "$BackupPath" ]
then
echo “[$BackupPath]The Backup Directory is exist!” >> $LogFile
else
mkdir “$BackupPath”
echo “[$BackupPath]The Backup Directory Creating successful!” >> $LogFile
fiNewFile=”$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.” >> $LogFileif [ -f $NewFile ]
then
echo “[$NewFile]The Backup File is exists! Deleting….” >> $LogFile
rm -f $NewFile >> $LogFile 2>&1
fitar 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.” >> $LogFileif [ -f "$BackupFileName" ]
then
echo “Backup existing data.” >> $LogFile
backup “recover”echo “[$SourceFileName]Deleting old Data…” >> $LogFile
rm -rf $SourceFileName >> $LogFile 2>&1echo “[$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.” >> $LogFileif [ "$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.” >> $LogFileif [ "$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