ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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
- 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アノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?