前言

虽说现在这世道有些爱情是有价的,但是数据是无价的,数据备份是尤为的重要,可以在你未来的某一天不小心删库了,不用着急跑路。

本片文章介绍的方案是利用Linux自身的crontab定时任务功能,定时执行备份数据库的脚本。

技术要点:

  • 数据库备份dump命令
  • shell脚本
  • Linux定时任务crontab

数据备份dump

数据库都有一个导出数据库内数据和结构的命令,就是备份。

将备份的数据还原会将原来的数据中的表删了重建,再插入备份中的数据,这是恢复。

这一点需要注意,如果恢复之前的数据比备份的多,恢复后多的数据就没有了。

列出我常用的两种数据库的备份和恢复命令

postgresql:

备份 pg_dump -h [ip] -U [用户名] [库名] >[导出的.sql 文件]

恢复 psql -s [库名] -f [导出.sql 文件]

mysql:

备份 mysqldump -h -u [用户名] -p [库名] > [导出的.sql 文件]

恢复 mysql -u [用户名] -p [库名] < [导出的.sql 文件]

shell脚本

要完成一个功能完善的备份方案,就需要shell脚本。

我们要让这个脚本备份到指定路径,并压缩存放,最多30个,超过30个删除最早的,并记录操作日志。

啥也不说了,话都在脚本里,干了!

#用户名username=root#密码password=nicai#将要备份的数据库database_name=l_love_you#保存备份文件最多个数count=30#备份保存路径backup_path=/app/mysql_backup#日期date_time=`date +%Y-%m-%d-%H-%M`#如果文件夹不存在则创建if [ ! -d $backup_path ]; then   mkdir -p $backup_path; fi#开始备份mysqldump -u $username -p$password $database_name > $backup_path/$database_name-$date_time.sql#开始压缩cd $backup_pathtar -zcvf $database_name-$date_time.tar.gz $database_name-$date_time.sql#删除源文件rm -rf $backup_path/$database_name-$date_time.sql#更新备份日志echo "create $backup_path/$database_name-$date_time.tar.gz" >> $backup_path/dump.log#找出需要删除的备份delfile=`ls -l -crt $backup_path/*.tar.gz | awk '{print $9 }' | head -1`#判断现在的备份数量是否大于阈值number=`ls -l -crt $backup_path/*.tar.gz | awk '{print $9 }' | wc -l`if [ $number -gt $count ]then #删除最早生成的备份,只保留count数量的备份 rm $delfile #更新删除文件日志 echo "delete $delfile" >> $backup_path/dump.logfi

给脚本赋予可执行权限 chmod +x dump_mysql.sh , 执行后脚本变绿了就是可实行文件

执行方法:./加脚本名称

chmod命令参数含义--
+ 代表添加某些权限
x 代表可执行权限

定时任务crontab

crontab是Linux自带的一个定时任务功能,我们可以利用它每天凌晨执行一次 dump_mysql.sh 脚本。

crontab用法:

  • crontab -l 查看定时任务列表
  • crontab -e 编辑(新增/删除)定时任务

运行crontab -e命令,打开一个可编辑的文本,输入 00 01 * * * /app/dump_mysql.sh

保本并退出即添加完成。

内容解释:

00 01 * * * /app/dump_mysql.sh 分两部分看,

第一部分 00 01 * * * 是定时任务的周期,第二部分 /app/dump_mysql.sh 到时间做的事情。

周期表达式是五个占位符,分别代表: 分钟、小时、日、月、星期

占位符用 * 表示 每 ,用在第一位就是每分钟,第二位每小时,依此类推

占位符用 具体数字 表示 具体时间 ,10用在第一位就是10分,用在第三位表示10号,依此类推

占位符用 - 表示 区间 ,5-7用在第一位就是5分到7分,用在第五位表示周5到周日,依此类推

占位符用 / 表示 间隔 ,5-10/2用在第一位就是5分到10分间隔2分钟,用在第二位表示5点到10点间隔2小时,依此类推

占位符用 , 表示 列表 ,5,10用在第一位就是5分和10分,用在第四位表示5月和10月,依此类推

总结

更多相关文章

  1. Android(安卓)版本兼容 — Android(安卓)6.0 和 7.0后获取Mac地
  2. [RK3399][Android7.1.1] WifiAp:开机默认打开wifi热点
  3. Android(安卓)Studio bug - attribute 'android:versionCode' no
  4. Android获取设备唯一标识完美解决方案
  5. Android(安卓)启动Tomcat服务报错,端口占用解决方案
  6. 【学习Android遇到的错误】关于Unable to instantiate activity
  7. Android(安卓)Spinner不显示下拉箭头解决方案
  8. 常用的android开发网站
  9. android sqlist中游标下标越界问题解决方案

随机推荐

  1. 为什么用json不用xml
  2. 序列化是什么意思
  3. 推荐10款ASP.NET过滤特效(收藏)
  4. XML的解析与创建范例
  5. xml编辑器哪个好?最好用的五款xml编辑工具
  6. 内容和属性用法的相关文章推荐
  7. Java中解析XML的方式有哪些
  8. 传智播客2017xml视频教程的课件源码分享
  9. XML是什么,有什么作用
  10. List集合的9篇内容推荐