plsql表设置主键_对复制实施主键约束
作者:Pedro Gomes 譯:徐軼韜
在本文中,我們介紹一個配置選項,該選項控制復(fù)制通道是否允許創(chuàng)建沒有主鍵的表。這延續(xù)了我們最近在復(fù)制安全性方面的工作,在該工作中,我們允許用戶強制執(zhí)行權(quán)限檢查和/或強制執(zhí)行基于行的事件。
在8.0.20上,我們?yōu)?strong>CHANGE MASTER TO語句引入了一個新選項:REQUIRE_TABLE_PRIMARY_KEY_CHECK。復(fù)制通道在執(zhí)行創(chuàng)建或更改表定義及其主鍵時可以選擇自己的策略。
在表定義上強制主鍵很重要。例如,在使用基于行的日志模式下進行復(fù)制時,表的主鍵對從數(shù)據(jù)庫的性能起著重要作用。服務(wù)器中使用變量sql_require_primary_key強制執(zhí)行此策略。在復(fù)制的上下文中,該變量的值將與所有更改表結(jié)構(gòu)(也稱為DDL)的查詢一起發(fā)送,因此從數(shù)據(jù)庫將遵循主數(shù)據(jù)庫上的任何限制。
如果從數(shù)據(jù)庫的操作員無法控制或信任主服務(wù)器,僅僅遵循在那里定義的限制是不夠的。因此,現(xiàn)在可以用REQUIRE_TABLE_PRIMARY_KEY_CHECK的值來影響此行為。
可以在復(fù)制通道上將此參數(shù)設(shè)置為:
ON:復(fù)制通道在復(fù)制操作中始終對sql_require_primary_key系統(tǒng)變量使用值“ON”,在所有create和alter table操作中都需要主鍵。
OFF:復(fù)制通道在復(fù)制操作中始終對sql_require_primary_key系統(tǒng)變量使用值“OFF” ,創(chuàng)建或更改表時不需要主鍵,即使主數(shù)據(jù)庫強制執(zhí)行了此類限制。
STREAM:默認值,復(fù)制通道為每個事務(wù)使用從主數(shù)據(jù)庫復(fù)制的值。這樣可以保留以前的服務(wù)器行為。
用法和優(yōu)點
第一個用例出現(xiàn)在對數(shù)據(jù)來源的主數(shù)據(jù)庫沒有嚴格控制的場景中。在這種情況下,?REQUIRE_TABLE_PRIMARY_KEY_CHECK = ON可確保表定義中沒有刪除任何主鍵,不會導(dǎo)致性能問題。
在多源復(fù)制方案中,此功能也非常有用。使sql_require_primary_key的值保持一致,允許來自不同主數(shù)據(jù)庫的復(fù)制通道之間的行為更加統(tǒng)一。當(dāng)多個主數(shù)據(jù)庫更新同一組表,并且其中一個表存在錯誤時,使用ON可以防止丟失主鍵。使用OFF可使多個主數(shù)據(jù)庫一起工作而不管它們能否操作主鍵。
在復(fù)制通道中使用權(quán)限檢查時,此功能也具有優(yōu)勢,因為將REQUIRE_TABLE_PRIMARY_KEY_CHECK設(shè)置為ON或OFF意味著具有PRIVILEGE_CHECKS_USER權(quán)限的帳戶不再需要額外的權(quán)限來操作sql_require_primary_key。如果設(shè)置為STREAM,除了需要創(chuàng)建或更改表的基本權(quán)限外,還要求權(quán)限檢查用戶具有會話管理級別的權(quán)限用以復(fù)制查詢。
配置
若要顯式更改復(fù)制通道在處理主鍵檢查策略的行為,您需要停止復(fù)制SQL線程。
可觀察性
相關(guān)的Performance Schema表進行了功能增強,用以顯示新的CHANGE MASTER TO…語句選項REQUIRE_TABLE_PRIMARY_KEY_CHECK的狀態(tài):
使用注意事項
此功能受RESET SLAVE ALL的影響,但不受RESET SLAVE的影響。
同樣,雖然群組復(fù)制插件強制使用主鍵執(zhí)行每個查詢,但該檢查不依賴于sql_require_primary_key并且限制較少。詳情參閱“https://dev.mysql.com/doc/refman/8.0/en/group-replication-requirements.html”。
摘要
此功能是一種新工具,可在復(fù)雜多樣的環(huán)境中保護您的復(fù)制流,同時您可以更好地控制復(fù)制用戶的權(quán)限。
希望這項新功能可以使您利用MySQL創(chuàng)建更安全的解決方案。歡迎進行測試,并告訴我們您的意見。
感謝您關(guān)注“MySQL解決方案工程師”!
總結(jié)
以上是生活随笔為你收集整理的plsql表设置主键_对复制实施主键约束的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中AJAX工作原理是什么
- 下一篇: 做为一名java高级程序员,需要了解哪些