将表从一个phpMyAdmin服务器复制到另一个服务器

时间:2015-12-14 21:29:44

标签: mysql

我的老板让我为我们的实时网站实施一个系统,将一个表从我们的一个数据库复制到自己的数据库。它应该每天做一次;它应该每三十分钟从更新中复制一次的数据库。我感到困惑的是如何使这项工作。我打算用PHP来做这个,最初的建议是使用AJAX,但我不确定当我们使用的页面没有被链接到时,我会看到后者的意思通过我们的任何其他页面,它不会显示任何内容。

如何复制此表,更不用说让两个数据库进行通信了?

2 个答案:

答案 0 :(得分:2)

为什么不使用MySQL replication不需要PHP或任何仅编程配置。

答案 1 :(得分:2)

你不会为此使用AJAX,因为AJAX是一个客户端< - >服务器通信技术,您需要在2台服务器之间复制数据。

根据您的数据库设置,您可以在PHP中执行此操作,即使这更像是一个黑客而不是真正的解决方案。在PHP中你可以做这样的事情(把它当作伪代码):

    $srcDb  = new mysqli('localhost', 'user', 'pass', 'source_database_name');
    $destDb = new mysqli('localhost', 'user', 'pass', 'dest_database_name');


    $result = $srcDb->query("SELECT * FROM TABLE");

    $destDb->begin_transaction();
    $destDb->query('DELETE FROM TABLE');

    while ($row = $result->fetch_assoc()) {
        // format insert query from $row...
        $destDb->query("INSERT INTO TABLE (...) VALUES (...)");
    }

    $destDb->commit();

根据表的大小,您将有时间DEST服务器上的表为空或行不完整。为避免这种情况,您可能会使用mysql事务,但是如果有大量行,则提交此类事务需要很长时间。这种解决方案通常效率很低。

执行此操作的正确方法是将源服务器设置为MySQL主服务器,将dest服务器设置为MySQL从服务器。这样,从服务器上的更新几乎是即时的。

Mysql复制文档: https://dev.mysql.com/doc/refman/5.7/en/replication.html

要仅复制一个表而不是整个数据库,请查看--replicate-do-table=name选项。