✅ 有效。主庫執行的預存程序/函數內部標準DML操作會被復制到從庫。
✅ 會。透過DDL語句(CREATE PROCEDURE/FUNCTION、ALTER、DROP)建立的程式物件,其定義會被復制到從庫,雙方擁有相同物件。
🔑 關鍵機制:MySQL記錄預存程序/函數內部發生的每個DML事件(行級變更),並將這些單獨DML語句復制到從庫。預存程序/函數的CALL呼叫本身不被復制。
因從庫擁有執行主庫Binlog中任意語句的權限,存在權限提升風險。DBA有兩種安全策略二選一:
| 策略 | 配置方式 | 適用場景 |
|---|---|---|
| 強制SUPER權限 | 建立預存程序的用戶必須擁有SUPER權限 | 嚴格管控環境、少數受信開發人員 |
| 信任常規建立者 | 設定log_bin_trust_routine_creators = 1,允許CREATE ROUTINE權限者建立 | 開放開發環境、信任團隊、簡化權限管理 |
前提:復制或Binlog(Point-in-Time Recovery)必須啟用。
RAND()、UUID()、NOW()等非確定性函數在主從產生不同結果DETERMINISTIC或設定log_bin_trust_routine_creators=0僅允許調用隨機函數,不保證復制一致性IF HOUR(NOW()) > 18 THEN ...)INSERT/UPDATE時發生錯誤IGNORE關鍵字執行,主庫錯誤被忽略,不復制錯誤更新CHECKSUM TABLE驗證主從一致性,特別針對預存程序高頻操作的表