MySQL OperationalError (1129) の解決方法と再発防止策

システム開発をしていると、データベース接続エラーに遭遇することは珍しくありません。特に MySQL を使用している場合、OperationalError (1129) というエラーに出くわすことがあります。

今回は、pymysql を使って MySQL に接続しようとした際に発生した以下のエラーを解決する方法について解説します。

pymysql.err.OperationalError: (1129, "10.0.3.252' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'")

このエラーの原因と、どのように対応すればよいのかを詳しく見ていきましょう。


目次

エラーの詳細と原因

このエラーは、MySQL が 「特定の IP からの接続エラーが多すぎる」 と判断したときに発生します。

MySQL には、一定回数以上の接続エラーを検知すると、その IP アドレスをブロックする仕組みがあります。デフォルトでは max_connect_errors の値が制限されており、それを超えるとエラー 1129 が発生します。

主な原因として以下が考えられます:

  1. 間違った認証情報(ユーザー名・パスワードの誤り)
  2. 接続時のネットワーク障害(MySQL サーバーが一時的にダウンしていた)
  3. コネクションリーク(適切に接続を閉じていないため、接続エラーが多発)
  4. MySQL の max_connect_errors 設定が小さすぎる

解決策

1. mysqladmin flush-hosts コマンドを実行する

ブロックを解除するには、MySQL サーバーで以下のコマンドを実行します。

mysqladmin flush-hosts -u root -p

このコマンドは、MySQL の host_cache をクリアし、ブロックされた IP を解除します。

2. max_connect_errors の値を増やす

max_connect_errors の値を増やすことで、誤って IP がブロックされるのを防ぐことができます。

MySQL にログインして、以下の SQL を実行してください。

SET GLOBAL max_connect_errors = 1000;

これで、1000 回のエラーが発生するまでは IP がブロックされません。

3. コードの接続処理を見直す

エラーが頻発する原因がアプリケーション側にある場合は、以下の点をチェックしましょう。

  • 適切に接続を閉じているか? connection = pymysql.connect(host='your_host', user='your_user', password='your_password', database='your_db') try: with connection.cursor() as cursor: cursor.execute("SELECT * FROM your_table") result = cursor.fetchall() print(result) finally: connection.close() # ここで必ず接続を閉じる
  • コネクションプールを利用する
    • pymysql の代わりに SQLAlchemyconnection pooling を使うと、接続を適切に管理できる。

4. MySQL サーバーのログを確認する

MySQL のエラーログを確認することで、具体的にどのエラーが頻発しているのかを調査できます。

cat /var/log/mysql/error.log

再発防止策

  1. 接続時のエラーハンドリングを強化する import pymysql try: connection = pymysql.connect(...) except pymysql.MySQLError as e: print(f"Error connecting to MySQL: {e}")
  2. 接続管理を適切に行う(使い終わったら connection.close() を忘れずに)
  3. サーバー側で max_connect_errors を適切に設定する
  4. MySQL のパフォーマンス監視を行う(過剰な接続エラーが発生していないかを定期的に確認する)

まとめ

  • エラー 1129 は、特定の IP からの接続エラーが多発した場合に発生する
  • mysqladmin flush-hosts コマンドでブロックを解除可能
  • 根本原因を調査し、適切な接続管理と設定変更を行うことで再発防止が可能

MySQL のエラーはシステムの安定性に大きく関わるため、エラーメッセージをしっかり読み解き、適切に対応しましょう!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です