我有一个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";
}
答案 0 :(得分:1)
一些建议(在旧的reddit线程上找到):
运行nohup命令后使用“disown”。 e.g。
nohup php update_pos_databases.php > results.txt 2>&1 </dev/null &
disown %1
或:
使用“screen”而不是nohup。