文档章节

MySQL数据库定时备份Shell脚本

五大三粗
 五大三粗
发布于 2015/05/03 13:53
字数 944
阅读 115
收藏 0
点赞 0
评论 0

这是一个简单的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定时执行脚本即可!

脚本如下:

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  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中。

© 著作权归作者所有

共有 人打赏支持
五大三粗
粉丝 155
博文 891
码字总数 4538728
作品 0
广州
程序员
linux mysql 本地/远程备份

MySQL :: Linux 下自动备份数据库的 shell 脚本 Linux 服务器上的程序每天都在更新 MySQL 数据库,于是就想起写一个 shell 脚本,结合 crontab,定时备份数据库。其实非常简单,主要就是使用...

JavaGG ⋅ 2010/03/24 ⋅ 0

CentOS MySQL自动备份shell脚本

CentOS MySQL自动备份shell脚本 Love冥天个人博客-关注IT|PHP|互联网|php个人博客交流2018-01-053 阅读 数据库linux 在数据库的日常维护工作中,除了保证业务的正常运行以外,就是要对数据库...

Love冥天个人博客-关注IT|PHP|互联网|php个人博客交流 ⋅ 01/05 ⋅ 0

如何在生产环境下实现每天自动备份mysql数据库

1、描述 我相信很多朋友在工作都都会有这种需求,老板或领导让你每天都要备份mysql数据库,你该如何实现呢,是每天到一定的时间在服务器上敲一遍mysql的备份命令,还是想写个脚本,定时定点的...

甘兵 ⋅ 2017/12/22 ⋅ 0

Mysql的冷备热备(数据备份)

冷备可以是mysql工具 msqldump。 dbname 数据库名称 table1 table2 是表名称 BackupName.sql 备份保存的相对路径的sql文件 执行下面命令。 然后输入密码然后备份成功。 mysqldump -u homeste...

xinson ⋅ 2016/11/18 ⋅ 0

MySQL查看数据库、表大小 | 异地备份|存储过程

查看数据库大小 ①进入 information_schema 数据库 ②查看所有数据库大小 i 查看所有数据库大小 select concat(round(sum(datalength/1024/1024), 2),"MB" ) as datasize from tables;+----...

flyking ⋅ 2014/03/12 ⋅ 0

CentOS下使用mysqlhotcopy定时备份MySQL数据库(MyISAM存储引擎)

CentOS下使用mysqlhotcopy定时备份MySQL数据库(MyISAM存储引擎) mysqlhotcopy与mysqldump比较: 前者是一个快速文件意义上的COPY,后者是一个数据库端的SQL语句集合。 前者只能运行在数据库...

基督山伯爵 ⋅ 2013/03/04 ⋅ 0

Linux系统环境下双机/多机自动互备份方案

目 的:host 机器(最终所有备份都在其上留备份)ship机器(保存host机器备份) 方 法:通过shell脚本,打包相关要备份的文件。然后通过ftp操作下载,上载完成解决方案。 两台机器root通过cro...

范堡 ⋅ 2009/05/23 ⋅ 0

Linux 系统与数据库安全

Linux 系统与数据库安全 版权 © 2011, 2012, 2013, 2014 http://netkiller.github.io 目录 1. 帐号安全 2. 临时文件安全 3. 其他安全问题 4. 防火墙配置 5. 数据库安全 1. 帐号安全 帐号权限...

neo-chen ⋅ 2014/05/27 ⋅ 1

MySQL数据库备份的10个教程

MySQL 是用于交互式网站开发的最为知名的开源数据库系统。如果你使用的 MySQL 数据库,你应当经常有规律地备份数据,以防数据丢失(译注:不管用什么类型的数据都得定期备份)。这里有10个自...

Neo_ ⋅ 2012/03/27 ⋅ 0

linux定时备份mysql并同步到其它服务器

数据在任何一家公司里面都是最核心的资产,定期备份则是为了保证数据库出现问题的时候能够及时回滚到最近的备份点,将损失缩小到最小 这篇文章将会两部分来说明:1、mysql的定期备份;2、同步...

纯洁的微笑 ⋅ 2016/09/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

服务网关过滤器

过滤器作用 我们的微服务应用提供的接口就可以通过统一的API网关入口被客户端访问到了。但是,每个客户端用户请求微服务应用提供的接口时,它们的访问权限往往都需要有一定的限制,系统并不会...

明理萝 ⋅ 12分钟前 ⋅ 1

【2018.06.21学习笔记】【linux高级知识 14.1-14.3】

14.1 NFS介绍 NFS服务全称是NetWork File System:网络文件系统,最早有sun公司开发的,4.0版本由Netapp公司开发,是基于RPC远程过程调用(Remote Procedure Call)协议的服务。 14.2 NFS服务...

lgsxp ⋅ 21分钟前 ⋅ 0

Day18 vim编辑模式、命令模式与练习

编辑模式 命令模式 :nohl 不高亮显示 :x与:wq类似,如果在更改文件之后操作,两者效果一样;如果打开文件,没有任何操作; :wq会更改mtime,但是:x不会。 练习题 扩展 vim的特殊用法 ht...

杉下 ⋅ 24分钟前 ⋅ 0

Enum、EnumMap、EnumSet

1、Enum 不带参数 public enum Car { AUDI { @Override public int getPrice() { return 25000; } }, MERCEDES { ......

职业搬砖20年 ⋅ 25分钟前 ⋅ 0

Java中的锁使用与实现

1.Lock接口 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。 在Lock出现之前,java程序是靠synchronized关键字实现锁功能的,而Java SE5之后,...

ZH-JSON ⋅ 26分钟前 ⋅ 0

线程组和 ThreadLocal

前言 在上面文章中,我们从源码的角度上解析了一下线程池,并且从其 execute 方法开始把线程池中的相关执行流程过了一遍。那么接下来,我们来看一个新的关于线程的知识点:线程组。 线程组 ...

猴亮屏 ⋅ 28分钟前 ⋅ 0

相对路径和绝对路径

基本概念   文件路径就是文件在电脑中的位置,表示文件路径的方式有两种,相对路径和绝对路径。在网页设计中通过路径可以表示链接,插入图像、Flash、CSS文件的位置。   物理路径:物理路...

临江仙卜算子 ⋅ 32分钟前 ⋅ 0

消息队列属性及常见消息队列介绍

什么是消息队列? 消息队列是在消息的传输过程中保存消息的容器,用于接收消息并以文件的方式存储,一个队列的消息可以同时被多个消息消费者消费。分布式消息服务DMS则是分布式的队列系统,消...

中间件小哥 ⋅ 34分钟前 ⋅ 0

java程序员使用web3j进行以太坊开发详解

如何使用web3j为Java应用或Android App增加以太坊区块链支持,教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤器...

笔阁 ⋅ 34分钟前 ⋅ 0

vim编辑模式、vim命令模式

vim编辑模式 使用vim filename 进入的界面是一般模式,在这个模式下虽然我们能够查看,复制,剪切,粘贴,但是不能编辑新的内容,如何能直接写入东西呢?这就需要进入编辑模式了,从一般模式...

李超小牛子 ⋅ 37分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部