簡體   English   中英

如何在PHP和MySQL中將幾條記錄從一台服務器上的表復制到另一台服務器上具有相同結構的表?

[英]How to copy few records from a table on one server to the table with same structure on another server in PHP and MySQL?

我在兩個不同的服務器上有兩個相同的MySQL數據庫。 最初,這兩個數據庫具有完全相同的結構並包含相同的數據。

但是后來又有一些新記錄(新用戶)被添加到兩個表中。 這造成了這些表中數據的差異。

現在的問題是,某個表中的舊數據(在兩個數據庫的結構和數據相同時就存在)由於某種未經授權的手段而被篡改,並且在一個字段中包含空白值。

現在,我希望將這些數據恢復為先前的狀態(例如初始值)。 為此,我必須觸發一個查詢,該查詢將從一台服務器的同一表中獲取丟失的數據,並將其添加到發生數據篡改問題的另一台服務器的同一表中。

如果可以通過某種方式用PHP編寫一些腳本來完成這項工作,那對我也很好。

有人可以建議我如何實現這一目標嗎?

如果您想了解我所面臨的問題的更多詳細信息,請告訴我。

謝謝。

為什么不從其他服務器導出數據?

然后將表導入到當前服務器(使用其他名稱或創建新數據庫)

UPDATE

不,它不會替代桌子。 您可以創建另一個數據庫並將其導入到新數據庫中,而不是現有數據庫中。

或者,您編輯導出文件並更改名稱,然后將其導入。

范例

如果這是您的導出文件:

CREATE TABLE IF NOT EXISTS `Customer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `Name` char(32) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

更改名稱(注意,我將客戶更改為customer2)

然后執行導入。

CREATE TABLE IF NOT EXISTS `Customer2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `Name` char(32) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

更新2

現在,您有一個帶有空白列的當前表和一個“備份”表2。

兩個表都應具有唯一的ID或某種形式。

這是基本方案:

遍歷table1中的所有記錄以獲得唯一的id列值。

使用該ID查找table2中空白列的值。

從表2中的值更新表1中的空白列。

SELECT `id` FROM `table1` WHERE 1

SELECT `blankcolumn` FROM `table2` WHERE `id` = $row['id']

UPDATE `table1` SET `blankcolumn` = `table2`.`blankcolumn`

我將創建一個RESTful API,允許一台服務器使用JSON將內容獲取,放置,刪除內容到另一台服務器。

因此,一台服務器具有一個URL,您可以向其提交一些JSON(或XML)數據。

然后,另一台服務器執行CURL請求並發送數據。

您可能要等到一次有足夠的數據發送后再進行操作,這樣就不會在服務器之間不斷發出請求。

您也可以使用密碼保護系統,因此沒有其他人可以編輯您的數據庫:P

有很多事情要做,但是我認為,如果您查找如何在PHP中創建REST API,以及如何進行CURL請求,您會發現它非常簡單。 您還可以使用JavaScript AJAX調用與此類系統進行通信,這打開了更多可能性。

某些數據庫類型和數據庫服務提供程序(它們為您運行db)可以將數據庫擴展到多個實例以執行此類操作。 這也許也值得研究。 數據庫之間相互匹配通常會有所延遲-這解釋了社交媒體和拍賣/分類網站上的很多怪異之處,這些帖子可能會在一段時間內不為您顯示。

如果數據與諸如金融交易之類的真正重要的事情有關,那么有些錢會丟失一段時間是不可接受的,那么您可能需要對此更加認真。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM