2015-04-15 170 views
4

我有一個名爲'sample1'在我的Windows筆記本電腦和另一個名爲'sample2'在另一臺機器上的MySQL數據庫的MySQL數據庫。我想先將這兩臺機器連接在一起並鏈接數據庫'sample1'和'sample2',這樣我在'sample1'中執行的查詢也必須反映在'sample2'中(分佈式查詢處理)。如何在兩臺不同的機器上連接兩個mysql數據庫?

例如:如果SAMPLE1和SAMPLE2包含5個記錄,在SAMPLE1刪除記錄,必須在SAMPLE2也有所體現。

我使用WAMP並與PHP一起工作。好心幫...

+0

可能重複[如何將本地MySQL數據庫鏡像到在線(實時)MySQL?](http://stackoverflow.com/questions/7291875/how-to-mirror-local-mysql-database-to-online- realtime-mysql) – Siguza

+0

這些鏈接可能會對你有所幫助.. http://stackoverflow.com/questions/5832787/mysql-joins-between-databases-on-different-servers-using-python ------ ---------------------- http://www.quora.com/How-do-I-link-two-different-MySQL-databases-across -different-domains – phpfresher

回答

1

據我瞭解,你需要一個SAMPLE1是相同的SAMPLE2和全自動查詢均有分佈。

它看起來像最好的辦法(也許不是最簡單)是使用MySQL的複製:https://dev.mysql.com/doc/refman/5.0/en/replication-howto.html

編輯:這個答案可能不是你需要的,因爲與複製,您將需要一個1回答兩臺服務器(主服務器)每次都熬夜,或者如果要關閉另外兩臺服務器,則需要第三臺服務器。

1

下面的代碼打開兩個MySQL服務器的連接($ conn1就和$ CONN2),然後每個連接將選擇一個數據庫來使用。

$database1 = "students"; 
$database2 = "employees"; 
$conn1 = mysql_connect('host1', 'user', 'password'); 
if(!$conn1) { 
    die("Not connected: ". mysql_error()); 
}else{ 
    mysql_select_db($database1, $conn1); 
} 

$conn2 = mysql_connect('host2', 'user', 'password', TRUE); 
if(!$conn2) { 
    die("Not connected: ". mysql_error()); 
}else{ 
    mysql_select_db($database2, $conn2); 
} 
+1

您是否使用Microsoft Word來編輯您的代碼?那些傾斜的引號不能用於PHP':-)' – halfer

-1

您可以按照此article爲了做一個數據庫複製或按照下面的步驟。

你在這裏通過Falko Timme寫的教程將展示如何從與IP地址192.168.0.100到從主數據庫複製exampledb。這兩個系統(主和從)都在運行Debian Sarge;然而,該配置應該適用於幾乎所有的發行版,而幾乎不需要修改。

要配置主設備,我們首先必須編輯/etc/mysql/my.cnf。我們必須使網絡爲MySQL和MySQL監聽的所有IP地址,所以我們註釋掉這些行(如果existant):

#skip-networking 
#bind-address   = 127.0.0.1 

而且我們要告訴MySQL的哪個數據庫應該寫日誌(這些日誌被從服務器用來查看主服務器上發生了什麼變化),它應該使用哪個日誌文件,並且我們必須指定這個MySQL服務器是主服務器。我們要複製的數據庫exampledb,所以我們把下面的行到/etc/mysql/my.cnf:

log-bin = /var/log/mysql/mysql-bin.log 
binlog-do-db=exampledb 
server-id=1 

然後我們重啓MySQL:

/etc/init.d/mysql restart 

然後我們登錄到MySQL數據庫作爲root用戶並創建具有複製權限的用戶:

mysql -u root -p 
Enter password: 

現在我們在MySQL shell中。

GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY '<some_password>'; (Replace <some_password> with a real password!) 
FLUSH PRIVILEGES; 

下一頁(仍然在MySQL外殼中)做到這一點:

USE exampledb; 
FLUSH TABLES WITH READ LOCK; 
SHOW MASTER STATUS; 

最後的命令會顯示這樣的事情:

+---------------+----------+--------------+------------------+ 
| File   | Position | Binlog_do_db | Binlog_ignore_db | 
+---------------+----------+--------------+------------------+ 
| mysql-bin.006 | 183  | exampledb |     | 
+---------------+----------+--------------+------------------+ 
1 row in set (0.00 sec) 

寫下這些信息,我們會需要它後來在奴隸!

然後離開MySQL的外殼:

quit; 

有兩種可能性,從主到從獲取現有表和數據從exampledb。第一個是創建數據庫轉儲,第二個是使用LOAD DATA FROM MASTER;命令在奴隸。後者的缺點是在此操作期間主服務器上的數據庫將被鎖定,因此如果您在高流量生產系統上擁有大型數據庫,則這不是您想要的,並且我建議遵循此第一種方法案件。然而,後一種方法非常快,所以我將在這裏描述兩者。

如果你想跟着第一種方法,那麼這樣做:

mysqldump -u root -p<password> --opt exampledb > exampledb.sql (Replace <password> with the real password for the MySQL user root! Important: There is no space between -p and <password>!) 

這將在文件exampledb.sql創建exampledb的SQL轉儲。將此文件傳輸到您的從服務器!

如果你想去LOAD DATA FROM MASTER;那麼你現在就不需要做任何事情。

最後,我們必須解鎖exampledb表:

mysql -u root -p 
Enter password: 
UNLOCK TABLES; 
quit; 
相關問題