首页
点滴
Linux下设置定期备份mysql数据库以及定期删除备份数据
#### 1.在 / 目录下创建存放执行备份脚本和备份的数据文件目录backup ``` [root@iZwz9begsz1x271eb4tlpaZ /]# mkdir backup ``` #### 2.进入创建的/backup 目录下创建备份脚本文件 backup.sh ``` [root@iZwz9begsz1x271eb4tlpaZ /]# cd backup/ [root@iZwz9begsz1x271eb4tlpaZ backup]# touch backup.sh ``` #### 3.编辑 backup.sh 脚本文件 ``` [root@iZwz9begsz1x271eb4tlpaZ backup]# vim backup.sh ``` #### 4.按 i 键进入编辑模式,编辑如下内容,按Esc键退出编辑模式然后按 :wq 保存退出 ``` # 用户名 db_user="root" # 密码 db_password="123456" # 数据库所在ip db_host="locahost" # 数据库名 db_name="javablog" # 备份文件存放目录 backup_dir="/backup" # 时间格式化用作备份文件名 time="$(date +"%Y%m%d%H%M%S")" #!/bin/bash mysqldump -u$db_user -p$db_password -h$db_host $db_name > $backup_dir/$db_name"_"$time.sql #!/bin/bash mysqldump -u$db_user -p$db_password -h$db_host $db_name | gzip > $backup_dir/$db_name"_"$time.sql.gz ``` #### 5.执行脚本文件看是否生成备份文件 发现命令无法执行,因为没有权限 ``` [root@iZwz9begsz1x271eb4tlpaZ backup]# ./backup.sh -bash: ./backup.sh: Permission denied ``` #### 6.赋予可执行的权限 ``` [root@iZwz9begsz1x271eb4tlpaZ backup]# chmod u+x /backup/backup.sh ``` #### 7.再次执行脚本文件进行数据备份,有个警告大意是:在命令行界面上使用密码可能不安全。这个不用理会 ``` [root@iZwz9begsz1x271eb4tlpaZ backup]# ./backup.sh Warning: Using a password on the command line interface can be insecure. Warning: Using a password on the command line interface can be insecure. ``` #### 8.用ll命令查看目录下是否已经生成有备份文件 可以看到已经生成了两个文件,说明脚本没问题 ``` [root@iZwz9begsz1x271eb4tlpaZ backup]# ll total 36 -rwxr--r-- 1 root root 472 Mar 18 19:45 backup.sh -rw-r--r-- 1 root root 20533 Mar 18 19:45 javablog_20190318194529.sql -rw-r--r-- 1 root root 6446 Mar 18 19:45 javablog_20190318194529.sql.gz ``` #### 9.使用crontab创建定时任务 1)先看一下crontab格式 ``` Crontab 格式 分 时 日 月 周 执行命令 第 1 列分钟 1~59,每分钟用 *或者*/1表示,整点分钟数为00或0 第 2 列小时 1~23(0 表示 0 点) 第 3 列日 1~31 第 4 列月 1~12 第 5 列星期 0~6(0 表示星期天) 第 6 列要运行的命令 ``` 2)执行crontab -e 这里显示一个定时任务都没有 , ``` [root@iZwz9begsz1x271eb4tlpaZ backup]# crontab -e no crontab for root - using an empty one ``` 3)编写定时任务,按i键进入编辑模式,编辑如下内容,按Esc键 退出编辑模式然后按 :wq 保存退出。 这里我设置了一分钟执行一次用来测试一下,等一分钟再看是否生成备份文件。 注:实际应用根据自己情况设置定时 ``` */1 * * * * /backup/backup.sh ``` 4)我这等了两分钟可以看到已经备份了两次了,说明定时备份任务设置成功 ``` [root@iZwz9begsz1x271eb4tlpaZ backup]# ll total 68 -rwxr--r-- 1 root root 472 Mar 18 19:45 backup.sh -rw-r--r-- 1 root root 20533 Mar 18 20:10 javablog_20190318201001.sql -rw-r--r-- 1 root root 6446 Mar 18 20:10 javablog_20190318201001.sql.gz -rw-r--r-- 1 root root 20533 Mar 18 20:11 javablog_20190318201101.sql -rw-r--r-- 1 root root 6445 Mar 18 20:11 javablog_20190318201101.sql.gz ``` 5)既然定时任务没问题,那么就把定时设置调整为正常一点的,这里我设置成每天凌晨3点钟执行备份 ``` 0 3 * * * /backup/backup.sh ``` #### 10.定期删除备份文件 1)在 /backup 目录下创建删除备份脚本文件 delbackup.sh ``` [root@iZwz9begsz1x271eb4tlpaZ backup]# touch delbackup.sh ``` 2)脚本内容如下 这里我先测试一下删除一分钟之前的备份 ``` # 数据库名 db_name="javablog" # 备份文件存放目录 backup_dir="/backup" #删除一分钟之前的备份 find $backup_dir -name $db_name"*.sql" -type f -mmin +1 -exec rm -rf {} \; > /dev/null 2>&1 find $backup_dir -name $db_name"*.sql.gz" -type f -mmin +1 -exec rm -rf {} \; > /dev/null 2>&1 ``` 3)编写好脚本后记得赋予可执行权限 ``` [root@iZwz9begsz1x271eb4tlpaZ backup]# chmod u+x /backup/delbackup.sh ``` 4)编写定时任务,在之前的备份基础上再加一个删除任务,这里我设置的删除任务是每分钟执行一次用于测试,回头在调整 ``` [root@iZwz9begsz1x271eb4tlpaZ backup]# crontab -e 0 3 * * * /backup/backup.sh */1 * * * * /backup/delbackup.sh ``` 5)经过我的测试确实已经删除了,说明脚本和定时任务都没问题 6)测过没问题之后,把删除备份的定为删除两天前的即可 ``` # 数据库名 db_name="javablog" # 备份文件存放目录 backup_dir="/backup" #删除两天之前的备份 find $backup_dir -name $db_name"*.sql" -type f -mtime +2 -exec rm -rf {} \; > /dev/null 2>&1 find $backup_dir -name $db_name"*.sql.gz" -type f -mtime +2 -exec rm -rf {} \; > /dev/null 2>&1 ``` 7)定时删除备份的任务设置为每周一凌晨5点钟执行 ``` [root@iZwz9begsz1x271eb4tlpaZ backup]# crontab -e 0 3 * * * /backup/backup.sh 0 5 * * 1 /backup/delbackup.sh ``` #### 11.最终结果: 1)每天凌晨3点钟备份数据库 2)每周一凌晨5点钟删除两天前的备份数据 #### 关于crontab的一些案例;这里的“some command”表示你要执行的命令 实例1:每1分钟执行一次myCommand ``` * * * * * some command ``` 实例2:每小时的第3和第15分钟执行 ``` 3,15 * * * * some command ``` 实例3:在上午8点到11点的第3和第15分钟执行 ``` 3,15 8-11 * * * some command ``` 实例4:每隔两天的上午8点到11点的第3和第15分钟执行 ``` 3,15 8-11 */2 * * some command ``` 实例5:每周一上午8点到11点的第3和第15分钟执行 ``` 3,15 8-11 * * 1 some command ``` 实例6:每晚的21:30执行 ``` 30 21 * * * some command ``` 实例7:每月1、10、22日的4 : 45执行 ``` 45 4 1,10,22 * * some command ``` 实例8:每周六、周日的1 : 10执行 ``` 10 1 * * 6,0 some command ``` 实例9:每天18 : 00至23 : 00之间每隔30分钟执行 ``` 0,30 18-23 * * * some command ``` 实例10:每星期六的晚上11 : 00执行 ``` 0 23 * * 6 some command ``` 实例11:每一小时执行 ``` * */1 * * * some command ``` 实例12:晚上11点到早上7点之间,每隔一小时执行 ``` * 23-7/1 * * * some command ```
博客分类
源码解析 (1)
Java (10)
Linux (8)
多线程 (5)
Docker (9)
SpringBoot (14)
微服务 (1)
Redis (15)
MySQL (7)
VMware (3)
Nginx (15)
MyBatis (2)
Git (7)
RabbitMQ (1)
工具类 (12)
前端 (3)
友情链接
layui
© 2020-2025 www.chenhuazhan.com All Rights Reserved 备案号:
桂ICP备17004487号-1
粤公网安备44030002005146