zoukankan      html  css  js  c++  java
  • Mysql数据库mys和ora库的备份与恢复脚本

    #!/bin/bash
    Time=$(date +%Y%m%d%H%M%S)
    Back_dir="$HOME/mysqlback/${Time}"
    function Detect_u_p {
    read -p "输入数据库用户名和密码,用空格分隔:" user passwd
    mysql -u${user} -p${passwd} -e "show databases" &>/dev/null
    [ $? -eq 0 ] && return 0 || return 1
    }
    function backup {
    Detect_u_p
    if [ $? -eq 0 ];then
    Back_db=($(mysql -u${user} -p${passwd} -e "show databases" 2>/dev/null | awk '/^mys|ora/ {print $1}'))
    [ ! -d ${Back_dir} ] && mkdir -p ${Back_dir}
    echo "${Time}开始备份"
    for back_db in ${Back_db[]}
    do
    mysqldump -u${user} -p${passwd} --opt -R ${back_db} > ${Back_dir}/${back_db}.sql 2>/dev/null && echo "${back_db}备份完成"
    done
    mysqldump -u${user} -p${passwd} --opt -R --all-databases --routines > ${Back_dir}/alldb_back.sql 2>/dev/null && echo "整库备份完成"
    else
    echo "用户名或密码输入错误"
    fi
    }
    function imp_db {
    Del_db=($(mysql -u${user} -p${passwd} -e "show databases" 2>/dev/null | awk '/^mys|ora/ {print $1}'))
    for del_db in ${Del_db[
    ]}
    do
    mysql -u${user} -p${passwd} -e "DROP DATABASE ${del_db}" &>/dev/null
    done
    Rec_db=($(ls -l $1 | egrep -v "总用量|alldb" | awk '{print $9}' | awk -F"." '{print $1}'))
    for rec_db in ${Rec_db[]}
    do
    mysql -u${user} -p${passwd} -e "CREATE DATABASE ${rec_db}" &>/dev/null && mysql -u${user} -p${passwd} ${rec_db} < $1/${rec_db}.sql &>/dev/null && echo "恢复${rec_db}成功"
    done
    }
    function recover {
    Rec_dir=$(find $HOME -type d -name mysqlback)
    if [ ! -d ${Rec_dir} ];then
    echo "未找到脚本备份的目录"
    else
    ls -lt ${Rec_dir} | egrep -v "总用量" | awk -v Dir="${Rec_dir}" 'BEGIN {print "备份路径为:"} $9 ~ /[0-9]+/ {print NR"."Dir"/"$9}'
    Dir_arr=($(ls -lt ${Rec_dir} | awk -v Dir="${Rec_dir}" '$9 ~ /[0-9]+/ {print Dir"/"$9}'))
    read -p "选择目录为${Dir_arr[0]}中的文件来恢复数据库?(y or n):" yn
    if [ "$yn" = "y" -o "$yn" = "Y" -o "$yn" = "yes" ];then
    Detect_u_p
    [ $? -eq 0 ] && imp_db ${Dir_arr[0]} || echo "用户名或密码输入错误"
    else
    read -p "用其他备份目录来恢复数据库,请输入对应序号:" digit
    if [ ${digit} -gt 0 -a ${digit} -le ${#Dir_arr[
    ]} ];then
    digit=$((${digit}-1))
    Detect_u_p
    imp_db ${Dir_arr[${digit}]}
    else
    echo "输入错误"
    fi
    fi
    fi
    }
    while [ 1 ]
    do
    echo -e "1.备份数据库! 2.恢复数据库!"
    read -p "请输入要实现功能的序号:" choice
    echo ""
    case ${choice} in
    1) backup;;
    2) recover;;
    *) echo "Byebye!"
    exit 1
    esac
    echo "
    "
    read -p "Continue?(y or n):" yn
    [ "$yn" = "y" -o "$yn" = "Y" ] && continue || break
    done

  • 相关阅读:
    使用 RemObjects SDK 建立 WebService 应用
    Excel文件读写的.NET开源组件 Koogra Excel BIFF/XLSX Reader Library
    DataSnap 2009 系列之三 (生命周期篇)
    更改SQL Server表所有者的操作方法
    delphi调用cmd的两种方法
    用AndroidX86和VirtualBox打造高性能Android开发环境
    DevExpress 换肤
    Remobjects关于Channel is Busy 错误的解决方法
    关于D7“System.pas not found”错误的解决方法
    40 套漂亮的图标
  • 原文地址:https://www.cnblogs.com/AiYS/p/8748281.html
Copyright © 2011-2022 走看看