【问题标题】:How to link two mysql databases in two different machines? [closed]如何在两台不同的机器上链接两个mysql数据库? [关闭]
【发布时间】:2015-04-15 11:51:59
【问题描述】:

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

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

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

【问题讨论】:

标签: php mysql database wamp


【解决方案1】:

据我了解,您需要 sample1 与 sample2 相同,并且自动分配查询。

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

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

【讨论】:

    【解决方案2】:

    以下代码打开两个 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);
    }
    

    【讨论】:

    • 您是否使用 Microsoft Word 来编辑您的代码?那些斜引号不适用于 PHP :-)
    【解决方案3】:

    有2个解决方案供您参考。

    1. Mysql 主从模式(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 Storage Engine,该引擎会将远程数据映射到本地,效果同第1项。 请看链接: https://dev.mysql.com/doc/refman/5.1/en/federated-storage-engine.html]

    希望对你有帮助!

    【讨论】:

      【解决方案4】:

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

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

      要配置master,我们首先要编辑/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)
      

      记下这些信息,我们稍后在slave上会用到它!

      然后离开 MySQL shell:

      quit;
      

      有两种可能将现有的表和数据从 exampledb 从 master 获取到 slave。第一个是做数据库转储,第二个是使用 LOAD DATA FROM MASTER;从机上的命令。后者的缺点是在这个操作过程中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 加载数据;那么你现在什么都不需要做。

      最后我们要解锁 exampledb 中的表:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-18
        • 1970-01-01
        • 2022-06-14
        相关资源
        最近更新 更多