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