Perl 腳本簡單應用實例-MySQL備份

腳本主要功能:
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);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章