一、知识储备工作:
- Mysql导出数据库语法:
mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql
- shell脚本for循环及if条件判断基本语法
- gzip压缩文件用法
- rsync异地备份用法:
- ssh免密登录
二、场景
本次利用shell脚本实现以下需求:
- 每天凌晨3点执行备份,需备份所有库(db1 db2 db3)
- 备份的数据存放在本地/data/mysql下
- 将所有备份文件压缩,格式为gzip
- 压缩后的名称格式示例:qin-2020-02-24-21:19.sql.gz
- 利用rsync实现异地备份
- 本地备份数据保留2个月
三、MySQL数据库备份脚本
- 编写脚本:mysql-backup.sh
1 #! /bin/bash
2 #Save sa /etc/mysql-backup.sh
3 BAKDIR="/data/mysql"
4 MYSQLUSR="root"
5 MYSQLPW="123123"
6 LOG=/var/log/mysql-backup.log
7 NOW=`date +%Y-%m-%d-%H:%M`
8 [ ! -d $BAKDIR ] && mkdir -p $BAKDIR
9 echo "##########today##########" >>$LOG
10 echo "mysql bakup begin at `date`" >>$LOG
11
12 for db in qin1 qin2 qin3
13 do
14 mysqldump -u$MYSQLUSR -p$MYSQLPW $db | gzip > $BAKDIR/$db-$NOW.sql.gz
15 if [ $? == 0 ];then
16 echo "$NOW--$db backup succeeded!" >> $LOG
17 else
18 echo "$db backup failed!" >> $LOG
19 fi
20 done
21
22 rsync -az --delete /data/mysql/* root@192.168.1.252:/data/backup
23 if [ $? == 0 ];then
24 echo "$NOW Remote backup succeeded!" >> $LOG
25 else
26 echo "$NOW Remote backup failed!" >> $LOG
27 fi
28
29 find $BAKDIR -type f -mtime +60 |xargs rm -rf
30 echo "mysql bakup end at `date`" >>$LOG
- 给脚本添加可执行权限
chmod +x /etc/mysql-backup.sh
-
设定每天凌晨3点定时执行该shell脚本
crontab -e
0 3 * * * /etc/mysql-backup.sh -
我们执行脚本,测试一下吧
最后再啰嗦一句
导入数据库语法:
mysql -u用户名 -p密码 数据库名 < 数据库名.sql
更多IT技术,请微信搜索公众号秦露露
或者扫描下方二维码关注