程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 重要業務MySQL冷備解決方案,mysql冷備解決方案

重要業務MySQL冷備解決方案,mysql冷備解決方案

編輯:MySQL綜合教程

重要業務MySQL冷備解決方案,mysql冷備解決方案


1、概述

    在公司業務裡面,當對應的業務數據不是很重要的時候,我們一般會簡單的寫個腳本,每天半夜把數據庫數據全量拉取下來,備份到本地磁盤。但當業務比較重要的時候,這樣簡單操作會存在許多問題,比如本地磁盤損壞。因此,為了保證數據的安全性和可恢復性,對於重要業務一般不會備份到本地磁盤。

    下面描述一下自己在工作中用到的解決方案,總體的架構圖如下:DB系統為一主一從,然後第一步每天凌晨12點去備份從機上的數據;第二步凌晨1點再將備份數據庫上的數據備份到公司的磁盤上。接下來根據這個架構,給出詳細的備份代碼:

2、詳細備份方案

2.1 slave->備份服務器

采用的是mysqldump,slave數據庫為InnoDB引擎。

1 #!/bin/bash 2 3 PROGRAM_NAME="cold_backup" 4 LOG_FILE=$PROGRAM_NAME.log 5 PID_FILE=$PROGRAM_NAME.pid 6 7 LOG_LEVEL=0 8 LOG_LEVEL_STRING=("TRACE" "DEBUG" "INFO" "WARNING" "ERROR" "FATAL") 9 10 function LOG() 11 { 12 if [ $1 -gt $LOG_LEVEL ]; then 13 echo "[$(date "+%y-%m-%d %H:%M:%S")][${LOG_LEVEL_STRING[$1]}]$2" >> ${LOG_DIR}$LOG_FILE 14 fi 15 } 16 17 function LOG_FATAL() 18 { 19 LOG 5 "$1" 20 } 21 22 function LOG_ERROR() 23 { 24 LOG 4 "$1" 25 } 26 27 function LOG_WARNING() 28 { 29 LOG 3 "$1" 30 } 31 32 function LOG_INFO() 33 { 34 LOG 2 "$1" 35 } 36 37 function LOG_DEBUG() 38 { 39 LOG 1 "$1" 40 } 41 42 function LOG_TRACE() 43 { 44 LOG 0 "$1" 45 } 46 47 # 其實不需要,因為每天就備份一次,log完全不會超過32M 48 function shrink_file() 49 { 50 local file=$1 51 if [ ! -f $file ]; then 52 return 1 53 fi 54 local file_size=`du -b $file | awk '{print $1}'` 55 if [ $? -ne 0 ]; then 56 return 2 57 fi 58 max_size=32000000 #32M 59 if [ $file_size -lt $max_size ]; then 60 return 3 61 fi 62 truncate_row=$(wc -l $file | awk '{print $1}') 63 ((truncate_row=truncate_row/2)) 64 if [ $truncate_row -ge 1 ]; then 65 sed -i "1,${truncate_row}d" $file 66 return 0 67 fi 68 return 4 69 } 70 71 function clear_file() 72 { 73 echo "" > $1 74 } 75 76 if [ -f $PID_FILE ]; then 77 program_pid=`cat $PID_FILE` 78 if [ $? -eq 0 ] && [ -n "$program_pid" ]; then 79 if ps u -p "$program_pid" | grep -wc $PROGRAM_NAME ; then 80 LOG_INFO "program is running, quit now" 81 exit 0 82 fi 83 fi 84 fi 85 86 # XXX業務數據庫 87 SLAVE_HOST="1.2.3.4:3306" 88 SERVER_NAME="[ShangHai_XX_YY_ZZ_Slave]" 89 90 BACKUP_DIR="/data/cold_backup" 91 TODAY=`date '+%Y%m%d'` 92 BACKUP_FILE=${SLAVE_HOST}_${SERVER_NAME}_${TODAY}.sql 93 94 echo "$$" > $PID_FILE 95 shrink_file $LOG_FILE 96 LOG_INFO "--------------------START BACKUP--------------------" 97 LOG_INFO "begindump:`date '+%y-%m-%d %H:%M:%S'`" 98 99 /usr/local/services/mysql/bin/mysqldump --single-transaction --socket=/tmp/mysql_3306.sock --databases XXX數據庫 > "$BACKUP_FILE" 100 rm -f $(find $BACKUP_DIR -name '*.sql' -mtime +7) 101 102 count=`ls -l | grep $TODAY | grep sql | wc -l` 103 if [ $count -eq 0 ];then 104 # alarm, no today sql data 105 LOG_WARNING " NO cold backup" 106 fi 107 108 LOG_INFO "enddump:`date '+%y-%m-%d %H:%M:%S'`" 109 110 # remove pid_file 111 rm $PID_FILE View Code

2.2 備份服務器->公司磁盤

采用rsync備份,需要備份服務器和公司磁盤之間可以直接rsync,可以通過ssh來設置。

 View Code

 


debian上怎對現有的mysql做冷備份

應該和其它LINUX系統做冷備一樣的
1、先查一下DATADIR
mysql> show variables like '%datadir%';
2、關閒數據庫
# mysqladmin shutdown
3、復制數據庫文件
cp -Rf $datadir /xxx
$datadir:就是你的數據目錄
 

數據庫熱備與冷備的不同是什

熱備份針對歸檔模式的數據庫,在數據庫仍舊處於工作狀態時進行備份.而冷備份指在數據庫關閉後,進行備份,適用於所有模式的數據庫.熱備份的優點在於當備份時,數據庫仍舊可以被使用並且可以將數據庫恢復到任意一個時間點.冷備份的優點在於它的備份與恢復操作相當簡單,並且由於冷備份的數據庫可以工作在非歸檔模式下,數據庫性能會比歸檔模式稍好
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved