打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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定时执行脚本即可!

脚本如下:

  1. #!/bin/bash  
  2. # description:  MySQL buckup shell script  
  3. # author:       Daniel  
  4. # web site:     http://home.ustc.edu.cn/~danewang/blog/  
  5.   
  6. st=$(date +%s)  
  7. USER="root"   
  8. PASSWORD="*****"#用户名   
  9. DATABASE="myblogdb" #数据库用户密码   
  10. MAIL="abcd@gmail.com"#mail     
  11. BACKUP_DIR=/home/daniel/data_backup/ #备份文件存储路径   
  12. LOGFILE=/home/daniel/data_backup/data_backup.log #日志文件路径  
  13.    
  14. DATE=`date +%Y%m%d-%H%M`#用日期格式作为文件名  
  15. DUMPFILE=$DATE.sql   
  16. ARCHIVE=$DATE.sql.tar.gz   
  17. OPTIONS="-u$USER -p$PASSWORD $DATABASE"  
  18.   
  19. #判断备份文件存储目录是否存在,否则创建该目录   
  20. if [ ! -d $BACKUP_DIR ]   
  21. then  
  22.     mkdir -p "$BACKUP_DIR"  
  23. fi    
  24.   
  25. #开始备份之前,将备份信息头写入日记文件   
  26. echo "    ">> $LOGFILE   
  27. echo "--------------------" >> $LOGFILE   
  28. echo "BACKUP DATE:" $(date +"%y-%m-%d %H:%M:%S") >> $LOGFILE   
  29. echo "-------------------" >> $LOGFILE    
  30.   
  31. #切换至备份目录   
  32. cd $BACKUP_DIR   
  33. mysqldump $OPTIONS > $DUMPFILE   
  34. #判断数据库备份是否成功   
  35. if [[ $? == 0 ]]  
  36. then   
  37.     tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1   
  38.     echo "[$ARCHIVE] Backup Successful!" >> $LOGFILE   
  39.     rm -f $DUMPFILE #删除原始备份文件,只需保留备份压缩包  
  40.     # 把压缩包文件备份到其他机器上。  
  41.     scp -P 1110 $BACKUP_DIR$ARCHIVE ubuntu@*.*.*.*:/home/user/data_backup/ >> $LOGFILE  2>&1  
  42.  else   
  43.     echo "Database Backup Fail!" >> $LOGFILE   
  44. #备份失败后向管理者发送邮件提醒   
  45. mail -s "database:$DATABASE Daily Backup Fail!" $MAIL   
  46. fi   
  47. echo "Backup Process Done"   
  48. #删除3天以上的备份文件  
  49. #Cleaning  
  50. find $BACKUP_DIR  -type f -mtime +2 -name "*.tar.gz" -exec rm -f {} \;  
修改/etc/crontab
#vi /etc/crontab
在下面添加:
00 02 * * * user /data/backup/dump.sh # user 为当前系统的用户

注意/data/backup/dump.sh为脚本的存放位置.

表示每天2点钟执行备份。

重新启动crond
# /etc/rc.d/init.d/crond restart

当scp备份到其他机器出现问题时 查看/var/log下的cron日志,/如果var/log下没有cron日志,

则需要:修改rsyslog,命令:sudo vim /etc/rsyslog.d/50-default.conf ,cron.* /var/log/cron.log

#将cron前面的注释符去掉 ,重启rsyslog ,命令:sudo service rsyslog restart,可以查看crontab

日志。

less /var/log/cron.log , crontab问题定位。

注意命令,格式:command > file 2>&1

2>&1 是将错误输出重定向到标准输出。 然后将标准输入重定向到文件file。&1 表示的是文件描述1,

表示标准输出,如果这里少了&就成了数字1,就表示重定向到文件1。

 这句命令的意思:首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准

输出,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。







本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
GitLab从安装到全自动化备份一条龙
scp+crontab实现自动备份
Linux 下通过脚本实现远程自动备份(页 1) - 文档专区 - 系统管理 - Linux论坛 - powered by Discuz! Archiver
Linux 上使用 backup-manager 进行系统备份
Mysql 日常备份和增量备份脚本
MYSQL 自动备份脚本
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服