你肯定需要的MySQL常見四問

目錄

  • 爲什麼說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

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