Linux系统下mysql自动备份脚本编写策略
在Linux系统下如何进行数据库的备份呢?linux系统下的MySQL数据库有关于自动备份的代码脚本,那么该怎样进行数据库自动备份的脚本编写呢?
MySQL:Linux下自动备份数据库的shell脚本
Linux服务器上的程序每天都在更新MySQL数据库,于是就想起写一个shell脚本,结合crontab,定时备份数据库。其实非常简单,主要就是使用MySQL自带的mysqldump命令。
脚本内容如下:
———————————————————————-start
#!/bin/sh
#File:/home/mysql/backup.sh
#Databaseinfo
DB_NAME=”test”
DB_USER=”username”
DB_PASS=”password”
#Othersvars
BIN_DIR=”/usr/local/mysql/bin”
BCK_DIR=”/home/mysql/backup”
DATE=`date+%F`
#TODO
$BIN_DIR/mysqldump–opt-u$DB_USER-p$DB_PASS$DB_NAME|gzip>$BCK_DIR/db_$DATE.gz
—————————————————————————–end
然后使用将此脚本加到/etc/crontab定时任务中:
015**0mysql/home/mysql/backup.sh
好了,每周日凌晨5:01系统就会自动运行backup.sh文件备份MySQL数据库了。
可以将这个脚本放进crontab,每天凌晨执行一次,自动备份
这个脚本每天最多只执行一次,而且只保留最近五天的备份在服务器上。
第二个方法:
注意:
DumpFile=db$(date+%y%m%d)如果设置为这样一定要将此脚本放备份目录下才行。
DumpFile=”$BackupPath”db$(date+%y%m%d)如果设置为这样,日志中会有这样的提示tar:Removingleading`/'frommembernames是因为备份的目录使用的是绝对路径,不过这样不影响数据,可以根据自己习惯而定。
——————————————————————-start
#!/bin/bash
#ThisisaShellScriptForAutoDBBackup
#Poweredbyaspbiz
#2004-09
#Setting
#设置数据库名,数据库登录名,密码,备份路径,日志路径,数据文件位置,以及备份方式
#默认情况下备份方式是tar,还可以是mysqldump,mysqldotcopy
#默认情况下,用root(空)登录mysql数据库,备份至/root/dbxxxxx.tgz
DBName=mysql
DBUser=root
DBPasswd=
BackupPath=/root/
LogFile=/root/db.log
DBPath=/var/lib/mysql/
#BackupMethod=mysqldump
#BackupMethod=mysqlhotcopy
#BackupMethod=tar
#SettingEnd
NewFile=”$BackupPath”db$(date+%y%m%d).tgz
DumpFile=”$BackupPath”db$(date+%y%m%d)
OldFile=”$BackupPath”db$(date+%y%m%d–date='5daysago').tgz
echo”——————————————-“>>$LogFile
echo$(date+”%y-%m-%d%H:%M:%S”)>>$LogFile
echo”————————–“>>$LogFile
#DeleteOldFile
if[-f$OldFile]
then
rm-f$OldFile>>$LogFile2>&1
echo”[$OldFile]DeleteOldFileSuccess!”>>$LogFile
else
echo”[$OldFile]NoOldBackupFile!”>>$LogFile
fi
if[-f$NewFile]
then
echo”[$NewFile]TheBackupFileisexists,Can'tBackup!”>>$LogFile
else
case$BackupMethodin
mysqldump)
if[-z$DBPasswd]
then
mysqldump-u$DBUser–opt$DBName>$DumpFile
else
mysqldump-u$DBUser-p$DBPasswd–opt$DBName>$DumpFile
fi
tarczvf$NewFile$DumpFile>>$LogFile2>&1
echo”[$NewFile]BackupSuccess!”>>$LogFile
rm-rf$DumpFile
;;
mysqlhotcopy)
rm-rf$DumpFile
mkdir$DumpFile
if[-z$DBPasswd]
then
mysqlhotcopy-u$DBUser$DBName$DumpFile>>$LogFile2>&1
else
mysqlhotcopy-u$DBUser-p$DBPasswd$DBName$DumpFile>>$LogFile2>&1
fi
tarczvf$NewFile$DumpFile>>$LogFile2>&1
echo”[$NewFile]BackupSuccess!”>>$LogFile
rm-rf$DumpFile
;;
*)
/etc/init.d/mysqldstop>/dev/null2>&1
tarczvf$NewFile$DBPath$DBName>>$LogFile2>&1
/etc/init.d/mysqldstart>/dev/null2>&1
echo”[$NewFile]BackupSuccess!”>>$LogFile
;;
esac
fi
echo”——————————————-“>>$LogFile
———————————————————————————————end