「最大接続数」の問題については、次の3つのうちの1つである可能性があります。
1)サーバーにはすでに開いている接続が多すぎます。 MySQLサーバーは、それ以上の許可を拒否する前に、特定の数の開いている接続のみを処理できます。この制限は、サーバーのすべてのユーザー間で共有されます。通常はかなり高く設定されますが、多くの接続を確立することで、誰かがMySQLサーバーを効果的にDoSすることは簡単に可能です(ただし、以下を参照)
2)ユーザーアカウントでは、1時間あたりに許可される接続数が制限されています。その時間内にそれ以降の接続は拒否されます。これはユーザーごとに設定されます。
3)ユーザーアカウントには、許可されているオープン接続の数が制限されています。それ以上の接続は拒否されます。これはユーザーごとに設定されます。
ほとんどの場合、これにより失敗の正確な理由が特定されるため、接続の試行時に返されるエラーメッセージを読むことは常に重要です。
アカウントに最大接続数の制限がある場合(シナリオ#3)、エラーは次のようになります:コード:
ERROR 1226 (42000): User 'mysqldba' has exceeded the 'max_user_connections' resource (current value: 1)
ここで、「mysqldba」はユーザー名であり、「現在の値」はこのユーザーから許可されている開いている接続の最大数です。
アカウントに1時間あたりの接続の最大数の制限がある場合(シナリオ#2)、エラーは次のようになります。コード:
ERROR 1226 (42000): User 'mysqldba' has exceeded the 'max_connections_per_hour' resource (current value: 1)
ここでも、「mysqldba」はユーザー名であり、「現在の値」はこのユーザーに許可されている1時間あたりの最大接続数です。
エラーメッセージ(コード1040)が表示された場合は、MySQLサーバー全体の接続スロットが不足していることを示しています。これは前述のDoSシナリオです。
あなたはそれについて何ができますか?あなたが言ったことから、あなたはこのサーバーに対するスーパーユーザー特権を持っていないので、そのサーバーを担当するSysAdminに文句を言う以外は何もありません。許可される接続の最大数を増やす可能性があり、短期的には問題を解決できますが、サーバーを使用している他の誰かが愚かな数のデータベース接続を作成している場合、スロットは再びいっぱいになります。彼らがおそらくすべきことは、ユーザーごとの最大オープン接続制限も適用することです。これにより、ヘビーユーザーがサーバーを詰まらせるのを防ぐことができます。あなたのような共有サーバーの状況では、これが最も理にかなっています-「パワーユーザー」は独自のサーバーを持っているか、最大のオープン接続を増やすためにお金を払う必要があります。