
一、 知识储备
1) find命令,参考:Linux find 命令
2) MySQL导出数据库语法:
mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql
3) rsync异地备份,参考:rsync学习笔记
4) ssh免密登录,参考:SSH协议学习笔记
二、 使用场景
本次利用shell脚本实现以下需求:
每天凌晨3点执行备份,需备份所有库(db1 db2 db3)
备份的数据存放在本地/data/mysql下
将所有备份文件压缩,格式为gzip
压缩后的名称格式示例:db1-2020-02-24-20:57.sql.gz
利用rsync实现异地备份
本地备份数据保留2个月
三、 MySQL数据库备份脚本
1) 编写脚本:mysql-backup.sh
#! /bin/bash#Save sa /etc/mysql-backup.shBAKDIR="/data/mysql"MYSQLUSR="root"MYSQLPW="123123"LOG=/var/log/mysql-backup.logNOW=`date +%Y-%m-%d-%H:%M`[ ! -d $BAKDIR ] && mkdir -p $BAKDIRecho "##########today##########" >>$LOGecho "mysql backup begin at `date`" >>$LOGfor db in db1 db2 db3domysqldump -u$MYSQLUSR -p$MYSQLPW $db | gzip > $BAKDIR/$db-$NOW.sql.gzif [ $? == 0 ];thenecho "$NOW--$db backup succeeded!" >> $LOGelseecho "$db backup failed!" >> $LOGfidonersync -az --delete /data/mysql/* root@192.168.1.252:/data/backup >/dev/null 2>&1if [ $? == 0 ];thenecho "$NOW Remote backup succeeded!" >> $LOGelseecho "$NOW Remote backup failed!" >> $LOGfifind $BAKDIR -type f -mtime +60 -name "*.gz"|xargs rm -rfecho "mysql bakup end at `date`" >>$LOG
2) 给脚本添加可执行权限
chmod +x /etc/mysql-backup.sh
3) 设定每天凌晨3点定时执行该shell脚本
执行crontab -e,追加如下一行
0 3 * * * /etc/mysql-backup.sh
我们执行脚本,测试一下吧

最后再啰嗦一句
导入数据库语法:
mysql -u用户名 -p密码 数据库名 < 数据库名.sql

文章转载自开源Linux,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




