2017-04-25 261 views
1

我在Linux平臺上使用PostgreSQL 5.5。我正在嘗試監視主站和從站之間與PostgreSQL相關的所有流量。爲此,我使用Wireshark監控流量。然後,我啓動PostgreSQL並運行三個查詢(創建表Hello,創建表Bye &將圖像插入PostgreSQL數據庫)。在查詢期間,我在Master上運行Wireshark以捕獲Master和Slave之間的流量。
但是使用Wireshark捕獲的PostgreSQL流量存在一個問題。所有流量都是通過TCP數據包發送/接收的,並且流量採用編碼形式。我無法讀取這些數據。我想要找出我插入PostgreSQL數據庫的Wirehsark的所有這三個查詢。 尋找PostgreSQL查詢的最佳方式是什麼? 另一方面,我在MySQL數據庫上運行了相同的查詢,並重覆上述實驗。我可以在wireshark轉儲中輕鬆讀取所有這三個查詢,因爲它們不是以編碼形式。如何從Wireshark文件中查找(解碼)PostgreSQL查詢?

PostgreSQL實驗的Wireshark文件可在Wireshark-File上找到。我需要從Wirehsark文件中找出以上三個查詢。 關於文件: 192.168.50.11是我從哪裏插入查詢到遠程PostgreSQL的主服務器的源機器。 Master服務器的IP地址爲192.168.50.12。 192.168.50.13是從服務器的IP地址。查詢從.11開始執行並插入.12,然後使用主從方法複製到.13。 指針將非常受歡迎。

+0

你想知道如何記錄PostgrelSQL查詢。這篇文章看起來對你有幫助。 http://stackoverflow.com/questions/722221/how-to-log-postgresql-queries –

+0

謝謝你的建議! –

回答

1

您可能正在使用基於WAL的複製(默認),這意味着您不能。

這涉及在機器之間運送事務日誌。這是數據的實際磁盤表示。

還有其他基於觸發器的複製方法(slony等)和新的邏輯複製。

根據我的理解,它們都不能讓您重新創建完整的原始查詢,但會讓您更接近。

有些系統會在節點(如MySQL)上覆制查詢,但它們並不完全相同。

如果您想確切地知道主服務器上正在運行的查詢,請打開查詢日誌記錄並監視日誌。

+0

謝謝你的回答。 –

0

解決我自己的問題:

我得到了我的問題的解決。

我用Python代碼將查詢插入遠程PostgreSQL數據庫。我在PostgreSQL中使用以下行來連接數據庫。 CON = psycopg2.connect(主機= 「192.168.50.12」,數據庫= 「Postgres的」 用戶= 「Postgres的」,密碼= 「faban」) 如果你使用上面的方法,那麼所有的數據將被髮送以加密形式。如果你在python代碼中使用下面給出的方法,那麼所有數據將以解密形式發送。您可以輕鬆閱讀Wireshark中的所有查詢。 CON = psycopg2.connect( 「主機= 192.168.50.12 DBNAME = postgres用戶= postgres的密碼= faban sslmode =禁用」) 同樣是在C-碼的情況下也是如此。 解密的數據 sprintf(conninfo,「dbname = postgres hostaddr = 192.168.50.12 user = postgres password = faban sslmode = disable」); 加密數據 sprintf(conninfo,「dbname = postgres hostaddr = 192.168.50.12 user = postgres password = faban」);