目錄
- 爲什麼說pt-osc可能會引起主從延遲,有什麼好辦法解決或規避嗎?
- 你遇到過哪些原因造成MySQL異步複製延遲?
- MySQL每天產生了多大容量的binlog,用SQL語句能查到嗎?
- 用什麼方法可以防止誤刪數據?
一、爲什麼說pt-osc可能會引起主從延遲,有什麼好辦法解決或規避嗎?
1、若複製中binlog使用row格式,對大表使用pt-osc把數據從舊錶拷貝到臨時表,期間會產生大量的binlog,從而導致延時
2、pt-osc在搬數據過程中insert...select是有行鎖的,會降低事務並行度;且pt-osc搬數據過程中生成的binlog不是並行的,所以在slave不能並行回放
3、可以通過設定參數 --chunk-size、--chunk-time
控制每次拷貝數據大小,也可以設定--max-log、check-interval、check-slave-lag
等參數控制主從複製延遲程度(但這樣可能會造成pt-osc工作耗時太久,需要自行權衡)
二、你遇到過哪些原因造成MySQL異步複製延遲?
1、master上多爲併發事務,salve上則多爲單線程回放(MySQL 5.7起,支持真正的並行回放,有所緩解)
2、異步複製,本來就是有一定延遲的(否則也不叫做異步了,介意的話可以改成半同步複製)
3、slave機器一般性能比master更弱(這是很常見的誤區,其實slave對機 器性能要求並不低)
4、有時爲了節省機器資源,會在slave上運行多個實例
5、表結構設計不合理,尤其是在MySQL 5.6之前沒主鍵,幾乎會造成所有更新都全表掃描一遍,效率非常低
6、slave上運行大量只讀低效率的SQL
7、也會造成slave無法並行回放
8、業務設計缺陷,或網絡延遲等導致延遲
三、MySQL每天產生了多大容量的binlog,用SQL語句能查到嗎?
首先,這是個假設性命題(又一個釣魚題)。
這個需求完全可以通過系統層命令,配合MySQL中的“FLUSH BINARY LOGS”快速完成。
運行SHOW MASTER/BINARY LOGS命令能查看全部binlog列表,但沒辦法區別哪些是當天內生成的。
四、用什麼方法可以防止誤刪數據?
以下幾個措施可以防止誤刪數據,如下:
1、生產環境中,業務代碼儘量不明文保存數據庫連接賬號密碼信息
2、重要的DML、DDL通過平臺型工具自動實施,減少人工操作
3、部署延遲複製從庫,萬一誤刪除時用於數據回檔,且從庫設置爲read-only
4、確認備份制度及時有效
5、啓用SQL審計功能,養成良好SQL習慣
6、啓用 sql_safe_updates
選項,不允許沒 WHERE 條件的更新/刪除
7、將系統層的rm改爲mv
8、線上不進行物理刪除,改爲邏輯刪除(將row data標記爲不可用)
9、啓用堡壘機,屏蔽高危SQL
10、降低數據庫中普通賬號的權限級別
11、務必開啓binlog