数据库备份脚本

  当数据库服务器建立好以后,我们首先要做的不是考虑要在这个支持数据库的服务器运行哪些受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] 运行数据库自动备份脚本

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

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

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

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

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

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

时间: 2024-08-05 08:47:39

数据库备份脚本的相关文章

Ubuntu Server下MySql数据库备份脚本代码

明: 我这里要把MySql数据库存放目录/var/lib/mysql下面的pw85数据库备份到/home/mysql_data里面,并且保存为mysqldata_bak_2012_04_11.tar.gz的压缩文件格式(2012_04_11是指备份执行时当天的日期), 最后只保留最近7天的备份. 实现步骤: 1.创建保存备份文件的目录:/home/mysql_datacd /home #进入目录mkdir mysql_data #创建目录2.创建备份脚本文件:/home/mysql_data/m

Mysql 数据库备份脚本

[[email protected] sbin]# more mysqlbackup.sh #If any of your tables run on InnoDB engine #directory to store backups inDST=/backup/dbback# A regex, passed to egrep -v, for which databases to ignoreIGNREG='^snort$'# The MySQL username and passwordDBU

Windows下MySQL数据库备份脚本(一)

说明: MySQL数据库安装目录:C:\Program Files\MySQL\MySQL Server 5.0 MySQL数据库存放目录:C:\Program Files\MySQL\MySQL Server 5.0\data MySQL数据库备份目录:D:\MySQLdata_Bak 实现目的:备份MySQL数据库存放目录中的mysql数据库到D:\MySQLdata_Bak目录,按照日期存放, 并且只保留最近7天的数据 例如: D:\MySQLdata_Bak\mysql\20120404

mysql数据库备份脚本一例

例子,mysql数据库备份脚本.vim mysql.sh #!/bin/bash DAY=`date +%Y-%m-%d` //日期以年月日显示并赋予DAY变量 SIZE=`du -sh /var/lib/mysql //查看mysql的大小并且赋予变量SIZE echo "Date :$DAY" >> /tmp/mysqlbak.txt //输出日期到mysqlbak.txt文件 echo "Date Size : $SIZE" >> /t

????双机热备数据库备份脚本 v2.1

Text /* THIS4.0 数据库备份脚本 [作者] Rulition QQ:7355157 [版本] v2.1 [修改] 2010年5月21日15:35:13 完成 2010年5月24日11:35:13 细节修改 2010年5月25日11:31:13 增加[完整备份]前的一致性检查 2010年5月27日10:31:13 检查差异备份的大小,避免过大文件影响差异备份. 2010年5月28日11:14:15 补备份时查看最近是否已做过完全备份. 2010年10月17日21:58:32 切换@备

shell判断oracle主备数据库备份脚本

1. 脚本如下 说明:按照客户要求,在主备数据库上同时部署脚本,自动判断是否是主库,如果是主库则进行备份,备库不需要备份,记录日志为备份库即可,以下脚本仅供参考,可以进一步优化. 脚本说明: 1.DATABASE_ROLE查看主备库角色变量 2.Main()函数 数据库备份脚本 3.根据主备库关键字判断是否执行main()函数 #!/bin/bash # Author:roidba # filename:/backup/backup.sh #logfile:/backup/rman_fullba

redis数据库备份脚本

redis-dump命令安装环境参考一下链接地址:http://blog.51cto.com/wujianwei/2105124 redis数据库备份脚本: [[email protected] ~]# cat /data/scripts/dump_redisdata.sh #!/bin/bash source /etc/profile.d/rvm.sh /usr/local/rvm/bin/rvm --create ruby-2.3.4 & >/dev/null DATENOW=`date

mysql数据库备份脚本

自动备份Mysql脚本: 如下脚本为mysql自动备份脚本,仅供参考,可以根据实际情况修改. #!/bin/sh #auto backup mysql #20170329 #Define PATH定义变量 BAKDIR=/data/backup/mysql/`date +%Y-%m-%d` MYSQLDB=webapp MYSQLPW=backup MYSQLUSR=backup #must use root user run scripts 必须使用root用户运行,$UID为系统变量 if

linux数据库备份脚本

数据库备份1.创建个备份存储目录mkdir /root/backup/2.以下内容写到dbbackup.sh #!/bin/bashcd /root/backup/mysqldump -uroot -pmima123 datatest >/root/backup/datatest`date +%Y-%m-%d`.sqlmysqldump -uroot -pmima123 datatest1 >/root/backup/datatest1`date +%Y-%m-%d`.sql chmod +x