2015-12-14 98 views
3

我的老闆讓我爲我們的實時網站實現一個系統,該系統將我們的一個數據庫中的表複製到其自己的表中。它應該每天做一次;它應該每三十分鐘更新一次數據庫。我感到困惑的是如何使這項工作。我打算爲此使用PHP,最初的建議是使用AJAX,但我不確定當我們使用的頁面不會被任何其他頁面鏈接時,我看到後者的意義。它不會顯示任何東西。將表從一臺phpMyAdmin服務器複製到另一臺

我該如何複製這張表,更少得到兩個數據庫進行通信?

+0

我同意MySQL複製上的答案 - 但只是基於你的問題,它似乎像你的老闆想要的東西驗證具體。你能告訴我們爲什麼他想要一張表被複制?有可能有更好的解決方案。 –

+0

這與phpMyAdmin無關。 phpMyAdmin uis只是另一個PHP腳本 – 2015-12-14 21:40:40

回答

2

爲什麼不使用MySQL replication不需要PHP或任何編程只配置。

+0

因爲這似乎是主要的建議,我正在研究它是如何完成的細節,我很想知道它是否安全。我們並不完全想讓我們的網站容易受到任何機會讓人們獲得我們的所有庫存信息。 – user3521737

+0

當使用MySQL複製時,您只使用MySQL來降低與使用可能有其自身漏洞的多種技術相關的風險。 – ddalu5

2

您不打算爲此使用AJAX,因爲AJAX是客戶端< - >服務器通信技術,您需要在2臺服務器之間複製數據。

根據你的數據庫設置,你可以用PHP來完成,儘管這樣做可能比真正的解決方案更具破壞性。在PHP中,你可以做這樣的事情(把它當作僞代碼):

$srcDb = new mysqli('localhost', 'user', 'pass', 'source_database_name'); 
    $destDb = new mysqli('localhost', 'user', 'pass', 'dest_database_name'); 


    $result = $srcDb->query("SELECT * FROM TABLE"); 

    $destDb->begin_transaction(); 
    $destDb->query('DELETE FROM TABLE'); 

    while ($row = $result->fetch_assoc()) { 
     // format insert query from $row... 
     $destDb->query("INSERT INTO TABLE (...) VALUES (...)"); 
    } 

    $destDb->commit(); 

根據表的大小,你將有一個時候DEST服務器上的表將是空的或有不完整的行。爲了避免這種情況,你可以使用mysql事務,但是對於大量的行來說,提交這樣的事務將需要很長時間。這個解決方案通常非常低效。

正確的做法是將源服務器設置爲MySQL主服務器,將dest服務器設置爲MySQL從服務器。這樣,從服務器上的更新幾乎是即時的。

MySQL複製文檔: https://dev.mysql.com/doc/refman/5.7/en/replication.html

僅複製一個表,而不是整個數據庫,看看--replicate-do-table=name選項。

+0

我們在該特定表中只有大約1200條記錄。它的數據是從另一個定期更新的數據生成的,並且取決於我們是否繼續存儲某個項目,或者如果我們添加了新項目,可能會刪除或添加記錄。在過去的幾周裏,我只看到了滴。 – user3521737

+0

有了1200條記錄,你可以將新記錄包裝到mysql事務中,你應該沒問題。複製仍然是一種更乾淨的方式。 – Karolis

+0

是否可以自動複製?這個想法是每天覆制一次預先存在的表格以保持活動站點數據庫的最新狀態。 – user3521737

相關問題