腳本主要功能:
1.備份數據
2.記錄操作日誌
3.數據滾動備份
#!/usr/bin/perl
# Description MySQL Backup
# Ver 1.0
# 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";
# 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_USER = " "; # 數據庫用戶名
my $DB_PASS = " "; # 數據庫密碼
my @DB_LISTS = (" "," "); # Databases which are needed to backup
# MySQL Backup Detail
open(LOGFILE,">> $BACKUP_LOG");
open(LOGFILE,">> $BACKUP_LOG");
print LOGFILE ("-----------------------------------\n");
print LOGFILE (`date +'%Y-%m-%d %H:%M:%S'`);
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"
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文件上次修改的時間
# 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");
}
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"); #將備份操作寫入日誌
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);
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);