mysql - node - 在数据库重启时通过服务器连接插入和查询的行

时间:2015-06-03 21:44:59

标签: mysql node.js

我今天遇到了一个问题,即通过我的节点服务器上的连接插入期间或之后发生的问题。执行插入的代码如下所示:

// ...
username = esc(username);
firstname = esc(firstname);
lastname = esc(lastname);
var values = [username, firstname, lastname].join(',');
var statement = 'INSERT INTO User(Username,FirstName,LastName) VALUES({0});\n'+
    'SELECT FirstName, LastName, Username, Id, IsActive FROM User WHERE Username={1};'
statement = merge( statement, [ values, username ] );
conn.query(statement, function(e, rows, fields){
    e ? function() {
        res.status(400);
        var err = new Error;
        err.name = 'Bad request';
        err.message = 'A problem occurred during sign-up.';
        err.details = e;
        res.json(err);
    }() : function(){
        res.json( rows[1] );
    }();
}

关于esc()merge()的快速说明,这些只是帮助准备数据库语句的util函数。

上述代码已成功完成,即。响应是200,在主体中新插入的用户行。插入的行可以在一天中通过相同的连接查询。我今天下午才注意到,当通过shell运行以下通用查询时,该行丢失了。

SELECT Id, FirstName, LastName FROM User;

所以在那时我重新启动了数据库和节点服务器。不幸。现在它看起来完全消失了,以及任何可靠的故障排除路径。

以下是我的服务器设置感兴趣的一些细节。到目前为止,不知道如何(如果有的话)这些都是可疑的。

  1. 仅使用单个连接而不是conn pool(暂时)

  2. 连接配置中的
  3. multipleStatements=true(显然上面的代码片段使用了这个)

  4. 代码库中其他位置用于控制回滚的
  5. SET autocommit = 0; START TRANSACTION; COMMIT;

  6. 让穷人每隔30秒保持活力,以避免连接超时:SELECT 1;

  7. 我整晚都在读书,但我的想法已经用完了。有什么建议?这可能是未提交数据的问题吗?如果是这样,有没有可靠的方法来调试它?更好的是,有什么方法可以阻止它吗?可能是什么原因?最后,如果在调试我的服务器时我发现处于这种状态的数据,是否有办法强制提交至少以便我不会丢失我的更改?

0 个答案:

没有答案