Welcome 微信登录

首页 / 数据库 / MySQL / MySQL数据库定时备份Shell脚本并备份至其它机器方法

这是一个简单的MySQL数据库备份shell脚本,适用于单台Linux服务器或者VPS的mysql数据库备份工作,工作原理是使用mysql的mysqldump工具来导出数据库为.sql文件,然后将所有导出的文件打包归档。然后我们在shell脚本中使用 scp命令把备份文件复制到另外一台备份机器,由于scp每次传送文件要密码因此我们需要使用 expect插件或者利用密钥。在这里介绍采用生成密钥对的方法。1,生成密匙对,我用的是rsa的密钥。使用命令 "ssh-keygen -t rsa"生成的过程中提示输入密钥对保存位置及密码,直接回车,接受默认值就行了。其中公共密钥保存在 ~/.ssh/id_rsa.pub,私有密钥保存在 ~/.ssh/id_rsa 。2,然后修改 .ssh 目录权限,chmod 755 ~/.ssh 。最后把 公共密钥复制到你要访问的机器上去,并保存为:~/.ssh/authorized_keys 。scp -P 1110 ~/.ssh/id_rsa.pub daniel@*.*.*.*:/home/daniel/.ssh/authorized_keys(注意这里- P 为大写, 表示目标机器daniel 的ssh端口为1110,小写的p为源ssh端口修改ssh端口在文件/etc/ssh/sshd_config下 。)这里完成scp 脚本免密钥的方法介绍。最后使用crontab定时执行脚本即可!脚本如下:#!/bin/bash
# description:  MySQL buckup shell script
# author:     Daniel
# web site:   http://home.ustc.edu.cn/~danewang/blog/st=$(date +%s)
USER="root"
PASSWORD="*****"#用户名
DATABASE="myblogdb" #数据库用户密码
MAIL="abcd@gmail.com"#mail 
BACKUP_DIR=/home/daniel/data_backup/ #备份文件存储路径
LOGFILE=/home/daniel/data_backup/data_backup.log #日志文件路径
 
DATE=`date +%Y%m%d-%H%M`#用日期格式作为文件名
DUMPFILE=$DATE.sql
ARCHIVE=$DATE.sql.tar.gz
OPTIONS="-u$USER -p$PASSWORD $DATABASE"#判断备份文件存储目录是否存在,否则创建该目录
if [ ! -d $BACKUP_DIR ]
then
 mkdir -p "$BACKUP_DIR"
fi #开始备份之前,将备份信息头写入日记文件
echo "    ">> $LOGFILE
echo "--------------------" >> $LOGFILE
echo "BACKUP DATE:" $(date +"%y-%m-%d %H:%M:%S") >> $LOGFILE
echo "-------------------" >> $LOGFILE #切换至备份目录
cd $BACKUP_DIR
mysqldump $OPTIONS > $DUMPFILE
#判断数据库备份是否成功
if [[ $? == 0 ]]
then
 tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1
    echo "[$ARCHIVE] Backup Successful!" >> $LOGFILE
    rm -f $DUMPFILE #删除原始备份文件,只需保留备份压缩包
    # 把压缩包文件备份到其他机器上。
    scp -P $ARCHIVE daniel@*.*.*.*:/home/daniel/data_backup/
 else
    echo "Database Backup Fail!" >> $LOGFILE
#备份失败后向管理者发送邮件提醒
mail -s "database:$DATABASE Daily Backup Fail!" $MAIL
fi
echo "Backup Process Done"
#删除3天以上的备份文件
#Cleaning
find $BACKUP_DIR  -type f -mtime +2 -name "*.tar.gz" -exec rm -f {} ;修改/etc/crontab#vi /etc/crontab
在下面添加:
00 03 * * * root /data/backup/dump.sh注意/data/backup/dump.sh为脚本的存放位置.表示每天3点钟执行备份。重新启动crond
# /etc/rc.d/init.d/crond restart推荐阅读:在CentOS实现MySQL数据库的自动备份 http://www.linuxidc.com/Linux/2013-07/86930.htmLinux源码安装MySQL 5.6.12 (Cmake编译)Oracle 12C静默安装与配置相关资讯      MySQL数据库备份  MySQL备份脚本 
  • 线上MySQL备份脚本  (07月28日)
  • Mydumper - MySQL数据库备份工具  (04/25/2015 20:09:37)
  • Java实现MySQL数据库备份  (10/14/2014 20:23:11)
  • mydumper备份MySQL数据库示例  (07/09/2015 19:39:54)
  • MySQL 数据库备份种类以及常用备份  (03/21/2015 13:20:27)
  • Python:MySQL备份脚本及删除指定  (03/20/2014 17:11:09)
本文评论 查看全部评论 (0)
表情: 姓名: 字数