nohup php脚本中间的mysql问题

时间:2016-02-16 19:32:11

标签: php mysql nohup

我有一个php脚本,我通过nohup运行,在mysql中间有这个问题。我的脚本通过几百个数据库并通过执行模式迁移。 (所有相同的架构)

`system("mysql --host=$db_host --user=$db_user --password=$db_password -v -v -v $database < ../update.sql");`

在迁移过程中会发生这种情况:

--------------
ALTER TABLE `phppos_customers` ADD `current_sales_for_discount` int(10) NOT NULL DEFAULT '0' AFTER `current_spend_for_points`
--------------

Terminal close -- sending "KILL QUERY 966" to server ...
Terminal close -- query aborted
Aborted

php脚本继续运行,其他数据库没有此问题。会导致这种情况的原因是什么?

php脚本通过以下方式运行:

nohup php update_pos_databases.php > results.txt 2>&1 </dev/null &

这是在Mac OS X 10.11.3

以下是我的超时值:

mysql> SHOW VARIABLES LIKE "%_timeout";
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| have_statement_timeout      | YES      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 28800    |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| rpl_stop_slave_timeout      | 31536000 |
| slave_net_timeout           | 60       |
| wait_timeout                | 28800    |
+-----------------------------+----------+
13 rows in set (0.00 sec)

我应该改变哪些?

以下是有关代码的更多信息:

foreach($databases as $database)
{
    echo "Running queries on $database\n***********************************\n";
    system("mysql --host=$db_host --user=$db_user --password=$db_password -v -v -v $database < ../update.sql"); 
    echo "\n\n";
}

1 个答案:

答案 0 :(得分:1)

一些建议(在旧的reddit线程上找到):

运行nohup命令后使用“disown”。 e.g。

nohup php update_pos_databases.php > results.txt 2>&1 </dev/null &
disown %1

或:

使用“screen”而不是nohup。