天天看點

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

繼續閱讀