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

  • 相关阅读:
    SPComm的一点小诀窍 spcomm的问题导致数据丢失 0x11与0x13错误
    关于DELPHI数组,指针,字符串转换的例子!(转)
    SQL常用语法大全
    SQL触发器实例讲解
    Delphi 变体类型(Variant)的介绍(流与变体类型的相互转换、变体类型常用的函数)
    delphi 生成条形码(fastreport 实现)
    delphi 判断字符串有中文
    delphi const
    delphi as
    delphi 字符串常识
  • 原文地址:https://www.cnblogs.com/AiYS/p/8748281.html
Copyright © 2011-2022 走看看