日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

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

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

      相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2015/5/14 17:54:33字體大小:A-A+

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

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

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

      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數(shù)據(jù)庫中創(chuàng)建一個測試庫和表(進入mysql數(shù)據(jù)庫)

      create database test;

      create table test (a int);

      mydumper參數(shù)介紹:

      -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 即使表沒有數(shù)據(jù),還是產(chǎn)生一個空文件

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

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

      -m, --no-schemas 不導出表結(jié)構(gòu)

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

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

      --kill-long-queries kill掉長時間執(zhí)行的查詢(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 使用的線程數(shù),默認4

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

      -V, --version

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

      myloader參數(shù)介紹:

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

      -q, --queries-per-transaction 每次執(zhí)行的查詢數(shù)量, 默認1000

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

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

      -e, --enable-binlog 啟用二進制恢復數(shù)據(jù)

      -h, --host

      -u, --user

      -p, --password

      -P, --port

      -S, --socket

      -t, --threads 使用的線程數(shù)量,默認4

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

      -V, --version


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

      mydumper輸出文件:

      metadata:元數(shù)據(jù) 記錄備份開始和結(jié)束時間,以及binlog日志文件位置。

      table data:每個表一個文件

      table schemas:表結(jié)構(gòu)文件

      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文件,備份部分數(shù)據(jù)庫  

      #2.如果database.txt為空,則執(zhí)行全備或備份指定的個別數(shù)據(jù)庫  

      #set parameter

      mydumper=/usr/local/bin/mydumper  #根據(jù)自己的實際情況設(shè)置  

      dir_backup=/backup  #根據(jù)自己的實際情況設(shè)置  

      mysql_host=localhost  #根據(jù)自己的實際情況設(shè)置  

      mysql_port=33306  #根據(jù)自己的實際情況設(shè)置  

      mysql_user=root  #根據(jù)自己的實際情況設(shè)置  

      mysql_pass=123456  #根據(jù)自己的實際情況設(shè)置  

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

      if [ ! -d $dir_backup ]; then  

        echo -e "\e[1;31m 保存?zhèn)浞莸闹髂夸?$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.  

       # 參數(shù) $1 = message  

       # 參數(shù) $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.  

       # 參數(shù)1 $1 = message  

       # 參數(shù)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}個數(shù)據(jù)庫:"  

       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}個數(shù)據(jù)庫$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成功將數(shù)據(jù)庫$i備份到:${db_dpname}. \e[0m"  

       echo

       else  

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

       fi  

       done  

      else  

        ipname=''  

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

        #開始循環(huán)  

        #開始時間  

        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}個數(shù)據(jù)庫:"  

      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}個數(shù)據(jù)庫$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成功將數(shù)據(jù)庫$i備份到:${db_dpname}. \e[0m"  

       echo

       else  

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

       fi  

       done  

        else

      echo "此次備份的數(shù)據(jù)庫名為:$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成功將數(shù)據(jù)庫備份到:${db_dpname}. \e[0m"  

       else  

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

       fi  

      fi  

        # 循環(huán)結(jié)束  

        fi  

      fi  

      rm -rf ${judegedate_01}  

      rm -rf ${judegedate_02}  

      rm -rf ${filepath}/tmpdatabases.txt  

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

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

      執(zhí)行結(jié)果如下:#####################  

      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個數(shù)據(jù)庫:  

        mydumper開始備份第1個數(shù)據(jù)庫information_schema.....

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

        mydumper成功將數(shù)據(jù)庫information_schema備份到:/backup/information_schema.201505141141.

        mydumper開始備份第2個數(shù)據(jù)庫mysql.....

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

        mydumper成功將數(shù)據(jù)庫mysql備份到:/backup/mysql.201505141141.

        mydumper開始備份第3個數(shù)據(jù)庫performance_schema.....

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

        mydumper成功將數(shù)據(jù)庫performance_schema備份到:/backup/performance_schema.201505141141.

        mydumper開始備份第4個數(shù)據(jù)庫test.....

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

        mydumper成功將數(shù)據(jù)庫test備份到:/backup/test.201505141141.

        mydumper開始備份第5個數(shù)據(jù)庫wind.....

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

        mydumper成功將數(shù)據(jù)庫wind備份到:/backup/wind.201505141141.

        mydumper開始備份第6個數(shù)據(jù)庫mpiao.....

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

        mydumper成功將數(shù)據(jù)庫mpiao備份到:/backup/mpiao.201505141141.

        mydumper開始備份第7個數(shù)據(jù)庫mpadmin.....

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

        mydumper成功將數(shù)據(jù)庫mpadmin備份到:/backup/mpadmin.201505141141.

        mydumper開始備份第8個數(shù)據(jù)庫mplog.....

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

        mydumper成功將數(shù)據(jù)庫mplog備份到:/backup/mplog.201505141141.

      Mydumper備份腳本模板

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


      # 設(shè)定被備份主機信息

      TYPE=ALL

      IPADDR=localhost

      PASSWD=密碼


      # 指定主目錄

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


      # 以當前系統(tǒng)時間新建備份文件夾

      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"


      # 設(shè)置你想保存的天數(shù),我這里設(shè)置的是保存30天之內(nèi)的備份

      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個全局權(quán)限 SELECT, RELOAD, LOCK TABLES 

      # 如果記錄需要二進制日志和指針信息 需要再添加2個權(quán)限 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


      # 設(shè)定權(quán)限

      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

        相關(guān)評論

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

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

        熱門評論

        最新評論

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

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)