mysql转储查询挂起

时间:2012-06-04 04:00:02

标签: mysql

我运行了mysql -u root -p gf< 〜/ gf_backup.sql恢复我的db。但是当我看到进程列表时,我发现一个查询已经闲置了很长时间。我不知道原因。

mysql> show processlist;
    +-----+------+-----------+-------------+---------+-------+-----------+------------------------------------------------------------------------------------------------------+
    | Id  | User | Host      | db          | Command | Time  | State     | Info                                                                                                 |
    +-----+------+-----------+-------------+---------+-------+-----------+------------------------------------------------------------------------------------------------------+
    | 662 | root | localhost | gf | Query   | 18925 | query end | INSERT INTO `gf_1` VALUES (1767654,'90026','Lddd',3343,34349),(1 |
    | 672 | root | localhost | gf | Query   |     0 | NULL      | show processlist                                                                                     |
    +-----+------+-----------+-------------+---------+-------+-----------+------------------------------------------------------------------------------------------------------+

2 个答案:

答案 0 :(得分:1)

请使用df -h命令检查可用空间(如果在Linux / Unix下),如果空间不足,请不要杀死或重新启动MySQL,直到它在释放空间时赶上更改。

您可能还想检查my.cnf中的max_allowed_pa​​cket设置并将其设置为256M,请参阅http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_max_allowed_packet

答案 1 :(得分:0)

可能你的转储非常大并且包含很多规范化的数据(记录被分成一堆表,有一堆外键约束,索引等等。)

如果是这样,您可以尝试从SQL文件中删除所有约束和索引定义,然后导入数据并重新创建以前删除的指令。这是加速导入的一个众所周知的技巧,因为没有验证任何约束的INSERT命令要快得多,之后可以在单个事务中创建索引等。

另请参阅:http://support.tigertech.net/mysql-large-inserts

当然,你应该先杀掉查询。并删除它已创建的所有片段。