等保日志、数据库数据文件备份的脚本随笔
背景
等保的一些要求,不能服务器配免密也不能在脚本中存在数据库或者服务器的相关密码信息,因此通过whiptail交互命令来简单实现功能。
日志文件备份
#!/bin/bash
#168备份的日志文件放到169服务器上
source_ip=192.168.8.168
target_ip=192.168.8.169
path=`(pwd)`
str_date=`(date +"%Y%m%d%H%M%S")`
str_ymd=`(date +"%Y%m%d")`
bak_path=${path}/168log_bak/$str_ymd
print_msg=""
mkdir -p $bak_path
mkdir -p ${path}/169log_bak
#系统日志
#/var/log/messages
function logfile_bak(){
local file_abs_path=$1
local file_path=`(dirname $file_abs_path)`
local file_name=`(basename $file_abs_path)`
local bak_name=${str_date}_${source_ip}_$(echo $file_path | sed s/\\///g)_${file_name}
if [ -e $file_abs_path ]; then
if [ -f $file_abs_path ]; then
cd $file_path && tar --warning=no-file-changed -czf ${bak_name}.tar.gz $file_name ; mv ${bak_name}.tar.gz $bak_path && print_msg=`(echo -e "${print_msg}\n${file_abs_path}备份完成")`
else
cd $file_path/$file_name && tar --warning=no-file-changed -czf ${bak_name}.tar.gz * ; mv ${bak_name}.tar.gz $bak_path && print_msg=`(echo -e "${print_msg}\n${file_abs_path}备份完成")`
fi
else
print_msg=`(echo -e "${print_msg}\n${file_abs_path}该路径既不是文件也不是目录,请检查!!!")`
fi
}
bak_flies="/var/log/messages"
for fname in ${bak_flies}
do
logfile_bak $fname
done
(whiptail --title "消息框" --msgbox "${print_msg}" 15 60)
cd $bak_path && tar -czf ${str_date}_${source_ip}_logfiles.tar.gz ${str_date}*.tar.gz
if (whiptail --title "是否日志文件异机备份?" --yesno "Choose between Yes and No." 10 60) then
(whiptail --title "消息框" --msgbox "回车后,请输入服务器${target_ip}的ROOT密码!" 10 60)
cd $bak_path && scp ${str_date}_${source_ip}_logfiles.tar.gz root@${target_ip}:/${path}/168log_bak
else
exit $?
fi
数据库数据文件备份
#!/bin/bash
source_ip=192.168.8.168
target_ip=192.168.8.169
path=`(pwd)`
str_date=`(date +"%Y%m%d%H%M%S")`
str_ymd=`(date +"%Y%m%d")`
bak_path=${path}/168db_bak/$str_ymd
mkdir -p ${bak_path}
DBPASSWORD=$(whiptail --title "数据库密码" --passwordbox "请输入185数据库ROOT密码" 10 60 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "go on"
else
exit 1;
fi
database_lists="test
test_mysql"
for database in ${database_lists}
do
mysqldump -uroot -p${DBPASSWORD} -P13306 -h${source_ip} -R -E --databases ${database} > ${bak_path}/${str_date}_${database}.sql
done
cd ${bak_path} && tar -czf ${str_date}_all.tar.gz ${str_date}*.sql
if (whiptail --title "是否数据文件异机备份?" --yesno "Choose between Yes and No." 10 60) then
(whiptail --title "消息框" --msgbox "回车后,请输入服务器${target_ip}的ROOT密码!" 10 60)
cd $bak_path && scp ${str_date}_all.tar.gz root@${target_ip}:/${path}/168db_bak
else
exit $?
fi