貌似很強的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]