脚本主要功能:
1.备份数据
2.记录操作日志
3.数据滚动备份

#!/usr/bin/perl
# Description  MySQL Backup
# Ver          1.0
 
use strict;
# Define some variables
my $BACKUP_DIR= "/data";  # 指定备份路径
my $DATA_DIR  = "$BACKUP_DIR/data";
my $BACKUP_LOG = "$BACKUP_DIR/backup.log";
 
my $DB_HOST   = " ";  # 数据库IP
my $DB_USER   = " ";  # 数据库用户名
my $DB_PASS   = " "; # 数据库密码
my @DB_LISTS        = (" "," ");  # Databases which are needed to backup
# MySQL Backup Detail
open(LOGFILE,">> $BACKUP_LOG");
print LOGFILE ("-----------------------------------\n");
print LOGFILE (`date +'%Y-%m-%d %H:%M:%S'`);
print LOGFILE ("--------------------------\n");
my $CURRENT_DATE = `date +'%Y%m%d'`;
chomp($CURRENT_DATE); # clear  "\n"
 
# Function stat summary:
# stat()函数返回一个数组,下面是数组各个元素的含义:
# 0     dev      设备号 驱动器号(C:通常是2,D:通常是3,等等)
# 1     ino      索引节号 总是0
# 2     mode     文件的方式 无
# 3     nlink    链接号 通常为0;Windows NT;文件系统允许链接
# 4     uid      文件所有者的用户ID(UID)总是0
# 5     gid      文件所有者的组ID(GID)总是0
# 6     rdev     特殊文件信息 驱动器号(重复)
# 7     size     文件大小(以字节计)文件大小(以字节计)
# 8     atime    上次访问的时间 上次访问的时间
# 9     mtime    上次修改的时间 上次修改的时间
# 10    ctime    Inode修改时间 文件的创建时间
# 11    blksz    磁盘块的大小 总是0
# 12    blocks   文件中的块的数量 总是0
# 例子:
# 获取某个文件的创建时间和最后一次修改时间,
#   my @array = stat("a.html");
#   print "$array[9]\n"; # 输出a.html文件上次修改的时间
foreach my $db (@DB_LISTS){
        # DB Backup
        if (! -e "$DATA_DIR/$db"){
                mkdir("$DATA_DIR/$db");
        }
        `mysqldump -h $DB_HOST  -u $DB_USER -p$DB_PASS --databases $db > "$DATA_DIR/$db/${db}_${CURRENT_DATE}\.sql"`;
         print LOGFILE ("Backup $db successfully!\n"); #将备份操作写入日志
        # Del outdated database file
        my @db_file = <$DATA_DIR/$db/*.*>; # <$DATA_DIR/$db/*.*> 表示匹配该目录下*.*模式的文件
        foreach my $db_file (@db_file){
                my @f_info = stat($db_file); # array,9 meant mtime
                if (time() - $f_info[9] > (60*60*12*5)){ # 60*60*60*5 表示5天的总秒数
                        unlink $db_file; #删除文件
                        print LOGFILE ("Delete OldFile $db_file successfully!\n"); #将删除操作写入日志
                }
        }
}
close(LOGFILE);