MySQL 5.6 以上 定时自动备份mysql数据库

# crontab -l
#Mysql备份
30 23 * * * sh /sh/mysqldump-2.sh > /tmp/mysqldump_backup.log
more mysqldump-2.sh 
#!/bin/bash
###chuang by 2018-05-24
###mysqldump 
###释放内存
echo '==========================================='
echo "free the memory"
echo 3 > /proc/sys/vm/drop_caches
echo "`date` begining bak..."

##查看脚本执行的过程
set -x 
###非0 退出
set -e

#数据库IP
dbserver='172.17.35.244'
#数据库用户名
dbuser='root'
#数据库密码
dbpasswd='123456'
#备份数据库,多个库用空格隔开
dbname='wordpress'
#数据库端口
port='3306'

#备份输出路径
backpath='/data1/backup/mysql/'
logpath='/data1/backup/logs/'

#备份时间
backtime=`date +%Y%m%d%H%M`
out_time=`date +%Y%m%d%H%M%S`


#Define DIR and mkdir DIR 判断目录是否存在,不存在则新建
if [ ! -d $backpath ];then
     mkdir -p $backpath
     echo -e "\033[35m $backpath 这个目录创建成功!!!\033[1m"
else
     echo -e "\033[35m $backpath 这个目录已经存在...\033[0m"               
fi

#Define DIR and mkdir DIR 判断目录是否存在,不存在则新建
if [ ! -d $logpath ];then
     mkdir -p $logpath
     echo -e "\033[35m $logpath 这个目录创建成功!!!\033[1m"
else
     echo -e "\033[35m $logpath 这个目录已经存在...\033[0m"               
fi

##ROOT执行,否则退出
root=$(id -u)
if [ "$root" -ne 0 ] ;then
    echo must run as root
    exit 1
fi


echo "################## ${backtime} #############################" 
echo "开始备份" 
#日志记录头部
echo "" >> ${logpath}/${dbname}_back.log
echo "-------------------------------------------------" >> ${logpath}/${dbname}_back.log
echo "备份时间为${backtime},备份数据库 ${dbname} 开始" >> ${logpath}/${dbname}_back.log

#正式备份数据库
for DB in $dbname; do
  #source=`/usr/bin/mysqldump -h ${dbserver} -u ${dbuser} -p${dbpasswd} -P${port} ${DB} > ${backpath}/${DB}-${out_time}.sql` 2>> ${backpath}/mysqlback.log;
  source=`/usr/bin/mysqldump --defaults-extra-file=/sh/.my.cnf ${DB} > ${backpath}/${DB}-${out_time}.sql`

  #数据成功安全导出
  echo "" >> ${backpath}/mysqldump.log
  echo "-----------------------------------------------------------" >> ${backpath}/mysqldump.log
  echo "${out_time}: The ${DB} successfully exported safely." >> ${backpath}/mysqldump.log

#备份成功以下操作
  if [ "$?" == 0 ];then
    cd $backpath
    #为节约硬盘空间,将数据库压缩
    tar zcvf ${DB}-${backtime}.tar.gz ${DB}-${out_time}.sql > /dev/null
    #删除原始文件,只留压缩后文件
    rm -f ${DB}-${out_time}.sql
    #删除15天前备份,也就是只保存15天内的备份
    find $backpath -name "*.tar.gz" -type f -mtime +15 -exec rm -rf {} \; > /dev/null 2>&1
    echo "数据库 ${dbname} 备份成功!!" >> ${logpath}/${dbname}_back.log
  else
  #备份失败则进行以下操作
  echo "数据库 ${dbname} 备份失败!!" >> ${logpath}/${dbname}_back.log
  fi
done

echo "完成备份"
echo "################## ${backtime} #############################"
# more /sh/.my.cnf 
[client]
host = localhost
user = root
password = '123456'



你可能感兴趣的:(MySQL 5.6 以上 定时自动备份mysql数据库)