程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 貌似很強的mysql備份戰略分享

貌似很強的mysql備份戰略分享

編輯:MySQL綜合教程

貌似很強的mysql備份戰略分享。本站提示廣大學習愛好者:(貌似很強的mysql備份戰略分享)文章只能為提供參考,不一定能成為您想要的結果。以下是貌似很強的mysql備份戰略分享正文


逐日清晨2:00停止dump對響應數據庫停止備份,同時對響應數據庫停止binlog日記文件更新。
假如發明數據庫毛病,只須要先恢復上一個dump的備份,然後再復原當天的binlog日記文件。

舉例:
逐日12:00履行:


mysqldump database --flush-logs -uroot -p --opt > database_20020601.sql

依照日期規矩履行。

假如想恢復到今早10點的數據庫,那末:

1、完全備份全部以後數據庫

cd /var/lib/mysql
mysqldump -uroot -p123456  mydata > mydata.bak 

2、刪除以後備份好的數據庫

rm -rf mydata

3、先用dump恢復

mysql -uroot -p123456
mysql database -uroot -p123456 < database_20020601.sql 

4、再用binlog按時光恢復

mysqlbinlog --stop-date="2011-07-28 10:18:49" /var/lib/mysql/mysql-bin.000006 | mysql -uroot -p123456

備注:
1、最好要把dump備份和binlog備份保留在異地--異地備份。
2、mysql主從復制。

續至少個基類


class B(A1,A2,A3 ...)

這時候B的mro序列 mro(B) = [B] + merge(mro(A1), mro(A2), mro(A3) ..., [A1,A2,A3])
merge操作就是C3算法的焦點。

遍歷履行merge操作的序列,假如一個序列的第一個元素,是其他序列中的第一個元素,或不在其他序列湧現,則從一切履行merge操作序列中刪除這個元素,歸並到以後的mro中。

merge操作後的序列,持續履行merge操作,直到merge操作的序列為空。

假如merge操作的序列沒法為空,則解釋不正當。

例子:

class A(O):pass
class B(O):pass
class C(O):pass
class E(A,B):pass
class F(B,C):pass
class G(E,F):pass

A、B、C都繼續至一個基類,所以mro序列順次為[A,O]、[B,O]、[C,O]

mro(E) = [E] + merge(mro(A), mro(B), [A,B])
       = [E] + merge([A,O], [B,O], [A,B])

履行merge操作的序列為[A,O]、[B,O]、[A,B]

A是序列[A,O]中的第一個元素,在序列[B,O]中不湧現,在序列[A,B]中也是第一個元素,所以從履行merge操作的序列([A,O]、[B,O]、[A,B])中刪除A,歸並到以後mro,[E]中。
mro(E) = [E,A] + merge([O], [B,O], [B])

再履行merge操作,O是序列[O]中的第一個元素,但O在序列[B,O]中湧現而且不是個中第一個元素。持續檢查[B,O]的第一個元素B,B知足前提,所以從履行merge操作的序列中刪除B,歸並到[E, A]中。

mro(E) = [E,A,B] + merge([O], [O])
       = [E,A,B,O]

完成C3算法的代碼


#-*- encoding:GBK -*-# 
def mro_C3(*cls): 
        if len(cls)==1: 
            if not cls[0].__bases__: 
                return  cls 
            else: 
                return cls+ mro_C3(*cls[0].__bases__) 
        else: 
            seqs = [list(mro_C3(C)) for C in cls ] +[list(cls)] 
            res = [] 
            while True: 
              non_empty = list(filter(None, seqs)) 
              if not non_empty: 
                  return tuple(res) 
              for seq in non_empty: 
                  candidate = seq[0] 
                  not_head = [s for s in non_empty if candidate in s[1:]] 
                  if not_head: 
                      candidate = None 
                  else: 
                      break 
              if not candidate: 
                  raise TypeError("inconsistent hierarchy, no C3 MRO is possible") 
              res.append(candidate) 
              for seq in non_empty: 
                  if seq[0] == candidate: 
                      del seq[0]

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