【问题标题】:Migrate MySQL data, speed & efficiency迁移 MySQL 数据,速度和效率
【发布时间】:2011-02-26 20:37:51
【问题描述】:

我不得不更改我的 web 应用程序的蓝图以减少加载时间 (http://stackoverflow.com/questions/5096127/best-way-to-scale-data-decrease-loading-time-make-my-webhost -快乐)。

蓝图的这种更改意味着我的应用程序的数据必须迁移到这个新的蓝图(否则我的应用程序将无法运行)。为了迁移我所有的 MySQL 记录(数千条记录),我编写了一个 PHP/MySQL 脚本。

在我的浏览器中打开此脚本不起作用。我已将脚本的时间限制设置为 0 以无限加载时间,但几分钟后脚本停止加载。 cronjob 也不是一个真正的选择:1) 奇怪的是它不会加载,但最大的问题是:2) 恐怕这会占用我共享服务器的太多资源。

您知道使用此 PHP/MySQL 脚本迁移所有 MySQL 记录的快速有效方法吗?

【问题讨论】:

  • 在 PHP 脚本运行时是否打印了任何调试信息?我一直认为这是有益的。此外,为了保持系统负载较低,请尝试在 SQL 语句中使用LIMIT 批量迁移记录; LIMIT 还需要一个辅助参数来抵消你的起始索引。

标签: php mysql database scale migrate


【解决方案1】:

您可以尝试 PHP 的“ignore_user_abort”。这有点危险,因为您需要某种方式来结束它的执行,但您的 浏览器 可能会在脚本执行时间过长后中止。

【讨论】:

  • PHP 脚本为每个用户 ID 打印调试信息(成功/失败/重复)。我尝试使用ignore_user_abort(true),但我注意到一些记录被跳过(而且,这仍然需要很长时间......)但是,我无法停止这个脚本,所以现在我需要等待几天我可以尝试另一种方法来迁移我的数据。或者你知道如何停止这个脚本?
  • @Robin ergh~ 你有 SSH 访问权限吗?或者你可以联系某人吗?你需要kill这个过程。
【解决方案2】:

我解决了这个问题!

是的,这会花费很多时间,是的,它会导致服务器负载增加,但只是需要这样做。我在迁移时使用错误日志来检查错误。

怎么做?

1) 我添加了 ignore_user_abort(true);set_time_limit(0); 以确保脚本继续在服务器上运行(当 while() 循环完成时停止)。

2) 在 while() 循环中,我添加了一些代码,以便能够通过创建一个名为 stop.txt 的小文本文件来停止迁移脚本:

    if(file_exists(dirname(__FILE__)."/stop.txt")) {
    error_log('Migration Stopped By User ('.date("d-m-Y H:i:s",time()).')');
    break;
}

3) 迁移错误和重复记录到我的错误日志中:

error_log('Migration Fail => UID: '.$uid.' - '.$email.' ('.date("d-m-Y H:i:s",time()).')');

4) 迁移完成后(使用mail()),我会收到一封包含迁移结果的电子邮件,因此我不必手动检查。

这可能不是最好的解决方案,但它是一个很好的解决方案!

【讨论】:

    猜你喜欢
    • 2013-10-29
    • 1970-01-01
    • 2012-06-30
    • 2015-01-14
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    相关资源
    最近更新 更多