【Linux】【Shell】【MySQL】自动导入备份文件
xixuefeng
Linux, MySQL, OS, Shell
2017-09-06 17:01:51
1,059 次浏览
【Linux】【Shell】【MySQL】自动导入备份文件已关闭评论
需求:定时将备份文件上传到云端,在指定时间对上传的备份文件导入到指定数据库中,删除30天之前的上传文件。这个需求是下面链接的下一步工作。
1:解压缩后执行MySQL利用mydump导出的sql备份文件
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 |
#!/bin/bash ## 打印分割星号,便于查看日志,打印开始时间戳,应用一下环境变量 eval printf "%.s\*" {1..80} echo echo 'Begin :' $(date -d "1 minute " +"%Y-%m-%d %H:%M:%S") source ~/.bash_profile ## Define the variable curDate=$(date "+%Y%m%d") dbname=dbname BackDIR=/home/ftp username=test port=3306 host=192.168.1.38 eval printf "%.s\*" {1..80} echo echo 'Begin gunzip:' $(date -d "1 minute " +"%Y-%m-%d %H:%M:%S") ## 解压缩制定路径下的压缩文件 gunzip ${BackDIR}/${dbname}${curDate}.sql.gz eval printf "%.s\*" {1..80} echo echo 'Begin Insert:' $(date -d "1 minute " +"%Y-%m-%d %H:%M:%S") ## 执行导入sql文件的命令 mysql -u ${username} -h ${host} -P ${port} -D ${dbname} -N <${BackDIR}/${dbname}${curDate}.sql ## 收尾星号及时间戳 eval printf "%.s\*" {1..80} echo echo 'End:' $(date -d "1 minute " +"%Y-%m-%d %H:%M:%S") |
2:删除30天前的sql文件
ftp每天都上传一个小的sql文件,在ftp服务器上也没有必要永久的存放这些文件,所以,写个脚本每天定时删除30天前创建的文件,保证目录下永远存放30天以内的文件。
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash ## 定义存放文件路径的变量 location=/home/vsftpd #Delete all files before 30 days #find $location -mtime +30 -type f |xargs rm -f #Delete the 30-day sql file find $location -mtime +30 -type f -name *.sql |xargs rm -f |
3:定时执行上述脚本
1 2 3 |
[root@ftp script]# crontab -l 0 16 * * * /ETL/script/insert.sh >> /ETL/log/insert.log 2>&1 0 23 * * * /ETL/script/delete.sh >> /ETL/log/delete.log 2>&1 |
4:小结
1)gunzip解压缩.gz文件,gunzip有很多参数,如果不加参数的话,那么在当前目录下解压,解压后不保存压缩文件。guzip有很多参数,这里介绍一个,”-l”,如果文件较大,加上这个参数,可以看到解压缩进度;
2)MySQL通过命令行直接执行sql文件
3)查找N天前的文件
4)xargs,构造参数列表并运行命令,如果不清楚可以百度或者自行测试一下。
5)crontab