如何在两台不同的机器上连接两个MySQL数据库?

4
我有一个名为“sample1”的mysql数据库在我的一台Windows笔记本电脑上,另一台计算机上有另一个名为“sample2”的mysql数据库。我想首先将这两台计算机连接起来,并链接数据库“sample1”和“sample2”,以便在“sample1”中执行的查询也必须反映在“sample2”中(分布式查询处理)。
例如:如果sample1和sample2包含5条记录,则在sample1中删除一条记录必须在sample2中反映出来。
我使用WAMP并与MySQL一起使用PHP。请帮忙...

这些链接可能会对您有所帮助:

https://dev59.com/L2025IYBdhLWcg3wvIgo

http://www.quora.com/How-do-I-link-two-different-MySQL-databases-across-different-domains
- phpfresher
4个回答

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

据我理解,您希望将sample1与sample2设置为相同,并自动分配查询。

看起来最好的方法(也许不是最简单的)是使用mysql的复制功能:https://dev.mysql.com/doc/refman/5.0/en/replication-howto.html

编辑:这个答案可能不是您需要的答案,因为使用复制功能时,您需要确保两个服务器中的其中一个服务器(主服务器)始终处于运行状态,或者如果您想关闭两个服务器,则需要第三个服务器。


0

您可以通过文章来实现数据库复制,或者按以下步骤操作。

这里有一篇由Falko Timme撰写的教程,它将展示如何将IP地址为192.168.0.100的主服务器上的数据库exampledb复制到从服务器。两个系统(主服务器和从服务器)都运行Debian Sarge;但是,几乎所有发行版都应该可以进行少量或无修改的配置。

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

#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

然后我们以 root 身份登录到 MySQL 数据库,并创建一个具有复制权限的用户:

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 shell上)执行以下操作:

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 shell:

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;

0

这里有两种方案供您参考:

  1. Mysql主从模式(Mysql replication),在您的情况下,我们假设“sample1”为主数据库,“sample2”为从数据库。当您从“sample1”的foo表中删除数据时,此操作将反映在“sample2”的foo表中。更多详细信息请参见https://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-in-mysql
  2. Mysql FEDERATED存储引擎,该引擎将远程数据映射到本地,效果与项1相同。请参阅链接: https://dev.mysql.com/doc/refman/5.1/en/federated-storage-engine.html

希望能对您有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接