使用shell脚本进行数据库的定时备份
一、编写shell脚本
1>在soft-run(你想在哪里创建都可以)目录下创建mysql_db_backup.sh 文件,使用vim编辑器打开
2>写入代码
#!/bin/bash
# 1.备份目录
BACKUP=/root/soft-run/my_backup_db
# 当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME
# 数据库的地址
HOST=localhost
# 数据库的用户名
DB_USER=root
#数据库的密码
DB_PW=123456
#备份的数据库名
DATABASE=db1
#创建备份目录 如果不存在就创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
# 备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz
# 将文件处理成 tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
# 删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}
# 删除十天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "备份数据库${DATABASE} 成功"
3>按esc键打出英文冒号,输入wq保存并退出
4>给脚本设置权限
chmod 777 mysql_db_backup.sh
5>执行该脚本
sh mysql_db_backup.sh
6>如果执行脚本提示没有"mysqldump "命令,那么添加软链接文件
6.1>不知道mysqldump命令在路径,可以使用该命令查找路径
find / -name mysqldump -print
6.2>映射一个链接到/usr/bin目录下,相当于建立一个软链接文件
ln -s /root/soft-run/mysql8/bin/mysqldump /usr/bin
7>编写定时指令
7.1> 输入指令
crontab -e
7.2>编写代码
#此条代码意思为每隔三天,两点半执行该脚本 进行备份
30 2 */3 * * /usr/sbin/mysql_db_backup.sh
#分 时 日 月 周 |《==============命令行=======================》|
8>查看指令
crontab -l
9>最后查看解压包备份内容是否正确
10>查看crontab运行日志
cat /var/log/cron
11>注意:如果数据库密码带有特殊字符,可以用单引号包起来
DB_PW='123456%$#@!'
12>副本:
find /tmp -mtime +30 -type f -name "*.zip" -exec rm -rf {} \;
/tmp --设置查找的目录;
-mtime +30 --设置修改时间为30天前;
-type f --设置查找的类型为文件;其中f为文件,d则为文件夹
-name "*" --设置文件名称,可以使用通配符;
-exec rm -rf --查找完毕后执行删除操作;
{} \; --固定写法
SHELL中find -mtime -atime -ctime
先看下三者的区别:
-atime:最后一次读的时间戳;
-mtime:最后一次修改内容的时间戳;
-ctime:最后一次修改文件属性的时间戳,比如文件的owner和group;当然修改内容也会修改ctime
-mtime后面跟一个整数,表示几天前修改过。也有三种:
-mtime n
-mtime -n
-mtime +n
-mtime n : n为数字,意思为在n天之前的“一天之内”被更改过内容的文件
-mtime +n : 列出在n天之前(不含n天本身)被更改过内容的文件名
-mtime -n : 列出在n天之内(含n天本身)被更改过内容的文件名
评论区