qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          定時備份mysql數據庫 并刪除7天前的備份 (windows linux )

          @echo off



          : basedata
          set ip=10.39.28.234
          set user=root
          set password=root1234
          set databaseName=crm_cloud

          set /a backupDays=7
          set mysqlBinPath=C:\Program Files (x86)\MySQL\MySQL Server 6.0\bin\
          set mysqlBackupPath=C:\mysql_back\

          set logs=%mysqlBackupPath%\logs.txt
          set day=%date:~7,2%
          set month=%date:~4,2%
          set /a year=%date:~10,4%


          if not exist %mysqlBackupPath% md %mysqlBackupPath%
          echo %year%-%month%-%day% >> %logs%

          set backupingFilePath=%mysqlBackupPath%\%databaseName%_%year%-%month%-%day%.sql
          cd /d %mysqlBinPath%

          echo backupdata >> %logs%
          set errorlevel=0
          echo errorlevel=%errorlevel%
          mysqldump -h%ip% -u%user% -p%password% --default-character-set=gbk --opt --extended-insert=false --triggers -R --hex-blob -x %databaseName%>%backupingFilePath%
          set /a myerrorlevel=%errorlevel%
          echo myerrorlevel=%myerrorlevel%
          if %myerrorlevel% leq 0 (
          if exist %backupingFilePath% (
          echo backupcomplete mysqlBackup_%year%-%month%-%day%.sql
          echo  backupcomplete mysqlBackup_%year%-%month%-%day%.sql >> %logs%
          ) else (
          echo backupfaile
          echo backupfaile >> %logs%
          pause
          exit
          )
          ) else (
          echo backupfail
          echo backupfail >> %logs%
          if exist %backupingFilePath% (
          del %backupingFilePath%
          )
          pause
          exit
          )
          rem delete backupDays's backup


          set /a day=1%day%-100-backupDays
          rem
          if %day% lss 1 (
          set /a daysTemp=day
          call :daysOfLastMonth
          ) else set /a daysTemp=0
          set /a day+=daysTemp
          rem
          if day lss 10 (set day=0%day%)
          set /a month=%month%
          if %month% lss 10 (set month=0%month%)

          set deleteBackupFilePath=%databaseName%%year%%month%%day%.sql
          echo mysqlBackup_%year%-%month%-%day%.sql
          echo mysqlBackup_%year%-%month%-%day%.sql >> %logs%
          if exist %mysqlBackupPath%\%deleteBackupFilePath% (
          del %mysqlBackupPath%\%deleteBackupFilePath%
           
          echo delcomplete >> %logs%
          ) else (

          echo the document isn't exist >> %logs%
          )
          echo -----------------------------------------------------end >> %logs%


          :daysOfLastMonth
          set /a month=%month%-1
          set /a mod1=%year%%%4
          set /a mod2=%year%%%100

          if %month% lss 1 (
          set month=12
          set year=%year%-1
          set day=31
          ) else (
          if %month% == 2 (
          set day=28
          if %mod1% == 0 (
          set day=29
          if mod2 == 0 (
          set day=28
          )
          )
          ) else (
          for %%a in (1 3 5 7 8 10 12) do (
          if %month% == %%a (
          set day=31
          goto :eof
          )
          )
          set day=30
          )
          )
          goto :eof

          以上為windows版本
          ----------------------------------------------------
          以下為linux版本第一個
          #!/bin/bash
          #Write by oneleaf@gmail.com

          #數據庫服務器地址
          DBHOST=localhost
          #數據庫登錄名
          USERNAME=root
          #數據庫密碼
          PASSWORD=
          #需要備份的數據庫 或 輸入類似 db1 db2 的列表清單
          DBNAMES="all"
          #備份MYSQL時生成CREATE數據庫語句
          CREATE_DATABASE="yes"
          #備份的目錄
          BACKUPDIR="/tmp/mysqlbackup"
          #發生到郵件的地址
          MAILADDR="test@example.com"
          #郵件最大附件尺寸2M
          MAILMAXATTSIZE="2000000"

          #當前備份日期和時間
          DATE=`date +%Y-%m-%d_%H_%M`
          OPT="--quote-names --opt"

          #檢查備份路徑是否存在,不存在則建立
          if [ ! -e "${BACKUPDIR}" ]; then
             mkdir -p "${BACKUPDIR}"
          fi

          #刪除備份路徑下的所有文件
          rm -fv ${BACKUPDIR}/*

          #檢查是否需要生成CREATE數據庫語句
          if [ "${CREATE_DATABASE}" = "yes" ]; then
             OPT="${OPT} --databases"
          else
             OPT="${OPT} --no-create-db"
          fi

          #檢查是否是備份所有數據庫
          if [ "${DBNAMES}" = "all" ]; then
             DBNAMES="--all-databases"
          fi

          BACKUPFILE=${DATE}.sql.gz

          cd ${BACKUPDIR}

          #備份數據庫
          `which mysqldump` --user=${USERNAME} --password=${PASSWORD} --host=${DBHOST} ${OPT} ${DBNAMES} |gzip > "${BACKUPFILE}"

          #獲取備份文件的尺寸
          BACKFILESIZE=`du -b ${BACKUPFILE}|sed -e "s/\t.*$//"`
          #檢查是否需要分割
          if [ ${BACKFILESIZE} -ge ${MAILMAXATTSIZE} ]; then
          #分割數據庫,合并使用 cat ${BACKUPFILE}.* > ${BACKUPFILE}
             `which split` -b ${MAILMAXATTSIZE} ${BACKUPFILE} ${BACKUPFILE}.
             for BFILE in ${BACKUPFILE}.*
             do
                 echo "Backup Databases: ${DBNAMES}; Use cat ${BACKUPFILE}.* > ${BACKUPFILE}" | mutt ${MAILADDR} -s "MySQL Backup SQL Files for ${HOST} - ${DATE}" -a "${BFILE}"
             done
          else
             echo "Backup Databases: ${DBNAMES}" | mutt ${MAILADDR} -s "MySQL Backup SQL Files for ${HOST} - ${DATE}" -a "${BACKUPFILE}"
          fi
          --------------------------------------------------------------------------
          以下為第二個版本
          ubuntu定時備份mysql,首先要寫一段shell腳本,用來備份mysql數據庫,再通過crontab定時執行備份mysql數據庫的shell腳本。

          1.備份mysql的shell腳本如下:
          ?
          1
          2
          3
          4
          5
          6
              
          #!/bin/bash
          date_str=$(date +%Y%m%d-%T)
          cd /home/steven/backup
          mysqldump -h localhost -u root --password=xxxx -R -E -e \
            --max_allowed_packet=1048576 --net_buffer_length=16384 databaseName\
             | gzip > /home/steven/backup/juziku_$date_str.sql.gz
          把上面這個腳本存放位置:/home/steven/mysql_backup.sh (當然,也可以放在其他位置)

          再賦于執行的權限,通過下面命令:
          sudo chmod +x /home/steven/mysql_backup.sh

          完成這步,我們就來執行一下這段腳本,看能不能備份mysql數據庫。
          在命令行輸入
          ./mysql_backup.sh
          就可以看到備份好的數據庫文件了


          2.完成上面這步,就可以備份mysql數據庫了,接下來,我們再通過crontab定時執行這段腳本。
          使用crontab -e命令,這個命令的使用比較簡單。
          在命令行輸入中,直接輸入 crontab -e
          就會打開一個編輯窗口,最后一行會有內容格式的提示:
          # m h dom mon dow command
          具體意義表示:分鐘 小時 日期 月份 星期 命令,在某月(mon)的某天(dom)或者星期幾(dow)的幾點(h,24小時制)幾分(m)執行某個命令(command),*表示任意時間。例如:0 3 * * * /home/steven/mysql_backup.sh就是:每天早上3點,執行mysql_backup.sh腳本。

          我們只要在里面添加一行就行了,內容如下:
          ?
          1
          2
              
          # 備份mysql數據庫 每天早上3點整執行
            0 3 * * * /home/steven/mysql_backup.sh

          這樣,每天早上3點,就會自動備份mysql數據庫了。
          -=----------------------------------------
          第三個版本
          我只需要
          1、創建保存備份文件的目錄:/home/mysql_data
           
          cd /home
          mkdir mysql_data
          2、創建備份腳本文件:/home/mysql_data/mysql_databak.sh
           
          cd /home
          cd mysql_data
          touch mysql_databak.sh
          vim mysql_databak.sh
          輸入以下內容:
          1
           
          #!/bin/sh
          2
           
          /etc/init.d/mysqld stop   #執行備份前先停止MySql,防止有數據正在寫
          入,備份出錯           
          3
           
          date=` date +%Y%m%d `      #獲取當前日期
          4
           
          DAYS=7                     #DAYS=7代表刪除7天前的備份,即只保留最近
          7天的備份
          5
           
          BK_DR=/home/mysql_data   #備份文件存放路徑
           
          6
           
          DB_DR=/var/lib/mysql/pw85   #數據庫路徑
          7
           
          LINUX_USER=root           #系統用戶名
          8
           
          tar zcvf $BK_DR/mysql_data$date.tar.gz $DB_DR  #備份數據
           
          ========================================第2頁========================================
          9
           
          /etc/init.d/mysqld start  #備份完成后,啟動MySql
          10
          chown -R $LINUX_USER:$LINUX_USER $BK_DR  #更改備份
          數據庫文件的所有者
          11
           
          find $BK_DR -name "mysql_data*" -type f -mtime +$DAYS -exec rm {} \
          ;
          #刪除7天前的備份文件(注意:{} \;中間有空格)
          12
           
          deldate=` date -d -7day +%Y_%m_%d ` #刪除ftp服務器空間7天前的備份
           
          13
           
          ftp -n<open 192.168.1.1 21 #打開ftp服務器。21為ftp端口
           
          14
           
          user admin 123456 #用戶名、密碼
          15
           
          binary #設置二進制傳輸
          16
           
          cd mysqlbak #進入ftp目錄(注意:這個目錄必須真實存在)
           
          17
           
          lcd /home/mysql_data #列出本地目錄
           
          18
           
          prompt
          19
           
          mput mysql_data$date.tar.gz   mysql_data$date.tar.gz #上傳目錄中的
          文件
          20
           
          mdelete mysql_data$deldate.tar.gz mysql_data$deldate.tar.gz #刪除
          ftp空間7天前的備份
          21
           
          close #關閉
           
          22
           
          bye ! #退出
           
          3、修改文件屬性,使其可執行
          chmod +x /home/mysql_data/mysql_databak.sh
           
          4、修改/etc/crontab #添加計劃任務
           
          vi /etc/crontab #在下面添加
           
          5 23 * * * root /home/mysql_data/mysql_databak.sh #表示每天23點05分
          執行備份
           
          5、重新啟動crond使設置生效
           
          /etc/rc.d/init.d/crond restart
           
          chkconfig crond on #設為開機啟動
           
          service crond start #啟動
           

          posted on 2012-04-23 11:42 順其自然EVO 閱讀(7372) 評論(0)  編輯  收藏 所屬分類: 數據庫

          <2012年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 新化县| 锡林郭勒盟| 望奎县| 海淀区| 乐山市| 文登市| 高阳县| 贡山| 溧水县| 始兴县| 静宁县| 山西省| 安达市| 大宁县| 泽州县| 龙泉市| 翁牛特旗| 宁海县| 高碑店市| 公主岭市| 逊克县| 潞西市| 定南县| 枣强县| 南开区| 措美县| 黎川县| 镇沅| 新野县| 黎城县| 临潭县| 天长市| 梁平县| 新源县| 渑池县| 安仁县| 黑水县| 贡觉县| 客服| 林口县| 沛县|