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