Nohup PHP 脚本 MySQL 问题在中间


nohup php script mysql issues in the middle

我有一个通过nohup运行的php脚本,它在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";
}

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

运行 nohup 命令后使用"不承认"。 例如

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

或:

使用"屏幕"而不是nohup。