Replication

主從複製中的儲存過程

  • July 23, 2021

我有一個用於複製的模式產品的主從複製binlog_do_db = products

主架構中的一個表正在通過呼叫架構products_archive中的儲存過程進行存檔。數據從****products移動到products_archive的同一數據庫上的不同架構。

START TRANSACTION;
       INSERT INTO products_archive.dial
       SELECT * FROM products.dial
       WHERE products.dial.dial_datestamp <= DATE(NOW() - INTERVAL 30 DAY);
       DELETE FROM products.dial
       WHERE producst.dial.dial_datestamp <= DATE(NOw() - INTERVAL 30 DAY);
COMMIT;

但是從站只有一個未歸檔的模式**產品。**由於儲存過程位於未複製的架構上,因此應歸檔主程序,而不應歸檔從屬程序。

但是發生的事情是主記憶體檔成功,並且從伺服器上刪除了相同的數據。

由於模式products_archive未添加到複製模式列表中,數據是如何在從屬設備上清除的。

似乎正在發生的事情是您的儲存過程從 中刪除行products.dial,並且這些DELETE語句被簡單地複製到從站。儲存過程本身是否在非複制模式中並不重要。

根據給定的程式碼和場景,我假設您正在談論事務複製,並且在發布者處發生的命令“DELETE FROM products.dial”已復製到訂閱者。如果是這種情況,則意味著表 products.dial 被定義為您的出版物中的一篇文章,並且在您的情況下可能適用或可能不適用的一個選項是定義此特定文章而不是複制 DELETE 命令。這可以使用儲存過程sp_changearticle來完成

如果這不是您的情況所需/適用的行為,則另一種選擇可以是將要刪除的數據定向到位於另一個數據庫(即 ArchiveDatabase)的目標表中。

無論您提出什麼具體問題,請注意可以在 1 個自動命令中刪除並將輸出定向到目標表的語法,從而避免需要顯式事務,即使用OUTPUT子句

引用自:https://dba.stackexchange.com/questions/194470