数据库备份脚本

  当数据库服务器建立好以后,我们首先要做的不是考虑要在这个支持数据库的服务器运行哪些受MySQL提携的程序,而是当数据库遭到破坏后,怎样安然恢复到最后一次正常的状态,使得数据的损失达到最小。 

  或者说,仅仅是数据库服务器的建立,只能说明它能做些什么,并不代表它能稳定的做些什么。灾难恢复的效率及全面性,也是系统的稳定性的一个准因素,尤其对于一个服务器系统。 

  这一节,介绍数据库自动备份以及数据库被破坏后的恢复的方法。在这里,我们使用mysqlhotcopy,并且定义一段Shell脚本来实现数据库的自动备份,并且,让整个数据自动备份与数据恢复过程都基于Shell。

建立数据库备份所需条件

 [1] 建立自动备份脚本 

  在这里,为了使数据库备份和恢复的符合我们的实际要求,用一段符合要求的Shell脚本来实现整个备份过程的自动化。

#!/bin/bash 
# This is a ShellScript For DB Backup  
# author : mjorcen
# date : 2014-10-4
# version : 1.0
#
# properties setting
# 
#
DB_name=mysql
DB_user=root
DB_passwd=123123
DB_backPath=/alidata/www/db/bak_data/
DB_logFile=/alidata/www/db/bak.log
DB_path=/var/lib/mysql/

backupMethod=mysqldump 

#backupMethod=mysqlhotcopy 
#backupMethod=tar 
#Setting End 
#
newFile="$DB_backPath"db_$(date +%y%m%d).tar.gz
dumpFile="$DB_backPath"db_$(date +%y%m%d)
oldFile="$DB_backPath"db_$(date +%y%m%d --date='7 days ago').tar.gz
cat >> $DB_logFile << END
###########################################################################################################
###         date    : $(date +"%y-%m-%d %H:%M:%S")                                       ###
###         newFile    : $newFile                          ###
###         dumpFile: $dumpFile                               ###
###         oldFile : $oldFile                               ###
###########################################################################################################
END


#do delete 
if [ -f $oldFile ]
    then
        rm -f $oldFile >> $DB_logFile 2>&1
        echo "[$oldFile] deleted successfully " >> $DB_logFile
    else
        echo "[$oldFile] does not exists " >> $DB_logFile
fi

# verify newFile 
if [ -f $newFile ]
    then
        echo "[$newFile] was exists " & exit 1
fi

# doBak 
case $backupMethod in

    mysqldump)

        if [ -f $dumpFile ]
            then
#                mkdir -p $dumpFile
                rm -f $dumpFile
        fi
    
        if [ -z $DB_passwd ]
            then
                mysqldump -u$DB_user --opt $DB_name > $dumpFile
            else
                mysqldump -u$DB_user -p$DB_passwd --opt $DB_name > $dumpFile
        fi
        tar -cvzf  $newFile  $dumpFile >> $DB_logFile 2>&1
        rm -f $dumpFile
    ;;
    mysqlhotcopy)
        if [ -f $dumpFile ]
            then
                rm -Rf $dumpFile >> $DB_logFile 2>&1
        fi
        mkdir -p $dumpFile >> $DB_logFile 2>&1
        
        if [ -z $DB_passwd ]
            then
                mysqlhotcopy -u$DB_user $DB_name $dumpFile >> $DB_logFile 2>&1
            else
                mysqlhotcopy -u$DB_user -p$DB_passwd $dumpFile >> $DB_logFile 2>&1
        fi
    
        tar -cvzf  $newFile  $dumpFile >> $DB_logFile 2>&1
        echo "mysqlhotcopy [$newFile] has successfully" >> $DB_logFile 
        rm -Rf $dumpFile  >> $DB_logFile 2>&1
    ;;
    *)
        /etc/init.d/mysqld stop >> $DB_logFile 2>&1
        tar -cvzf  $newFile  $DB_path$DB_name >> $DB_logFile 2>&1
        /ect/init.d/mysqld start >> $DB_logFile 2>&1
        echo "tar [$newFile] backup successfully" >> $DB_logFile 2>&1
    ;;

esac



echo  ... end ... >> $DB_logFile 2>&1


[2] 运行数据库自动备份脚本

[root@CentOS ~]# chmod 700 mysql-backup.sh  改变脚本属性,让其只能让root用户执行  
[root@CentOS ~]# ./mysql-backup.sh   运行脚本  
[root@CentOS ~]# ll bak_data/
total 168
-rw-r--r-- 1 root root 170529 Oct  4 15:03 db_141004.tar.gz

  已成功备份到/backup/mysql目录中 

[3] 让数据库备份脚本每天自动运行 

[root@sample ~]# crontab -e  ← 编辑自动运行规则(然后会出现编辑窗口,操作同vi)  
00 03 * * * /root/mysql-backup.sh   添加这一行到文件中,让数据库备份每天凌晨3点进行

  测试自动备份正常运转与否(备份恢复的方法) 
  这里,以通过实际操作的过程来介绍问题出现后的恢复方法。 

其他资料:  http://wenku.baidu.com/view/46bb56cea1c7aa00b52acbc0.html

原文地址:https://www.cnblogs.com/mjorcen/p/4006010.html