• <td id="ae6ms"><li id="ae6ms"></li></td>
  • <xmp id="ae6ms"><td id="ae6ms"></td><table id="ae6ms"></table>
  • <table id="ae6ms"></table>
  • <td id="ae6ms"></td>
    <td id="ae6ms"></td>
  • <table id="ae6ms"></table><table id="ae6ms"><td id="ae6ms"></td></table>
  • <td id="ae6ms"></td>
  • <table id="ae6ms"><li id="ae6ms"></li></table>
  • <table id="ae6ms"></table>
    西西軟件園多重安全檢測下載網站、值得信賴的軟件下載站!
    軟件
    軟件
    文章
    搜索

    首頁西西教程數據庫教程 → mydumper備份腳本 Mydumper安裝和使用教程

    mydumper備份腳本 Mydumper安裝和使用教程

    相關軟件相關文章發表評論 來源:西西整理時間:2015/5/14 17:54:33字體大?。?em class="fontsize">A-A+

    作者:西西點擊:293次評論:0次標簽: mydumper mysql

    • 類型:音頻處理大?。?i>1M語言:中文 評分:5.1
    • 標簽:
    立即下載

    Mydumper是一個針對MySQL和Drizzle的高性能多線程備份和恢復工具。開發人員主要來自MySQL,Facebook,SkySQL公司。目前已經在一些線上使用了Mydumper。雖然MySQL數據庫備份工具有其自帶的mysqldump,屬于mysql官方的一款備份工具。但是第三方備份工具mydumper憑借優越的特點為更多人所使用。

    1、Mydumper安裝

    # yum install glib2-devel mysql-devel zlib-devel pcre-devel

    # wget http://launchpad.net/mydumper/0.5/0.5.1/+download/mydumper-0.5.1.tar.gz

    # tar zxvf mydumper-0.5.1.tar.gz -C ../software/

    # cmake .

    # make

    # make install

    2、在mysql數據庫中創建一個測試庫和表(進入mysql數據庫)

    create database test;

    create table test (a int);

    mydumper參數介紹:

    -B, --database 需要備份的庫

    -T, --tables-list 需要備份的表,用,分隔

    -o, --outputdir 輸出目錄

    -s, --statement-size Attempted size of INSERT statement in bytes, default 1000000

    -r, --rows 試圖分裂成很多行塊表

    -c, --compress 壓縮輸出文件

    -e, --build-empty-files 即使表沒有數據,還是產生一個空文件

    -x, --regex 支持正則表達式

    -i, --ignore-engines 忽略的存儲引擎,用,分隔

    -m, --no-schemas 不導出表結構

    -k, --no-locks 不執行臨時共享讀鎖 警告:這將導致不一致的備份

    -l, --long-query-guard 長查詢,默認60s

    --kill-long-queries kill掉長時間執行的查詢(instead of aborting)

    -b, --binlogs 導出binlog

    -D, --daemon 啟用守護進程模式

    -I, --snapshot-interval dump快照間隔時間,默認60s,需要在daemon模式下

    -L, --logfile 日志文件

    -h, --host

    -u, --user

    -p, --password

    -P, --port

    -S, --socket

    -t, --threads 使用的線程數,默認4

    -C, --compress-protocol 在mysql連接上使用壓縮

    -V, --version

    -v, --verbose 更多輸出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2

    myloader參數介紹:

    -d, --directory 導入備份目錄

    -q, --queries-per-transaction 每次執行的查詢數量, 默認1000

    -o, --overwrite-tables 如果表存在刪除表

    -B, --database 需要還原的庫

    -e, --enable-binlog 啟用二進制恢復數據

    -h, --host

    -u, --user

    -p, --password

    -P, --port

    -S, --socket

    -t, --threads 使用的線程數量,默認4

    -C, --compress-protocol 連接上使用壓縮

    -V, --version


    -v, --verbose 更多輸出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2

    mydumper輸出文件:

    metadata:元數據 記錄備份開始和結束時間,以及binlog日志文件位置。

    table data:每個表一個文件

    table schemas:表結構文件

    binary logs: 啟用--binlogs選項后,二進制文件存放在binlog_snapshot目錄下

    daemon mode:在這個模式下,有五個目錄0,1,binlogs,binlog_snapshot,last_dump。

    備份目錄是0和1,間隔備份,如果mydumper因某種原因失敗而仍然有一個好的快照,

    當快照完成后,last_dump指向該備份。

    time mydumper -B test -o /tmp/test2.bak -r 5000

    mydumper備份腳本

    #!/bin/bash  

    #ocpyang@126.com  

    ########腳本說明  

    #1.默認讀取當前目錄下database.txt文件,備份部分數據庫  

    #2.如果database.txt為空,則執行全備或備份指定的個別數據庫  

    #set parameter

    mydumper=/usr/local/bin/mydumper  #根據自己的實際情況設置  

    dir_backup=/backup  #根據自己的實際情況設置  

    mysql_host=localhost  #根據自己的實際情況設置  

    mysql_port=33306  #根據自己的實際情況設置  

    mysql_user=root  #根據自己的實際情況設置  

    mysql_pass=123456  #根據自己的實際情況設置  

    now_date=`date +%Y%m%d%H%M`  

    if [ ! -d $dir_backup ]; then  

      echo -e "\e[1;31m 保存備份的主目錄:$dir_backup不存在,將自動新建. \e[0m"  

      mkdir -p ${dir_backup}  

    fi  

    export black='\033[0m'  

    export boldblack='\033[1;0m'  

    export red='\033[31m'  

    export boldred='\033[1;31m'  

    export green='\033[32m'  

    export boldgreen='\033[1;32m'  

    export yellow='\033[33m'  

    export boldyellow='\033[1;33m'  

    export blue='\033[34m'  

    export boldblue='\033[1;34m'  

    export magenta='\033[35m'  

    export boldmagenta='\033[1;35m'  

    export cyan='\033[36m'  

    export boldcyan='\033[1;36m'  

    export white='\033[37m'  

    export boldwhite='\033[1;37m'  

    cecho ()  

    ## -- Function to easliy print colored text -- ##  

     # Color-echo.  

     # 參數 $1 = message  

     # 參數 $2 = color  

    {  

    local default_msg="No message passed."  

    message=${1:-$default_msg}  # 如果$1沒有輸入則為默認值default_msg.  

    color=${2:-black} # 如果$1沒有輸入則為默認值black.  

    case $color in  

     black)  

    printf "$black" ;;  

     boldblack)  

    printf "$boldblack" ;;  

     red)  

    printf "$red" ;;  

     boldred)  

    printf "$boldred" ;;  

     green)  

    printf "$green" ;;  

     boldgreen)  

    printf "$boldgreen" ;;  

     yellow)  

    printf "$yellow" ;;  

     boldyellow)  

    printf "$boldyellow" ;;  

     blue)  

    printf "$blue" ;;  

     boldblue)  

    printf "$boldblue" ;;  

     magenta)  

    printf "$magenta" ;;  

     boldmagenta)  

    printf "$boldmagenta" ;;  

     cyan)  

    printf "$cyan" ;;  

     boldcyan)  

    printf "$boldcyan" ;;  

     white)  

    printf "$white" ;;  

     boldwhite)  

    printf "$boldwhite" ;;  

    esac  

      printf "%s\n"  "$message"  

      tput sgr0# tput sgr0即恢復默認值  

      printf "$black"  

    return  

    }  

    cechon ()

     # Color-echo.  

     # 參數1 $1 = message  

     # 參數2 $2 = color  

    {  

    local default_msg="No message passed."  

     # Doesn't really need to be a local variable.  

    message=${1:-$default_msg}  # 如果$1沒有輸入則為默認值default_msg.  

    color=${2:-black} # 如果$1沒有輸入則為默認值black.  

    case $color in  

     black)  

      printf "$black" ;;  

     boldblack)  

      printf "$boldblack" ;;  

     red)  

      printf "$red" ;;  

     boldred)  

      printf "$boldred" ;;  

     green)  

      printf "$green" ;;  

     boldgreen)  

      printf "$boldgreen" ;;  

     yellow)  

      printf "$yellow" ;;  

     boldyellow)  

      printf "$boldyellow" ;;  

     blue)  

      printf "$blue" ;;  

     boldblue)  

      printf "$boldblue" ;;  

     magenta)  

      printf "$magenta" ;;  

     boldmagenta)  

      printf "$boldmagenta" ;;  

     cyan)  

      printf "$cyan" ;;  

     boldcyan)  

      printf "$boldcyan" ;;  

     white)  

      printf "$white" ;;  

     boldwhite)  

      printf "$boldwhite" ;;  

    esac  

      printf "%s"  "$message"  

      tput sgr0# tput sgr0即恢復默認值  

      printf "$black"  

    return  

    }  

    judegedate_01="judegedate01.`date +%y%m%d%h%m%s`.txt"  

    schema_judege01="select schema_name from information_schema.schemata ;"  

    mysql -h${mysql_host} -P${mysql_port}  -u${mysql_user} -p${mysql_pass} -e"${schema_judege01}" >${judegedate_01}  

    echo -e "\e[1;31m The databases name in current instance is: \e[0m"  

    awk 'NR==2,NR==0 { print $1}'  ${judegedate_01}  

    echo "  "  

    #Get the current script path and create a file named database.txt

    #in order to save the  backup  databases name.  

    filepath=$(cd "$(dirname "$0")"; pwd)  

    if [ ! -s "${filepath}/database.txt" ];then

     echo "將在當前目錄下新建databases.txt."  

     touch ${filepath}/database.txt  

     echo "#Each line is stored a valid database name">${filepath}/database.txt  

     chmod 700 ${filepath}/database.txt  

    fi  

    #Remove the comment line  

    awk 'NR==2,NR==0 { print $1}' ${filepath}/database.txt> ${filepath}/tmpdatabases.txt  

    #To determine whether a file is empty  

    if [ -s ${filepath}/tmpdatabases.txt ];then  

     #開始時間  

     started_time=`date +%s`  

     echo "備份開始時間:${started_time}"  

     db_num00=`awk 'NR==1,NR==0 { print NR}' ${filepath}/tmpdatabases.txt |tail -n1`  

     echo "此次將備份${db_num00}個數據庫:"  

     echo  

     or_dbnum=0  

     for i in  `awk 'NR==1,NR==0 { print $1}'  ${filepath}/tmpdatabases.txt`;  

     do

    ((or_dbnum+=1))  

    mysql_databases=$i  

    db_dpname=$dir_backup/${i}.${now_date}  

      echo -e "\e[1;32m  mydumper開始備份第${or_dbnum}個數據庫$i..... \e[0m"  

     sleep 2  

     echo -e "\e[1;32m  mydumper玩命備份中.....稍等片刻.... \e[0m"  

     ${mydumper} \  

     --database=${mysql_databases} \  

     --host=${mysql_host} \  

     --port=${mysql_port} \  

     --user=${mysql_user} \  

     --password=${mysql_pass} \  

     --outputdir=${db_dpname} \  

     --no-schemas \  

     --rows=50000 \  

     --build-empty-files \  

     --threads=4 \  

     --compress-protocol \  

     --kill-long-queries

     if [ "$?" -eq 0 ];then  

     echo -e "\e[1;32m  mydumper成功將數據庫$i備份到:${db_dpname}. \e[0m"  

     echo

     else  

     echo -e "\e[1;31m 備份異常結束. \e[0m"  

     fi  

     done  

    else  

      ipname=''  

      read -p "Please input you want to backup database name[a|A:ALL]:" ipname  

      #開始循環  

      #開始時間  

      started_time=`date +%s`  

      echo "備份開始時間:${started_time}"  

      if [ "$ipname" = "a" -o "$ipname" = "A" ];then  

    db_num=`awk 'NR==2,NR==0 { print NR-1}' ${judegedate_01} |tail -n1`  

    echo "此次將備份${db_num}個數據庫:"  

    echo

    mysql_databases=$ipname  

    or_dbnum=0  

     for i in  `awk 'NR==2,NR==0 { print $1}'  ${judegedate_01}`;  

     do

     ((or_dbnum+=1))  

    mysql_databases=$i  

    db_dpname=$dir_backup/${i}.${now_date}  

      echo -e "\e[1;32m  mydumper開始備份第${or_dbnum}個數據庫$i..... \e[0m"  

     sleep 2  

     echo -e "\e[1;32m  mydumper玩命備份中.....稍等片刻.... \e[0m"  

     ${mydumper} \  

     --database=${mysql_databases} \  

     --host=${mysql_host} \  

     --port=${mysql_port} \  

     --user=${mysql_user} \  

     --password=${mysql_pass} \  

     --outputdir=${db_dpname} \  

     --no-schemas \  

     --rows=50000 \  

     --build-empty-files \  

     --threads=4 \  

     --compress-protocol \  

     --kill-long-queries

     if [ "$?" -eq 0 ];then  

     echo -e "\e[1;32m  mydumper成功將數據庫$i備份到:${db_dpname}. \e[0m"  

     echo

     else  

     echo -e "\e[1;31m 備份異常結束. \e[0m"  

     fi  

     done  

      else

    echo "此次備份的數據庫名為:$ipname"  

    echo 

    #開始時間  

    STARTED_TIME=`date +%s`  

    mysql_databases=$ipname  

    db_dpname=$dir_backup/${mysql_databases}.${now_date}  

    judegedate_02="judegedate02.`date +%y%m%d%h%m%s`.txt"  

    schema_judege02="select schema_name from information_schema.schemata where schema_name='${ipname}';"  

    mysql -h${mysql_host} -P${mysql_port}  -u${mysql_user} -p${mysql_pass} -e"${schema_judege02}" >${judegedate_02}  

    if [ ! -s "${judegedate_02}" ];then  

     echo ""  

     echo -e "\e[1;31m  ******************************************************************* \e[0m"  

     echo -e "\e[1;31m  !o(︶︿︶)o! The  schema_name ${ipname} not exits,pleae check . ~~~~(>_<)~~~~  \e[0m"  

     echo -e "\e[1;31m  ********************************************************************** \e[0m"  

     echo ""  

     rm -rf ${judegedate_01}  

     rm -rf ${judegedate_02}  

     exit 0  

    else  

     echo -e "\e[1;32m  mydumper開始備份請稍等..... \e[0m"  

     sleep 2  

     echo -e "\e[1;32m  mydumper玩命備份中.....稍等片刻.... \e[0m"  

     ${mydumper} \  

     --database=${mysql_databases} \  

     --host=${mysql_host} \  

     --port=${mysql_port} \  

     --user=${mysql_user} \  

     --password=${mysql_pass} \  

     --outputdir=${db_dpname} \  

     --no-schemas \  

     --rows=50000 \  

     --build-empty-files \  

     --threads=4 \  

     --compress-protocol \  

     --kill-long-queries

     if [ "$?" -eq 0 ];then  

     echo -e "\e[1;32m  mydumper成功將數據庫備份到:${db_dpname}. \e[0m"  

     else  

     echo -e "\e[1;31m 備份異常結束. \e[0m"  

     fi  

    fi  

      # 循環結束  

      fi  

    fi  

    rm -rf ${judegedate_01}  

    rm -rf ${judegedate_02}  

    rm -rf ${filepath}/tmpdatabases.txt  

    echo "完成于: `date +%F' '%T' '%w`"  

    ######################################################################################################################  

    執行結果如下:#####################  

    The databases name in current instance is:

    information_schema  

    mysql  

    performance_schema  

    test  

    wind  

    mpiao  

    mpadmin  

    mplog  

    Please input you want to backup database name[a|A:ALL]:A  

    備份開始時間:1431574874  

    此次將備份8個數據庫:  

      mydumper開始備份第1個數據庫information_schema.....

      mydumper玩命備份中.....稍等片刻....

      mydumper成功將數據庫information_schema備份到:/backup/information_schema.201505141141.

      mydumper開始備份第2個數據庫mysql.....

      mydumper玩命備份中.....稍等片刻....

      mydumper成功將數據庫mysql備份到:/backup/mysql.201505141141.

      mydumper開始備份第3個數據庫performance_schema.....

      mydumper玩命備份中.....稍等片刻....

      mydumper成功將數據庫performance_schema備份到:/backup/performance_schema.201505141141.

      mydumper開始備份第4個數據庫test.....

      mydumper玩命備份中.....稍等片刻....

      mydumper成功將數據庫test備份到:/backup/test.201505141141.

      mydumper開始備份第5個數據庫wind.....

      mydumper玩命備份中.....稍等片刻....

      mydumper成功將數據庫wind備份到:/backup/wind.201505141141.

      mydumper開始備份第6個數據庫mpiao.....

      mydumper玩命備份中.....稍等片刻....

      mydumper成功將數據庫mpiao備份到:/backup/mpiao.201505141141.

      mydumper開始備份第7個數據庫mpadmin.....

      mydumper玩命備份中.....稍等片刻....

      mydumper成功將數據庫mpadmin備份到:/backup/mpadmin.201505141141.

      mydumper開始備份第8個數據庫mplog.....

      mydumper玩命備份中.....稍等片刻....

      mydumper成功將數據庫mplog備份到:/backup/mplog.201505141141.

    Mydumper備份腳本模板

    # 這是一個本地備份多臺MYSQL的腳本


    # 設定被備份主機信息

    TYPE=ALL

    IPADDR=localhost

    PASSWD=密碼


    # 指定主目錄

    BACKUP_FILES_PATH=&quot;/home/ftp/b/backup_data/mydumper&quot;


    # 以當前系統時間新建備份文件夾

    TIME_DIR=$(date -d "yesterday" +"%Y")/$(date +"%m")/$(date +"%d")/$(date +"%Y%m%d%H%M%S")

    BACKUP_FILES_DIR=${BACKUP_FILES_PATH}/$TYPE/$TIME_DIR;echo "新建備份目錄:$BACKUP_FILES_DIR"


    # 設置你想保存的天數,我這里設置的是保存30天之內的備份

    SAVE_DAYS=30


    # 刪除指定時間前的文件

    find $BACKUP_FILES_PATH -mtime +$SAVE_DAYS -exec rm -rf {} \;


    # 新建備份目錄

    echo &quot;新建備份目錄:$BACKUP_FILES_DIR&quot;

    mkdir -p $BACKUP_FILES_DIR

    echo &quot;備份對象:$IPADDR&quot;&gt;$BACKUP_FILES_DIR/log


    # 開始遠程備份

    # mydumper只需要3個全局權限 SELECT, RELOAD, LOCK TABLES 

    # 如果記錄需要二進制日志和指針信息 需要再添加2個權限 REPLICATION SLAVE, REPLICATION CLIENT

    time mydumper -h $IPADDR -u mydumper -p $PASSWD -o $BACKUP_FILES_DIR -c 9 -C -e -t 6 2&gt;&gt;$BACKUP_FILES_DIR/log


    cat $BACKUP_FILES_DIR/metadata

    cat $BACKUP_FILES_DIR/log


    # 復制最新的到外層文件夾

    rm -rf ${BACKUP_FILES_PATH}/$TYPE/LastBackUp

    cp -r $BACKUP_FILES_DIR ${BACKUP_FILES_PATH}/$TYPE/LastBackUp


    # 設定權限

    chown -R 1018:1100 $BACKUP_FILES_DIR


    # 恢復

    # time myloader -h localhost -u root -p 密碼 -d /home/ftp/b/backup_data/mydumper/ALL/LastBackUp -o -v 3 -C -t 6


    # 追加此腳本到計劃任務

    # echo "17 05 * * * sh /root/shell/backup_mysql.sh" >> /var/spool/cron/root

    # echo "06 05 * * * sh /root/shell/backup_mysql.sh" >> /var/spool/cron/root

      相關評論

      閱讀本文后您有什么感想? 已有人給出評價!

      • 8 喜歡喜歡
      • 3 頂
      • 1 難過難過
      • 5 囧
      • 3 圍觀圍觀
      • 2 無聊無聊

      熱門評論

      最新評論

      發表評論 查看所有評論(0)

      昵稱:
      表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
      字數: 0/500 (您的評論需要經過審核才能顯示)
      女人让男人桶30分钟免费视频,女人张开腿让男人桶个爽,一进一出又大又粗爽视频
    • <td id="ae6ms"><li id="ae6ms"></li></td>
    • <xmp id="ae6ms"><td id="ae6ms"></td><table id="ae6ms"></table>
    • <table id="ae6ms"></table>
    • <td id="ae6ms"></td>
      <td id="ae6ms"></td>
    • <table id="ae6ms"></table><table id="ae6ms"><td id="ae6ms"></td></table>
    • <td id="ae6ms"></td>
    • <table id="ae6ms"><li id="ae6ms"></li></table>
    • <table id="ae6ms"></table>