【Shell】MySQL自动备份+自动压缩+自动ftp上传+计划任务
xixuefeng
Linux, MySQL, MySQL-DEV, OS, Shell
2017-08-17 18:03:23
1,849 次浏览
【Shell】MySQL自动备份+自动压缩+自动ftp上传+计划任务已关闭评论
http://xixuefeng.top/archives/635
上面的链接记录了在 windows 下完成上述动作的相关脚本。有了这个底子,那么在shell下也是很容易实现上述功能的。完整脚本如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
#!/bin/bash eval printf "%.s\*" {1..80} echo echo 'Begin Backup:' $(date -d "1 minute " +"%Y-%m-%d %H:%M:%S") source ~/.bash_profile ## Define the variable curDate=$(date "+%Y%m%d") dbname=dm BackDIR=/data/db/backup/dump mydump=/usr/local/mysql/bin/mysqldump # Mysql database backup data ${mydump} --opt --default-character-set=utf8 --databases ${dbname} | gzip > ${BackDIR}/${dbname}${curDate}.gz # ftp upload data eval printf "%.s\*" {1..80} echo echo 'Begin FTP:' $(date -d "1 minute " +"%Y-%m-%d %H:%M:%S") ftp -n<<! open 192.168.31.60 user uname passwd binary hash cd mdump lcd ${BackDIR} prompt mput ${dbname}${curDate}.gz close bye ! # Delete data 10 days ago eval printf "%.s\*" {1..80} echo echo 'Begin Delete expired data:' $(date -d "1 minute " +"%Y-%m-%d %H:%M:%S") find ${BackDIR}/ -mtime +2 -type f -name *.gz | xargs rm -rf eval printf "%.s\*" {1..80} echo echo 'Begin END:' $(date -d "1 minute " +"%Y-%m-%d %H:%M:%S") echo |
1、我们分段稍微解释一下
|
1 2 3 4 5 6 7 8 9 |
#!/bin/bash ## 打印80个* eval printf "%.s\*" {1..80} ## 打印一个空,相当于换行 echo ## 打印一下开始时间 echo 'Begin Backup:' $(date -d "1 minute " +"%Y-%m-%d %H:%M:%S") ## 应用一下环境变量,在本脚本中,这步没起到什么作用,可以删除 source ~/.bash_profile |
2、定义变量
|
1 2 3 4 5 6 7 8 |
## 时间变量,用于后面的文件名 curDate=$(date "+%Y%m%d") ## 数据库的名字,用于备份时指定的数据库 dbname=dm ## 备份的路径 BackDIR=/data/db/backup/dump ## 备份命令的绝对路径(如果前面用到了环境变量,那么这个其实不需要定义,直接用mysqldump就可以) mydump=/usr/local/mysql/bin/mysqldump |
3、mysql 执行备份
问:为什么备份时没有指定用户名、密码呢?详见:http://xixuefeng.top/archives/675
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
${mydump} --opt --default-character-set=utf8 --databases ${dbname} | gzip > ${BackDIR}/${dbname}${curDate}.gz ## 表示激活了mysqldump命令的quick,add-drop-table,add-locks,extended-insert,lock-tables参数 --opt ## 指定导出的字符集 --default-character-set=utf8 ## 备份数据库名称,名称由${dbname}变量指定 --databases ${dbname} ## 导出的结果直接用gzip压缩 | gzip ## 将压缩的结果重定向到备份目录,命名规则为数据库名称+当前日期 > ${BackDIR}/${dbname}${curDate}.gz |
4、ftp
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
ftp -n<<! open 192.168.31.60 user uname passwd binary hash cd mdump lcd ${BackDIR} prompt mput ${dbname}${curDate}.gz close bye ! binary:设置文件传输模式为binary,缺省为ascii;binary模式不会对数据进行任何处理,ascii模式会将回车换行 转换为本机的回车字符 hash:显示进度条,每传输1024个字节,显示一个#,hash可以简写为ha cd:切换远程主机目录 lcd:切换本地主机目录 prompt:上传多个文件时,默认情况下会有交互的提示,需要人工输入Y,此参数则取消了交互提示 mput:上传指定文件,当然,用put也行,put上传单个文件,mput可以指定多个文件 mput file1 file2 |
5、删除过期文件
|
1 2 3 4 |
find ${BackDIR}/ -mtime +2 -type f -name *.gz | xargs rm -rf ## 查找指定目录下2天以前创建的.gz文件,并将其删除 ## xargs:构造参数列表并运行命令。 |
6、定时调度
在 linux 下使用 crontab 就可以很方便的定时来完成此操作。具体的调度还需要看实际的情况。