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

时间:2015-04-15 11:52:00

标签: php mysql database wamp

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

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

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

4 个答案:

答案 0 :(得分:1)

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

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

编辑:这个答案可能不是您需要的答案,因为通过复制,您将需要每次服务器(主服务器)中的1个保持正常运行,或者如果要关闭其他服务器则需要第三个服务器

答案 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);
}

答案 2 :(得分:0)

有两种解决方案供您参考。

  1. Mysql maser-slave模式(mysql复制),在你的情况下我们假设'sample1'为master,其他数据库('sample2')为slave,当你从sample1的foo表中删除数据时,这个操作将反映foo 'sample2'表。更多详情请见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]
  3. 希望这可以帮到你!

答案 3 :(得分:-1)

您可以按照此article进行数据库复制,也可以按照以下步骤操作。

你在这里有一个由Falko Timme编写的教程,它将展示如何将数据库exampledb从主服务器复制到IP地址192.168.0.100到从服务器。两个系统(主站和从站)都在运行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转储。将此文件传输到从属服务器!

如果你想从MASTER获取LOAD DATA;那么你现在就没有什么必须做的。

最后我们必须解锁exampledb中的表:

mysql -u root -p
Enter password:
UNLOCK TABLES;
quit;