ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
エラー内容
ERROR 1129 (HY000): Host '192.168.1.10' is blocked because of many
connection errors; unblock with 'mysqladmin flush-hosts'
MySQL は同一クライアントホストからの接続失敗(プロトコルエラー、ハンドシェイクタイムアウト、認証失敗)が max_connect_errors 回続くと、そのホストをホストキャッシュ上でブロックします。以降そのホストからは認証画面に到達する前に 1129 エラーで弾かれます。
即時解除
方法 A: mysqladmin から
# 別のホスト(許可済み)または localhost から
mysqladmin -u root -p flush-hosts
方法 B: SQL で
-- MySQL 5.7
FLUSH HOSTS;
-- MySQL 8.0.23 以降は FLUSH HOSTS が非推奨
TRUNCATE TABLE performance_schema.host_cache;
-- どちらも RELOAD(FLUSH HOSTS)または SYSTEM_VARIABLES_ADMIN 権限が必要
ホストキャッシュを確認する
MySQL 5.7+ は performance_schema.host_cache でブロック理由を SQL で確認できます:
SELECT IP, HOST, HOST_VALIDATED, COUNT_HANDSHAKE_ERRORS,
COUNT_AUTHENTICATION_ERRORS, COUNT_LOCAL_ERRORS,
SUM_CONNECT_ERRORS
FROM performance_schema.host_cache;
-- COUNT_HANDSHAKE_ERRORS: プロトコル不一致(古いクライアント等)
-- COUNT_AUTHENTICATION_ERRORS: 認証失敗
-- COUNT_LOCAL_ERRORS: サーバ内部エラー
-- SUM_CONNECT_ERRORS: max_connect_errors と比較されるカウンタ
max_connect_errors を上げる
既定値の 100 はリトライ多めの本番アプリでは小さすぎます:
-- 現在値確認
SHOW VARIABLES LIKE 'max_connect_errors';
-- 動的変更(再起動まで有効)
SET GLOBAL max_connect_errors = 10000;
恒久化するなら my.cnf に追記:
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
max_connect_errors = 10000
# DNS 逆引きを完全に無効化(後述)
skip-name-resolve
# ハンドシェイクのタイムアウト緩和
connect_timeout = 10
根本原因の調査
| 典型原因 | 確認 | 対処 |
|---|---|---|
| アプリのリトライ暴走 | アプリログで再接続ループ | 指数バックオフ実装、接続プール使用 |
| DNS 逆引きタイムアウト | host_cache の COUNT_HOST_BLOCKED_ERRORS | skip-name-resolve |
| FW / SG でタイムアウト | TCP 接続自体が timeout | セキュリティグループ・iptables 確認 |
| ロードバランサのヘルスチェック | 定期的に接続失敗 | ヘルスチェックを TCP のみ or 専用ユーザー |
| クライアントが古すぎる | HANDSHAKE_ERRORS 多い | クライアントライブラリ更新 |
DNS 逆引きを無効化(skip-name-resolve)
MySQL は接続元 IP を逆引きしてホスト名を取得しようとします。逆引きが遅い / 失敗するとハンドシェイクタイムアウトでカウントされます。
# my.cnf
[mysqld]
skip-name-resolve
注意: skip-name-resolve を有効化すると、'user'@'hostname' 形式の権限は機能しなくなります。IP で再定義が必要:
-- 旧(ホスト名)
DROP USER 'app'@'app-server.example.com';
-- 新(IP / ワイルドカード)
CREATE USER 'app'@'10.0.1.%' IDENTIFIED BY 'secret';
GRANT ALL ON myapp.* TO 'app'@'10.0.1.%';
FLUSH PRIVILEGES;
クラウド DB(RDS / Aurora)でブロックされた場合
マネージド DB は root に直接 SSH できないため、別経路で SQL を流す:
- 同 VPC 内の許可済みインスタンスから接続できれば
FLUSH HOSTS;を実行 - RDS パラメータグループで
max_connect_errorsを大きく - どうしても接続できない場合はインスタンスの再起動(host_cache は揮発)
アプリ側の予防策
<?php
// ❌ NG: 無限リトライ
while (true) {
try {
$pdo = new PDO("mysql:host=db;dbname=app", $user, $pass);
break;
} catch (PDOException $e) {
// 即座に再接続 → max_connect_errors を一瞬で食いつぶす
}
}
// ✅ OK: 指数バックオフ + 上限
$maxRetries = 5;
for ($i = 0; $i < $maxRetries; $i++) {
try {
$pdo = new PDO("mysql:host=db;dbname=app", $user, $pass);
break;
} catch (PDOException $e) {
if ($i === $maxRetries - 1) throw $e;
sleep(2 ** $i); // 1, 2, 4, 8, 16 秒
}
}
関連する設定変数
| 変数 | 既定値 | 役割 |
|---|---|---|
max_connect_errors | 100 | ブロック閾値 |
connect_timeout | 10 | ハンドシェイク待ち秒 |
max_connections | 151 | 同時接続上限 |
host_cache_size | auto | ホストキャッシュ容量 |
skip_name_resolve | OFF | DNS 逆引き無効化 |
FAQ
Q: 自分の IP がブロックされたら自分自身では解除できない?
A: そのとおりです。localhost や別ホストから FLUSH HOSTS を実行する必要があります。サーバへの SSH があれば mysql -u root -p でローカル接続して実行。
Q: 再起動でブロックは消える?
A: ホストキャッシュは揮発なので消えます。ただし根本原因(リトライ暴走など)を直さないとすぐ再発します。
Q: max_connect_errors を 0 にしたら無制限?
A: 動作の正確性のため非常に大きい値(例: 4294967295)を設定してください。0 は意味が異なります。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- 1071 Specified key was too long; max key length is 767 bytes
- ERROR 1063 (42000): Incorrect column specifier for column '~'
- mysqld: Can't change dir to '...\MySQL\MySQL Server X.X\data\' (OS errno 2 - No such file or directory)
- Install/Remove of the Service Denied!
- Datetime 型が NULL に見える
- Warning: World-writable config file '/etc/mysql/my.cnf' is ignored
- ERROR 1698 (28000): Access denied for user 'root'@'localhost'
- Exception: Wrong MySQL configuration
- [Warning] TIMESTAMP with implicit DEFAULT value is deprecated.
- ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
- ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
- Incorrect column specifier for column 'カラム名'
- BLOB/TEXT column 'description' used in key specification without a key length
- ERROR: /bin/sh: mysql_config: コマンドが見つかりません
- Host '...' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
- CSVエクスポート時に「ERROR 1045 (28000): Access denied for user 'username'@'localhost'」エラーが表示される
- Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT
- 1
- 1
- SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value: ~
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- gRPCとは|仕組み・4つの通信方式・RESTとの違い 2026-06-12 15:50:39
- C++のcoutの使い方|コンソール出力と挿入演算子・書式指定 2026-06-12 15:50:19
- Google Search Consoleとは|主な機能と使い方・導入手順 2026-06-12 15:50:18
- MySQLのSTR_TO_DATEでnullが返る原因と対処|書式指定子の不一致 2026-06-12 15:50:18
- Pythonで実行時のパスを取得する方法|__file__・os.getcwd・pathlib 2026-06-12 15:50:18
- EC-CUBE3のディレクトリ構成と主要ファイル|本体・公開・設定の役割 2026-06-12 15:50:17
- pandasとは|PythonでDataFrameを使うデータ分析の基本 2026-06-12 15:50:17
- Linuxのheadコマンドの使い方|ファイル先頭の表示と行数・バイト指定 2026-06-12 15:50:17
- C/C++のprintfの使い方|書式指定子と幅・精度の指定 2026-06-12 15:50:16
- ラズベリーパイ(Raspberry Pi)とは|特徴・用途・始め方 2026-06-12 15:50:16
- C++の文法まとめ|変数・データ型・制御構文・配列・関数の基本 2026-06-12 15:50:15
- macOSでApacheを起動・停止・再起動する方法|apachectlとbrew services 2026-06-12 15:50:15
- Pythonで辞書(dict)の中身を確認する方法|keys・values・itemsの使い方 2026-06-12 15:50:15
- UE5のビルドとは|ライティング等の事前計算とパッケージ化の違い 2026-06-12 15:50:14
- UE5でHighResShotの保存画像のファイル名を取得する方法 2026-06-12 15:50:14
コメントを削除してもよろしいでしょうか?