もっと堅牢なデータベースサーバーを作るにはどうすればいいですか?私はこれがかなり一般的な問題だと知っていますが、いくつかの選択と2つの挿入を行うシンプルなサービスでMySQLを使用してあらゆる種類のエラーと停止時間を得ています。何も複雑でなく、JOINもありません。MySQLは本当に不安定です - マイグレーションを検討する
多くの接続のために私のホストはDBサーバーからブロックされていましたので、max_used_connectionsパラメータを増やしました。私のクライアントは実際に接続を閉じてプールを正しく処理しています。
数日間は正常でした。今日私は目を覚まし、MySQLサーバーはダウンしました。 service mysql restart
で再起動しようとしましたが、失敗しました。接続しようとしましたがエラー1040:接続が多すぎます。 私はサーバーを再起動できませんでした。
私はkillall mysqld
を実行し、service mysql start
でサーバーを起動しようとしました。サービスが開始されませんでした。実行してsu - mysql -s /bin/sh -c "/usr/bin/mysqld_safe > /dev/null 2>&1 &"
、サーバーが最後に起動しました。
また、今日のサーバ起動時に数秒後にサーバが死んでしまうので、max_connectionsの制限も増やしました。
は、1つのテーブルが破損したERROR 144 (HY000): Table '<table_name>' is marked as crashed and last (automatic?) repair failed
はREPAIR <table_name>
しようとしたが、いくつかの時間後にサーバがERROR 2006 (HY000): MySQL server has gone away
再び死亡しました。サーバーが死んだときはいつも、この同じプロセス(ここまでkillall)を約3回試行しました。
今私はREPAIR <table_name> QUICK
を実行していて、サーバーは死にそうではないようですが、実際には200kの行テーブルを修正するのにかなり時間がかかります。
ところで、私は2つのテーブルを持っています.1つは200k行ともう1つは11M行です。私は約2000人の同時ユーザーをピークにします。その結果、毎秒約100件のクエリが発生します。
これはMySQLが簡単にクラッシュすることはありますか? Cassandraのような他のスケーラブルなデータベースに移行する必要がありますか?私は実際に私のケースではリレーショナルデータベースを好んでいます(テーブル結果にはrequest_id、キーテーブルのkey_id FKを持つリクエストテーブルのFKがあります)が、実際に稼働時間が長いとリレーショナルメリットが失われることはありません。
他のソフトウェアに移行しても、悪いハードウェアで動作する「魔法の」コードがあるわけではありません。まず、MySQLとの接続/切断を望んでいません。永続的な接続が必要です。第二に、db用の適切なハードウェアを用意する必要があります。これは、良好なソリッドステートドライブと、十分なRAM RAMを備えているため、作業データを保持します。第三に、あなたのMySQLを設定する必要があります - それは2001年に "ok"を実行するように設定されています。答えるには、MySQLがクラッシュするのは普通ではありません。 –
MySQLはかなり堅牢で信頼性の高いサービスです。クラッシュは一般的ではなく、通常の動作とはみなされません。使用しているオペレーティングシステムのバージョンと、MySQLのバージョンをお知らせください。 – JasonD
また、仮想ホストからこれを実行しているようです - RAMとディスクのスペックを教えてください。 MySQLを再起動する際のエラーは、MySQL自体ではなく、OSに関連しています。 – JasonD