2015-04-15 129 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; 
相关问题