#!/bin/bash #保存备份个数,备份31天数据 day=31 #备份保存路径 backup_dir=/backup #日期 dd=`date +%Y-%m-%d-%H-%M-%S` #用户名 username=root #密码 password=123456 #忽略数据库 ignore_db="sys|information_schema|mysql|performance_schema" #如果文件夹不存在则创建 if [ ! -d $backup_dir ]; then mkdir -p $backup_dir; fi db_arr=`mysql -u${username} -p${password} -Bse "show databases;" | grep -vE "(${ignore_db})"` for dbname in ${db_arr} do db_dir=${backup_dir}/${dbname} #对每个数据库建立单独的文件夹 if [ ! -d ${db_dir} ]; then mkdir -p ${db_dir}; fi #备份 sql_file=${db_dir}/${dbname}-${dd}.sql mysqldump -u${username} -p${password} ${dbname} | gzip > ${sql_file}.gz echo "create ${sql_file}.gz" >> ${backup_dir}/log.txt #删除过期备份 delfile=`ls -l -crt ${db_dir}/*.sql.gz | awk '{ print $9 }' | head -1` count=`ls -l -crt ${db_dir}/*.sql.gz | awk '{ print $9 }' | wc -l` if [[ ${count} -gt ${day} ]] then #删除最早生成的备份,只保留day数量的备份 rm ${delfile} #写删除文件日志 echo "delete ${delfile}" >> ${backup_dir}/log.txt fi done