mysql备份

前言

我们线上运行的数据库,数据最重要,要是哪天不小心被删了,那你也就可以打包走人了,所以我们需要mysq数据备份措施。mysql备份有全备与增量备份两种方式

全备份

创建备份文件夹

1
mkdir /home/mysqlback/databack/

编写备份脚本

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
#功能说明:本功能用于全量备份
#编写日期:2019-12-23

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH

#数据库账号与密码
dbuser='root'
dbpasswd='123456'
#需要备份的数据库,多个数据库用空格分开
dbname='test1 test2'
#备份时间
backtime=`date +%Y%m%d%H%M%S`
#数据备份路径
datapath='/home/mysqlback/databack'
logpath="${datapath}/log.log"

echo "$(date '+%Y-%m-%d %H:%M:%S'),备份数据库表${dbname} 开始" >> ${logpath}
#正式备份数据库
for table in $dbname; do
echo "$(date '+%Y-%m-%d %H:%M:%S'),${table}开始备份..." >> ${logpath}
mysqldump -u${dbuser} -p${dbpasswd} ${table} | gzip> ${datapath}/${table}-${backtime}.sql.gz
#备份成功以下操作
if [ "$?" == 0 ];then
echo "$(date '+%Y-%m-%d %H:%M:%S'),数据库表 ${table} 备份成功..." >> ${logpath}
cd $datapath
#删除30天前备份,也就是只保存30天内的备份
find $datapath -name "*.sql.gz" -type f -mtime +90 -exec rm -rf {} \; > /dev/null 2>&1
echo "$(date '+%Y-%m-%d %H:%M:%S')数据库表 ${table} 备份完成!!" >> ${logpath}
else
#备份失败则进行以下操作
echo "$(date '+%Y-%m-%d %H:%M:%S')数据库表 ${table} 备份失败!!" >> ${logpath}
fi
done

创建定时任务

打开定时任务

1
vi /etc/crontab

加入定时任务

1
2
3
4
#每分钟执行一次全量备份
* * * * * /home/mysqlback/fillbackup.sh >/dev/null 2>&1
#每周星期日0点执行全量备份
0 0 * * sun /home/mysqlback/fillbackup.sh >/dev/null 2>&1

执行定时任务

1
crontab /etc/crontab

查看定时任务

1
crontab -l
-------------本文结束感谢您的阅读-------------