北极寒流 » 网络资源 » linux定时备份mysql数据库脚本 - 2014.07.15

linux定时备份mysql数据库脚本

linux定时备份mysql数据库脚本

#!/bin/bash
#数据库服务器地址
DBHOST=localhost
#数据库登录名
USERNAME=root
#数据库密码
PASSWORD=
#需要备份的数据库 或 输入类似 db1 db2 的列表清单
DBNAMES="all"
#备份MYSQL时生成CREATE数据库语句
CREATE_DATABASE="yes"
#备份的目录
BACKUPDIR="/tmp/mysqlbackup"
#发生到邮件的地址
MAILADDR="test@example.com"
#邮件最大附件尺寸2M
MAILMAXATTSIZE="2000000"
#当前备份日期和时间
DATE=`date +%Y-%m-%d_%H_%M`
OPT="--quote-names --opt"
#检查备份路径是否存在,不存在则建立
if [ ! -e "${BACKUPDIR}" ]; then
   mkdir -p "${BACKUPDIR}"
fi
#删除备份路径下的所有文件
rm -fv ${BACKUPDIR}/*
#检查是否需要生成CREATE数据库语句
if [ "${CREATE_DATABASE}" = "yes" ]; then
   OPT="${OPT} --databases"
else
   OPT="${OPT} --no-create-db"
fi
#检查是否是备份所有数据库
if [ "${DBNAMES}" = "all" ]; then
   DBNAMES="--all-databases"
fi
BACKUPFILE=${DATE}.sql.gz
cd ${BACKUPDIR}
#备份数据库
`which mysqldump` --user=${USERNAME} --password=${PASSWORD} --host=${DBHOST} ${OPT} ${DBNAMES} |gzip > "${BACKUPFILE}"
#获取备份文件的尺寸
BACKFILESIZE=`du -b ${BACKUPFILE}|sed -e "s/\t.*$//"`
#检查是否需要分割
if [ ${BACKFILESIZE} -ge ${MAILMAXATTSIZE} ]; then
#分割数据库,合并使用 cat ${BACKUPFILE}.* > ${BACKUPFILE}
   `which split` -b ${MAILMAXATTSIZE} ${BACKUPFILE} ${BACKUPFILE}.
   for BFILE in ${BACKUPFILE}.*
   do
       echo "Backup Databases: ${DBNAMES}; Use cat ${BACKUPFILE}.* > ${BACKUPFILE}" | mutt ${MAILADDR} -s "MySQL Backup SQL Files for ${HOST} - ${DATE}" -a "${BFILE}"
   done
else
   echo "Backup Databases: ${DBNAMES}" | mutt ${MAILADDR} -s "MySQL Backup SQL Files for ${HOST} - ${DATE}" -a "${BACKUPFILE}"
fi

注:上述脚本需要配合mutt 才可以实现自动发送备份文件到邮箱

把上面这个脚本存放位置:/home/mysql_backup.sh (当然,也可以放在其他位置),再赋于执行的权限,通过下面命令:
sudo chmod +x /home/mysql_backup.sh

完成这步,我们就来执行一下这段脚本,看能不能备份mysql数据库。
在命令行输入./mysql_backup.sh,就可以看到备份好的数据库文件了

2.完成上面这步,就可以备份mysql数据库了,接下来,我们再通过crontab定时执行这段脚本。
使用crontab -e命令,这个命令的使用比较简单。在命令行输入中,直接输入 crontab -e
就会打开一个编辑窗口,最后一行会有内容格式的提示:

# m h dom mon dow command

具体意义表示:分钟 小时 日期 月份 星期 命令,在某月(mon)的某天(dom)或者星期几(dow)的几点(h,24小时制)几分(m)执行某个命令(command),*表示任意时间。例如:0 3 * * * /home/mysql_backup.sh就是:每天早上3点,执行mysql_backup.sh脚本。

我们只要在里面添加一行就行了,内容如下:

# 备份mysql数据库 每天早上3点整执行
  0 3 * * * /home/mysql_backup.sh

这样,每天早上3点,就会自动备份mysql数据库了

15

linux定时备份mysql数据库脚本

分享到:

最受欢迎的

  • N/A