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

问题描述:

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

我该如何复制这张表,更少得到两个数据库进行通信?

+0

我同意MySQL复制上的答案 - 但只是基于你的问题,它似乎像你的老板想要的东西验证具体。你能告诉我们为什么他想要一张表被复制?有可能有更好的解决方案。 –

+0

这与phpMyAdmin无关。 phpMyAdmin uis只是另一个PHP脚本 – 2015-12-14 21:40:40

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

+0

因为这似乎是主要的建议,我正在研究它是如何完成的细节,我很想知道它是否安全。我们并不完全想让我们的网站容易受到任何机会让人们获得我们的所有库存信息。 – user3521737

+0

当使用MySQL复制时,您只使用MySQL来降低与使用可能有其自身漏洞的多种技术相关的风险。 – ddalu5

您不打算为此使用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选项。

+0

我们在该特定表中只有大约1200条记录。它的数据是从另一个定期更新的数据生成的,并且取决于我们是否继续存储某个项目,或者如果我们添加了新项目,可能会删除或添加记录。在过去的几周里,我只看到了滴。 – user3521737

+0

有了1200条记录,你可以将新记录包装到mysql事务中,你应该没问题。复制仍然是一种更干净的方式。 – Karolis

+0

是否可以自动复制?这个想法是每天复制一次预先存在的表格以保持活动站点数据库的最新状态。 – user3521737