分享几个Oracle和MySQL数据库备份脚本

2024年 5月 22日 81.3k 0

分享几个Oracle和MySQL数据库备份脚本-1

作者 | JiekeXu

来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)

如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)

大家好,我是 JiekeXu,很高兴又和大家见面了,今天给大家分享几个数据库备份脚本,欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货第一时间到达!

之前有朋友问有没有备份脚本,给分享一个,我就很是好奇,实在不会自己写,网上一搜一大堆的东西麽,拿过来改吧改吧就可以用了呀,实在没有啥可写的,但有人要求了,这里就水一篇吧。

分享几个Oracle和MySQL数据库备份脚本-2

备份脚本六个注意点

在写脚本前我这里按照个人习惯大概总结了以下六点,感兴趣的可以继续看看,不感兴趣的直接跳过就好。

  1. 首先要注意的一点就是 shell 环境是 bash 还是 sh ,需要在你的脚本开头中注明。

    #!/bin/bash

    1. 其次就是数据库环境变量需要申明,例如直接加载  .bash_profile 或者单独申明 ORACLE_HOME、ORACLE_BASE 等。

      source home/oracle/.bash_profile


      或者
      ORACLE_BASE=/u01/app/oracle
      ORACLE_HOME=/u01/app/product/11.2.0/dbhome_1
      ORACLE_SID=JiekeXu1
      ORACLE_USER=oracle
      ORACLE_GROUP=oinstall

      1. 接下来就是定义相关备份目录、日志目录等全局通用目录。

        DICPATH=/db_backup/oracle/rman


        LOGPATH=$DICPATH/log
        DATPATH=$DICPATH/data

        1. 到这里呢才算开始正式的备份任务,使用数据库备份工具编写备份脚本。

          rman target


          mysqldump ......

          1. 备份完成需要考虑存放日期,存放一周,两周,或者 scp、ftp 等传到远程异地,然后考虑清理本地的磁盘空间。

            --清理备份产生的日志
            find ${DIR}/log -name ${NAME}\* -mtime +90 | xargs rm -f
            --清理备份集
            --使用操作系统命令直接删除备份集
            find ${DIR}/data -name ${NAME}\* -mtime +30 | xargs rm -f

            1. 这一步就是部署备份了,一般借助操作系统的 crontab 定时任务来搞定。

            crontab 命令的语法

              crontab [-u username] [-l|-e|-r]
              选项与参数:
              -u :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程;
              -e :编辑 crontab 的工作内容
              -l :查阅 crontab 的工作内容
              -r :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑

              分享几个Oracle和MySQL数据库备份脚本-3

                * * * * *
                - - - - -
                | | | | |
                | | | | +----- 星期中的星期几 (0 - 6) (星期天为 0)
                | | | +---------- 月份 (1 - 12)
                | | +--------------- 一个月中的第几天 (1 - 31)
                | +-------------------- 小时 (0 - 23)
                +------------------------- 分钟 (0 - 59)

                另外关于 crontab 还有几点要注意的:

                • 定时任务添加注释

                • >/dev/null 2>&1   ==>  &>/dev/null,别随意打印日志文件

                • 定时任务里面的程序脚本尽量用全路径

                • 避免不必要的程序以及命令输出

                • 定时任务之前添加注释

                  下面看几个 crontab 的例子。

                  0 */2 * * * sbin/service httpd restart 意思是每两个小时重启一次apache


                  50 7 * * * sbin/service sshd start 意思是每天7:50开启ssh服务


                  50 22 * * * sbin/service sshd stop 意思是每天22:50关闭ssh服务


                  0 0 1,15 * * fsck home 每月1号和15号检查/home 磁盘


                  1 * * * * home/jieke/backup 每小时的第一分执行 home/jieke/backup这个文件


                  00 03 * * 1-5 find home/oracle "*.xxx" -mtime +4 -exec rm {} \; 每周一至周五3点钟,在目录 home/oracle 中,查找文件名为*.xxx的文件,并删除4天前的文件。


                  30 6 */10 * * ls  意思是每月的1、11、21、31日是的6:30执行一次ls命令

                  下面正式分享几个脚本。

                  Oracle rman 增备脚本

                    vim home/oracle/scripts/oracle_rman.sh


                    #!/bin/bash
                    source home/oracle/.bash_profile


                    DICPATH=/db_backup/oracle/rman


                    LOGPATH=$DICPATH/log
                    DATPATH=$DICPATH/data


                    if [ ! -d $LOGPATH ]; then
                    mkdir -p $LOGPATH
                    fi


                    if [ ! -d $DATPATH ]; then
                    mkdir -p $DATPATH
                    fi


                    if [ "$1" = "full" ]; then
                    echo 'jxrt'
                    rman target nocatalog msglog=$LOGPATH/rman_db_`date '+%Y%m%d%H%M%S'`.log

                    相关文章

                    Oracle如何使用授予和撤销权限的语法和示例
                    Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
                    下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
                    社区版oceanbase安装
                    Oracle 导出CSV工具-sqluldr2
                    ETL数据集成丨快速将MySQL数据迁移至Doris数据库

                    发布评论