苏苏的博客

简约至极

Crontab与自动备份

Crontab使用

crontab -l 查看当前用户的crontab列表 使用crontab -e开始编辑规则

基本格式 :
*  *  *  *  *  command
分  时  日  月  周  命令

* 第1列表示分钟1~59 每分钟用*或者*/1表示
* 第2列表示小时1~23(0表示0点)
* 第3列表示日期1~31
* 第4列表示月份1~12
* 第5列标识号星期0~6(0表示星期天)
* 第6列要运行的命令

禁止Crontab产生邮件: 在crontab末尾加上> /dev/null 2>&1 或者 > &> /dev/null

例如

0 1 5 10 * /path/to/script.sh > /dev/null 2>&1
0 1 5 10 * /path/to/script.sh > &> /dev/null

你也可以将/dev/null换成你想要存储日志的文件地址

定时备份数据库

先写好shell脚本存入/home/cron1.sh

user="root"
pass="root"
host="127.0.0.1"
port="3306"
dbs="db1 db2 db3"
dir="/data/backup/"

nowDate=`date '+%Y%m%d'`
nowTime=`date '+%H%M'`
backupdir=$dir$nowDate
timeold=`date -d "-1 week" +%Y%m%d`
delold=$dir$timeold
if [ ! -d $backupdir ]; then
  mkdir -p $backupdir
fi
if [ -d $delold ]; then
  rm -rf $delold
fi
for i in $dbs
	do
		backupFile=$backupdir/$i-$nowTime.sql
		mysqldump -u$user -p$pass -h$host -P$port --databases $i > $backupFile
		xz $backupFile
	done

然后定时任务crontab -e 每5个小时备份一次数据库.

0 */5 * * * sh /home/cron1.sh

使用此脚本建议每20个小时以内备份一次数据库,此脚本保留最近7天备份,删除过期备份

增量备份数据库

先写好shell脚本存入/home/cron2.sh

user="root"
pass="root"
host="127.0.0.1"
port="3306"
storedb="backup"
backup="db1.table1 db1.table2"

mysql -u$user -p$pass -h$host -P$port -e "create database if not exists $storedb"
for i in $backup
	do
		table=${i##*.}
		sql="create table if not exists $storedb.$table like $i;replace into $storedb.$table  select * from $i ;"
		mysql -u$user -p$pass -h$host -P$port -e "$sql"
	done

数据表从源数据库中增量备份至备份数据库中的同名数据表

0 */20 * * * sh /home/cron2.sh

每20个小时增量备份一次

更高级的文件实时同步

Mac上可以使用fswatch + rsync进行实时同步

首先安装fswatch,rsync应该是自带了

brew install fswatch

监视目录输出有变动的文件 fswatch -0 /tmp | xargs -0 -n 1 echo $1

文件变化自动同步函数

sync1()
{
    dir=/data/project/21textv3/
    while true
    do
        rsync -arvuzpt --progress --exclude=".git" /data/project/21textv3/  root@172.168.1.3:/data/web/21textv3/
        echo "start morniting folder $dir"
        fswatch -1 $dir
        sleep 2
    done
}

全功能文件备份脚本

音乐标题
歌手