2013-10-17 16 views
12

私はSequelizeインスタンスを作成してから、mysqlデータベースで生のクエリを実行する非常に簡単なプログラムを持っています。 MySqlが起動して実行中に問題がなければ、問題なくクエリを実行できます。 しかし、MySqlが実行されていない場合、クエリのタイムアウトに達してからETIMEOUTエラーが発生するまで、クエリはエラーを発生させません。しかし、実際に起こっていることではありません。 mysqlが実行されていない場合、ENOTFOUNDエラーなどを出すクエリが期待されます.Mysqlがダウンしたり、Mysqlが非常にビジーで応答時間が非常に長い場合、エラーを管理して別のアクションを実行できます。 タイムアウト例外を待たずにMySQLが起動しているかどうかをチェックするにはどうすればいいですか?sequelizeでのmysql接続の確認

sequelize = new Sequelize(db_name, db_user, db_pass, opts); 

sequelize.query('SELECT * FROM some_table').success(function(result) { 
    console.log(result); 
}).error(function(err) { 
    console.log(err); 
}); 
+0

それはすべての時間をアップしますので、あなたは不被害妄想だアプリケーションコードを書いていない、あなたのMySQLサーバを監視する必要があります。タイムアウトは、サーバーがダウンして接続が失敗した場合の正しい動作です。遅すぎるとタイムアウト値を引き上げることができます。 – tadman

+0

パラノイアのケースでは、たとえMySQLサーバーが稼働していてもクエリーが過負荷のためにエラーを発したとしても、より良いデータベースインフラストラクチャが必要であることは言うまでもなく、Redisなどのキャッシュサーバーを使用して、あなたのすべてのクエリがあなたの例のようなものであれば、性能を念頭に置いて書かれていません。つまり、10.000行ではOKかもしれませんが、5秒または10秒ごとにクエリされた100万行に対してはOKです。 IMHOあなたはあなたがやっていることの中でより良いアプローチを再設計し研究しなければなりません。 – Gntem

答えて

20

にリセットされてその、authenticateは、接続を確認するために使用することができた場合、「WAIT_TIMEOUT」システム変数を確認してください:

var sequelize = new Sequelize("db", "user", "pass"); 

sequelize.authenticate().then(function(errors) { console.log(errors) }); 

authenticateは、SELECT 1+1 AS resultクエリを実行してdb接続を確認するだけです。

0

Sequelizeの最新バージョン(すなわち3.3.2)のようないくつかの些細な値

3

パスワード認証エラーのようなエラーは、.thenには表示されません。 sequelizeドキュメントhereから

あなたは 接続をテストするには、このよう.authenticate()関数を使用することができます。

sequelize 
    .authenticate() 
    .then(function(err) { 
    console.log('Connection has been established successfully.'); 
    }) 
    .catch(function (err) { 
    console.log('Unable to connect to the database:', err); 
    });