首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何连接两台不同机器上的mysql数据库?

如何连接两台不同机器上的mysql数据库?
EN

Stack Overflow用户
提问于 2015-04-15 19:52:00
回答 4查看 2.3K关注 0票数 4

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

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

我使用WAMP,和MySQL一起在PHP上工作。请帮助我..。

EN

回答 4

Stack Overflow用户

发布于 2015-04-15 20:06:01

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2015-04-15 20:12:26

下面的代码打开两个MySQL服务器连接($conn1和$conn2),然后每个连接将选择一个要使用的数据库。

代码语言:javascript
运行
复制
$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
EN

Stack Overflow用户

发布于 2015-04-15 20:13:18

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

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

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

代码语言:javascript
运行
复制
#skip-networking
#bind-address            = 127.0.0.1

此外,我们必须告诉MySQL它应该为哪个数据库写入日志(这些日志由从服务器用来查看主服务器上发生了什么变化),它应该使用哪个日志文件,并且我们必须指定这个MySQL服务器是主服务器。我们想要复制数据库exampledb,因此我们将以下行放到/etc/mysql/my.cnf中:

代码语言:javascript
运行
复制
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=exampledb
server-id=1

然后我们重新启动MySQL:

代码语言:javascript
运行
复制
/etc/init.d/mysql restart

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

代码语言:javascript
运行
复制
mysql -u root -p
Enter password:

现在我们在MySQL外壳上。

代码语言:javascript
运行
复制
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY '<some_password>'; (Replace <some_password> with a real password!)
FLUSH PRIVILEGES;

接下来(仍然在MySQL外壳上)执行以下操作:

代码语言:javascript
运行
复制
USE exampledb;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

最后一个命令将显示如下所示:

代码语言:javascript
运行
复制
+---------------+----------+--------------+------------------+
| File          | Position | Binlog_do_db | Binlog_ignore_db |
+---------------+----------+--------------+------------------+
| mysql-bin.006 | 183      | exampledb    |                  |
+---------------+----------+--------------+------------------+
1 row in set (0.00 sec)

写下这些信息,我们稍后会在从机上用到它!

然后离开MySQL外壳:

代码语言:javascript
运行
复制
quit;

有两种可能将现有的表和数据从主服务器获取到从服务器。第一个是进行数据库转储,第二个是在从服务器上使用LOAD DATA FROM MASTER;命令。后者的缺点是master上的数据库在此操作过程中会被锁定,因此如果您在高流量的生产系统上有一个大型数据库,这不是您想要的,在这种情况下,我建议您遵循第一种方法。但是,后一种方法非常快,所以我将在这里介绍这两种方法。

如果您想遵循第一种方法,请执行以下操作:

代码语言:javascript
运行
复制
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加载数据,那么你现在没有什么必须做的。

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

代码语言:javascript
运行
复制
mysql -u root -p
Enter password:
UNLOCK TABLES;
quit;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29649493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档