1. 备份MySQL数据库

假如一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份,具体要求如下:

1) 每天备份一次,需要备份所有的库;

2) 把备份数据存放到 /data/backup/ 下;

3) 备份文件名称格式示例:database_name-2018-11-11.sql;

4) 需要对1天前的所有sql文件压缩,格式为gzip;

5) 本地数据保留1周;

6) 需要把备份的数据同步到远程备份中心,假如本机可以直接通过rsync命令同步,同步目标地址为rsync://10.10.10.10/mysqlbak/ ;

7) 远程备份数据需要保留1个月。

参考脚本如下:

#!/bin/bash
##备份本地数据库
##本地保留1周,远程保留一个月

mysqldump="/usr/local/mysql/bin/mysqldump"
bakuser="backup"
passwd="34KpmyzUq"
bakdir="/data/backup"
remote_dir="rsync://10.10.10.10/mysqlbak"
d1=`date +%F`
d2=`date +%d`

#定义日志
exec &> /tmp/mysql_bak.log
echo "mysql backup begin at `date`"

#对所有数据库进行遍历
for db in db1 db2 db3 db4 db5
do
    $mysqldump -u$bakuser -p$passwd $db >$bakdir/$db-$d1.sql
done

#对1天前的所有sql文件压缩
find $bakdir/ -type f -name "*.sql" -mtime +1 |xargs gzip

#查找并删除一周以前的老文件
find $bakdir/ -type f -mtime +7 |xargs rm

#把当天的备份文件同步到远程
for db in db1 db2 db3 db4 db5
do
    rsync -a $bakdir/$db-$d1.sql $remote_dir/$db-$d2.sql
done

echo "mysql backup end at `date`"

脚本中,

  1. shell脚本中,可使用反引号来引用一条命令的结果,然后将其保存到变量中

  2. &> 指定正确输出和错误输出到 /tmp/mysql_bak.log

  3. exec 命令,会接管该shell脚本中后续所有的命令,可以把exec理解为“一个盒子”,将exec那行以下所有的命令都拉到“这个盒子”里面运行。exec &> 1.txt 可以理解为 “这个盒子”所有操作的输出都写入到 1.txt 中


猜你喜欢

转载自blog.csdn.net/miss1181248983/article/details/85339674