2011-03-13 19 views
1

我有兩個在多主複製設置中配置的MySQL服務器。每個人都是另一個奴隸和主人。我的應用程序需要在後臺運行一些大型查詢,這些查詢的結果將用於填充表格。我想,我可以在一臺服務器上運行這些大型查詢,而應用程序前端使用另一臺服務器。這樣,當服務器運行這些查詢時,應用程序不會變慢。什麼實際上被複制到MySQL從站?

這些查詢非常大INSERT .... SELECT。使用我的複製設置,似乎當一臺服務器完成查詢時,不是隻發送INSERT到從站,而是從站運行原始的大型INSERT/SELECT。

這是真的發生了嗎?或者有沒有辦法看到從主設備發送到從設備的命令,以驗證這是否是行爲?我可以告訴的唯一方法是CPU負載。

是否有一種方式讓奴隸只從INSERT得到INSERT ... SELECT在主人上運行?

回答

4

這是真的發生了嗎?

可能。

或者有沒有辦法看到哪些命令從主設備發送到從設備以驗證這是行爲?

嗯,你能deconstruct the binlog,但我希望在replication format options閱讀起來會頭痛誘導少得多。

你可能在基於聲明的模式這已被默認爲年齡。你想在行爲模式混合模式,如果那些INSERT INTO ... SELECT聲明是痛苦的。這些選項僅在MySQL 5.1或更高版本中可用。

+0

我認爲行模式對我很好。謝謝! – Brad 2011-03-13 21:28:24

+1

關於基於行的複製的警告:生成的二進制日誌通常比使用基於語句的更大。 – RolandoMySQLDBA 2011-03-13 22:44:45

+0

您可以使用mytop這樣的工具來顯示在MASTER和SLAVE上運行的查詢。您也可以直接運行SHOW PROCESSLIST;在基於聲明和基於行的基礎之間有一個折衷考慮。我想寫這些,但上面的鏈接是足夠好的閱讀材料。 – Collector 2012-02-09 06:49:11

0

運行實際查詢。你身邊的唯一方法是INSERT ... SELECT是自己打破它們。運行select,將結果存儲在內存中,然後執行批量插入。

相關問題