0%

使用shell脚本实现定时备份mysql数据库

在经历过一次惨痛教训后,意识到数据库备份的重要性,所以昨天晚上写了个小脚本,用以备份mysql数据库。

转载请注明出处(http://www.pocketdigi.com), 谢谢。 mysql本身可以从日志文件恢复数据,其原理是日志文件会记录指定时间段的sql操作记录。但我们不可能存储从数据库安装到当前的日志文件,日志早爆炸了,后面的日志会覆盖之前的日志,所以,想从日志恢复完整数据,那是不可能的。而通过自己备份数据库,再从日志中找到备份时间到当前时间的更改记录,就可以恢复所有数据。 下面的脚本生成指定数据库备份,打包压缩,并删除10天前备份。 mysql_back.sh

#!/bin/bash
#mysql 备份脚本
#保留最近10天备份
#备份目录
backupDir=/home/backup/database
#mysqlDump
mysqldump=/usr/local/mariadb/bin/mysqldump
#ip
host=127.0.0.1
#用户名
username=root
password=42342342


#今天日期
today=`date +%Y%m%d`
#十天前的日期
timeTenDayAgo=`date -d -10day +%Y%m%d`
#要备份的数据库数组
databases=(blog chinese_medicine)


# echo $databaseCount

for database in ${databases[@]}
  do
    echo '开始备份'$database
    $mysqldump -h$host -u$username -p$password $database | gzip > $backupDir/$database-$today.sql.gz
    echo '成功备份'$database'到'$backupDir/$database-$today.sql.gz
    if [ ! -f "$backupDir/$database-$timeTenDayAgo.sql.gz" ]; then
      echo '10天前备份不存在,无需删除'
    else
        rm -f $backupDir/$database-$timeTenDayAgo.sql.gz
        echo '删除10天前备份文件'$backupDir/$database-$timeTenDayAgo.sql.gz
    fi
  done

加入定时任务: crontab -e

30 1  *   *  * /home/backup/mysql_back.sh

每天1点半执行一次