• mysql、oracle在Linux和Windows下的简单自动备份


              前面一段时间已经安装好了mysql、oracle等常用数据库,但是数据库在使用时必须做到定时备份,这样能够在数据库出现问题时及时恢复到可用状态。那么下面我们就在Linux和Windows环境下测试使用mysql和oracle的自动备份脚本。

    1.Linux环境下


    #!/bin/sh
    
    # Database info
    DB_USER=""
    DB_PASS=""
    DB_HOST=""
    DB_NAME=""
    
    # Others vars
    BIN_DIR="/ps/mysql/bin"            #the mysql bin path
    BCK_DIR="/data/mysqlbak"    #the backup file directory
    DATE=`date +"%Y-%m-%d %H:%M:%S"`    #date of now
    days=7                      #Backup retention days
    # TODO
    # /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql
    # $BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BCK_DIR/db_$DATE.sql
    #mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME |gzip > $BCK_DIR/db_dczdpscms_$DATE.sql.tar.gz
    $BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME |gzip > $BCK_DIR/$DB_NAME"_"$DATE.sql.gz
    echo $(date '+%Y-%m-%d  %T') "$DB_NAME数据库备份成功!">>/data/mysqlbaklog/$DB_NAME.log
    #Delete expired backups
    find $BCK_DIR -type f -name "*.sql" -mtime +$days -exec rm -rf {} ; > /dev/null 2>&1
    #-type f   File type found
    #-mtime +7  Find files by file change time
    #-exec rm -rf {} ;  The exec option is followed by the command or script to be executed, followed by a pair of {}, a space and a \, and finally a semicolon.
    #/dev/null 2>&1  Redirect the standard error to standard output and drop it below /dev/null.
    #throw all standard outputs and standard errors into the trash can.The & indicates that the command is executed in the background.

    以上脚本的功能只是使用mysql的mysqldump工具备份指定的整个数据库,(也可只备份核心表)同时生成压缩的sql文件以gzip压缩成.gz格式。

    脚本设定最大保留天数为7天,可以自行设定需要保留的天数。同时在简单输出备份情况到日志文件,方便查看数据库的备份情况。

    二、oracle

    同样oracle也可以使用同样的方式来备份数据库

    #!/bin/bash
    export ORACLE_HOSTNAME=
    export ORACLE_BASE=/data/app/oracle
    export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.1/
    export ORACLE_SID=orcl
    export PATH=.:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/jdk/bin:$PATH
    export LC_ALL="en_US"
    export LANG="en_US"
    export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
    export NLS_DATE_FORMAT='YYYY-MON-DD HH24:MI:SS'
    
    date=`date +%Y_%m_%d`
    #设置删除7天之前的备份文件
    days=7
    #Oracle数据库服务器IP、端口、SID
    orsid='orcl'      
    
    orowner=
    
    bakuser=
    
    bakpass=
    
    bakdir=/data/app/oracle/admin/orcl/dpdump     
    #备份数据库名称
    bakdata=$orowner"_"$date.dmp
    #备份执行时候生成的日志文件名称
    baklog=$orowner"_"$date.log
    #最后保存的Oracle数据库备份文件
    ordatabak=$orowner"_"$date.tar.gz
    
    #执行备份
    expdp $bakuser/$bakpass  dumpfile=$bakdata log=$baklog schemas=$bakuser
    #删除日志文件
    find $bakdir -type f -name "*.log" -mtime +$days -exec rm -rf  {} ;
    #删除7天前备份文件
    find $bakdir -type f -name "*.dmp" -mtime +$days -exec rm -rf {} ;

    最近出现了一点oracle的环境配置不生效的问题,我将环境配置写在了脚本中,为了避免指令无法使用

    同样也是简单备份同时保留7天。

    可以选择使用expdp数据泵和一般的exp来备份数据库(exp可以用来实现增量备份),expdp备份效率高,但是只能在数据库本地使用。

    以上仅是简单的数据库备份,考虑到更好的容灾性,首先数据库可以是分布式的,同时之间互相同步备份。一般的情况可以在使用上述脚本后叫入scp命令将备份的数据已到多台存储服务器上,以提到容灾能力。

    当备份的内容较多,内容不同时我一般会用时间为分隔将其放入不同的目录文件夹中方便管理。更具体的备份方式会在后续写出来。

    2、Windows

    在Windows上常用的是Windows自己的脚本批处理来实现,以下为mysql和oracle的.bat批处理文件

    一、mysql

    @echo off 
    
    MODE con: COLS=71 LINES=25
    
    @echo 变量信息
    set "date_time=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%"
    set "bak_dir=C:sqlback"
    set "days=7"
    @echo 数据库信息
    set "db_user=root"
    set "db_pass=123456"
    set "db_host=localhost"
    set "db_name=jdzd"
    @echo 创建备份目录
    md %bak_dir%
    @echo 开始备份数据库。
    echo %date_time% Start backing up database files... >> %bak_dir%sqlback.log
    ::mysqldump -u%db_user% -p%db_pass% -h%db_host% %db_name% > %bak_dir%%date_time%%db_name%.sql
    mysqldump -u%db_user% -p%db_pass% -h%db_host% %db_name% |gzip > %bak_dir%%date_time%%db_name%.sql.gz
    @echo 删除七天前备份的文件。
    forfiles /p "%bak_dir%" /s /m *.gz /d -7 /c "cmd /c del @path"
    echo %date_time% Delete expired files! >> %bak_dir%sqlback.log
    echo %date_time% Successfully backed up the database files! >> %bak_dir%sqlback.log
    @echo on
    exit

    实现的功能同Linux下的一样

    二、oracle

    @echo 开始备份oracle数据
    
    @echo off
    set 
    set curdir="D:oraclebackupadm"
    echo %curdir%
    set t1=%Time:~0,1%
    if "%t1%"==" " set t1=0
    set td=%Date:~0,4%%Date:~5,2%%Date:~8,2%%t1:~0,1%%Time:~1,1%%Time:~3,2%%Time:~6,2%
    exp badm_gis/primesoft@orcl owner=(badm_gis) file=%curdir%adm_gis_%td%.dmp rows=y log=%curdir%adm_gis_%td%.Log buffer=800000
    
    echo 建立压缩文件并删除源备份文件日志文件
    zip %curdir%adm_gis_%td%.zip %curdir%adm_gis_%td%.dmp %curdir%badm_gis_%td%.Log 
    del %curdir%*.dmp 
    del %curdir%*.Log
    echo 完成文件压缩
    forfiles /p "D:oraclebackupadm" /s /m *.* /d -7 /c "cmd /c del @path"
    @echo on
    @echo 备份oracle数据结束

    最近在学习python,有时间会将python写的自动化backup写上来。还有自动化安装部署的内容。

  • 相关阅读:
    storm中DAU实时计算方案
    冒泡排序
    跨域
    关于java面试题
    vue+npm+Element插件+路由
    Android云端APP
    js图片预览带进度条
    jQuery上传文件显示进度条
    SSM+form表单文件上传
    SSM批量添加数据
  • 原文地址:https://www.cnblogs.com/observe/p/10750759.html
Copyright © 2020-2023  润新知