Php 如何在两台不同的机器上链接两个mysql数据库?

Php 如何在两台不同的机器上链接两个mysql数据库?,php,mysql,database,wamp,Php,Mysql,Database,Wamp,我的一台windows笔记本电脑上有一个名为“sample1”的mysql数据库,另一台电脑上有一个名为“sample2”的mysql数据库。我想首先将这两台机器连接在一起,并链接数据库“sample1”和“sample2”,以便我在“sample1”中执行的查询也必须反映在“sample2”中(分布式查询处理) 例如:如果sample1和sample2包含5条记录,则删除sample1中的一条记录也必须反映在sample2中 我使用WAMP并与MySQL一起使用PHP。请帮助…据我所知,您需要

我的一台windows笔记本电脑上有一个名为“sample1”的mysql数据库,另一台电脑上有一个名为“sample2”的mysql数据库。我想首先将这两台机器连接在一起,并链接数据库“sample1”和“sample2”,以便我在“sample1”中执行的查询也必须反映在“sample2”中(分布式查询处理)

例如:如果sample1和sample2包含5条记录,则删除sample1中的一条记录也必须反映在sample2中


我使用WAMP并与MySQL一起使用PHP。请帮助…

据我所知,您需要sample1与sample2相同,并且自动分发查询

看起来最好的方法(可能不是最简单的)是使用mysql的复制:


编辑:此答案可能不是您需要的答案,因为在复制过程中,您需要两台服务器中的一台(主服务器)每次都保持运行,或者如果您想关闭另外两台服务器,则需要第三台服务器。

以下代码打开两个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);
}
您可以按照此步骤进行数据库复制,也可以按照下面的步骤进行

这里有一个由Falko Timme编写的教程,它将展示如何将数据库exampledb从IP地址为192.168.0.100的主机复制到从机。两个系统(主系统和从系统)都运行Debian Sarge;但是,该配置应适用于几乎所有的发行版,并且很少或没有修改

要配置主机,我们首先必须编辑/etc/mysql/my.cnf。我们必须为MySQL启用网络,MySQL应该监听所有IP地址,因此我们注释掉这些行(如果存在):

此外,我们必须告诉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
然后我们以root用户身份登录MySQL数据库,并创建一个具有复制权限的用户:

mysql -u root -p
Enter password:
现在我们在MySQL外壳上

GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY '<some_password>'; (Replace <some_password> with a real password!)
FLUSH PRIVILEGES;
最后一个命令将显示如下内容:

+---------------+----------+--------------+------------------+
| File          | Position | Binlog_do_db | Binlog_ignore_db |
+---------------+----------+--------------+------------------+
| mysql-bin.006 | 183      | exampledb    |                  |
+---------------+----------+--------------+------------------+
1 row in set (0.00 sec)
写下这些信息,我们将需要它以后的奴隶

然后离开MySQL外壳:

quit;
从exampledb中获取现有表和数据的方法有两种:从主表到从表。第一个是进行数据库转储,第二个是使用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>!)

有两种解决方案供您参考

  • Mysql maser从模式(Mysql复制),在您的情况下,我们假设“sample1”为主,其他数据库(“sample2”)为从,当您从sample1的foo表中删除数据时,此操作将反映“sample2”的foo表。更多详细信息请参见
  • Mysql联邦存储引擎,该引擎将远程数据映射到本地,效果与第1项相同。 请参阅以下连结:

  • 希望这能帮助你

    这些链接的可能副本可能会对您有所帮助------------------您是否正在使用Microsoft Word编辑代码?这些斜引号在PHP中不起作用
    :-)
    quit;
    
    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>!)
    
    mysql -u root -p
    Enter password:
    UNLOCK TABLES;
    quit;