2011-02-26 130 views
0

我不得不改变我的web应用的蓝图,以减少加载时间(http://stackoverflow.com/questions/5096127/best-way-to-scale-data-decrease-loading-时间让 - 我 - 虚拟主机提供商快乐)。迁移MySQL数据,速度和效率

蓝图的这一变化意味着,我的应用程序的数据必须迁移到这个新的蓝图(否则我的应用程序将无法正常工作)。为了迁移我所有的MySQL记录(数千条记录),我写了一个PHP/MySQL脚本。

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

你知道一个快速,高效地迁移我所有的MySQL的记录,使用这个PHP/MySQL的脚本?

+0

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

回答

0

我解决了这个问题!

是的,它会占用大量的时间,是的,它会导致服务器负载的增加,但它只是需要做的事情。我使用错误日志在迁移时检查错误。

如何?

1)我添加了ignore_user_abort(true);set_time_limit(0);以确保脚本在te服务器上运行(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()),我收到迁移的结果的电子邮件,因此我不必手动检查。

这可能不是最好的解决办法,但它是一个很好的解决方案一起工作!

0

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

+0

PHP脚本为每个用户ID打印调试信息(成功/失败/重复)。我尝试使用ignore_user_abort(true),但我注意到有些记录被跳过(并且仍然需要很长很长的时间...)但是,我无法停止此脚本,所以现在我需要等待几天我可以尝试另一种方法来迁移我的数据。或者你有任何想法如何停止这个脚本? – Robin 2011-02-27 08:35:18

+0

@Robin ergh〜你有SSH访问权限吗?或者你可以联系他人吗?你需要“杀死”这个过程。 – Shad 2011-02-27 17:41:08