mysql 冷備註意事項

mysql 冷備時可以選擇停整個實例,但是得根據業務來確定,比如有的備份庫除了提供備份外還會提供給RD,QA等相關人員使用,這部分人可以接受一定的數據延遲,這樣冷備的時候更多是隻停同步SQL線程,爲什麼不是stop slave ?,停了同步是不是就能直接拷走數據目錄打包or 存到遠程服務器?

對於上面兩個問題;

第一個問題非常容易理解,當拷完數據重新同步後如果IO線程落後太久會瞬間取走很多binlog,導致網卡報警,當然可以限制主庫->從庫的網卡允許帶寬也可以解決,但是這需要人工去幹擾,在機器比較多時不推介;


第二個問題:

在停了同步也不能直接拷貝數據,需要注意兩個點:

1、是否有臨時表被打開

如果打開了臨時表,你停止了從庫服務,當從庫重新啓動時,臨時表需要這些更新,但是臨時表已經不再可用;這樣會導致同步不能正常啓動;

正常做法有兩種

a、在停同步前,檢測這個Slave_open_temp_tables是否爲0

show status like "Slave_open_temp_tables";

如果爲0說明有臨時表打開,設置個超時時間循環等待,直到爲0才停同步;

b、使用如下步驟

  • 使用stop slave sql_thread語句
  • 使用show status查看Slave_open_temp_tables的值
  • 如果這個值不是0,使用start slave sql_thread;重啓從庫SQL 線程,一會兒後再重複執行這個步驟
  • 當這個值是0時,使用mysqladmin shutdown命令停止slave.


2、停掉用不後,需要flush logs&tables,然後等帶master 線程刷後臺數據

這裏需要設置 innodb_max_dirty_pages_pct=0,一直等到 master 線程爲 state: waiting for server activity,然後恢復innodb_max_dirty_pages_pct爲之前的值,這樣能保證所有的數據是靜止的,當重新恢復數據時可以正常使用;



參考:http://www.cnblogs.com/sunss/archive/2010/10/11/1847690.html



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章