? 以前做数据库备份的时候都是直接通过shell实现,执行mysqldump命令和scp命令,现在发现可以用python进行备份和远程备份,实现更加简单。
#!/usr/local/bin/expect
base_path="/usr/local/mysqldump_dir"
data_path=$base_path/data/`date +%Y%m%d`
sh_path=$base_path/bin
pas_key=111111
#设定备份保留天数
save_days=7
if [ ! -d $data_path ];then
mkdir -p $data_path
echo "`date +%Y-%m-%d_%H:%M:%S` 创建数据存放目录${data_path}成功!" >> $base_path/logs/execute_`date +%Y%m%d`.log
fi
#当前时间
current_date=`date +%Y%m%d`
#过期的时间
expire_date=`date -d "$current_date - $save_days day" '+%Y%m%d'`
echo "`date +%Y-%m-%d_%H:%M:%S` 开始删除过期文件,请稍后..." >> $base_path/logs/execute_`date +%Y%m%d`.log
for target_str in `ls $base_path/data | grep -v "\.zip"`
do
if [ $target_str -lt $expire_date ];then
rm -rf $base_path/data/$target_str
fi
done
echo "`date +%Y-%m-%d_%H:%M:%S` 删除过期文件成功" >> $base_path/logs/execute_`date +%Y%m%d`.log
echo "`date +%Y-%m-%d_%H:%M:%S` 开始备份mysql数据库,请稍后..." >> $data_path/aaaa_`date +%Y%m%d`.sql
#备份aaaa
echo "`date +%Y-%m-%d_%H:%M:%S` 开始备份aaaa数据库,请稍后..." >> $base_path/logs/execute_`date +%Y%m%d`.log
mysqldump --user=yjs --password=yjsBigdata@2022 --lock-all-tables aaaa > $data_path/aaaa_`date +%Y%m%d`.sql
echo "`date +%Y-%m-%d_%H:%M:%S` 备份aaaa数据库成功,文件大小为[`du -m $data_path/aaaa_${current_date}.sql | awk '{print $1}'`M]" >> $base_path/logs/execute_`date +%Y%m%d`.log
echo "`date +%Y-%m-%d_%H:%M:%S` myql数据库备份成功" >> $base_path/logs/execute_`date +%Y%m%d`.log
echo "`date +%Y-%m-%d_%H:%M:%S` 开始对备份文件进行压缩,请稍后..."
cd $base_path/data
zip -r mysql_dump_$current_date.zip ./$current_date
echo "`date +%Y-%m-%d_%H:%M:%S` 备份文件压缩成功!" >> $base_path/logs/execute_`date +%Y%m%d`.log
ip_str=10.200.100.1
echo "`date +%Y-%m-%d_%H:%M:%S` 压缩文件开始上传文件到文件服务器${ip_str},请稍后..." >> $base_path/logs/execute_`date +%Y%m%d`.log
$sh_path/scp_file.sh $base_path $pas_key $current_date $ip_str
echo "`date +%Y-%m-%d_%H:%M:%S` 压缩文件上传文件服务器${ip_str}成功..." >> $base_path/logs/execute_`date +%Y%m%d`.log
rm -rf $base_path/data/mysql_dump_$current_date.zip
?
Shell需要通过相关命令进行特定的筛选,灵活性比较高,但是比较复杂
Python只需要调用别人写好的模块即可实现相关功能,且不需要熟悉Linux命令,但是能够实现的功能相对来说不够灵活,总体就是简单
Shell可以在任意Linux平台上运行
Python可以在任意平台上运行,所以Python的跨平台性更强