Mysql사용시 remote host에서 mysql로 원격 접근시 아래와 같은 메시지가 출력 되면서 정상적으로 접근이 되지 않았다.
Error
ERROR 1129 (HY000): Host 'xxx.xxx.xxx.xxx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
Colsole상에서는 위와 같이 나오지만 java 로그상에서는아래와 같이 나오는 것 같다.
mysql 에러코드:1129 blocked because of many connection erros
내용은 조금 다를수 있지만 그래도 비슷한 맥락이 있다. Error code 1129 와 Block이 되었다는 점....
일단 위 증상은 아래와 같다.
- Remote 서버에서 Mysql DB로 단순 커넥션 한 뒤 Close를 하게 되면 Mysql은 비정상적인 접속으로 판단하고
Remote서버의 IP를 블럭킹하게 된다.
이때 Mysql에서는 비정상적인 접속에 대한 요청수를 카운트 하며 설정된 max_connect_error 값에 의해 차단된다.
기본적으로 max_connect_error 값은 10이며 필요에 따라 변경하여 사용하면 된다.
기본값 확인은 아래와 같이 할 수 있다.
mysql [(none)] > select@@global.max_connect_errors;
+-----------------------------+
| @@global.max_connect_errors |
+-----------------------------+
| 10 |
+-----------------------------+
1 row in set (0.00 sec)
mysql [(none)] > select@@global.max_connections;
+--------------------------+
| @@global.max_connections |
+--------------------------+
| 1024 |
+--------------------------+
1 row in set (0.00 sec)
블럭킹이 되었을 경우 접속이 불가 하니 Mysql 서버로 접속하여 아래 명령어를 실행하여 Error count를 초기화 한다.
mysql [(none)] > flush hosts;
Query OK, 0 rows affected (0.00 sec)
또는 mysqladmin 명령어를 이용하여도 사용할 수 있다.
sh-4.2# /usr/local/mysql/bin/mysqladmin -uroot -p flush-hosts
Enter password:
sh-4.2#
max_connections와 max_connect_errors의 값을 실시간 반영은 아래와 같이 한다.
<max_connections 설정 확인 및 변경>
mysql [(none)] > select@@global.max_connections;
+--------------------------+
| @@global.max_connections |
+--------------------------+
| 1024 |
+--------------------------+
1 row in set (0.00 sec)
mysql [(none)] > set global max_connections=2048;
Query OK, 0 rows affected (0.00 sec)
mysql [(none)] > select@@global.max_connections;
+--------------------------+
| @@global.max_connections |
+--------------------------+
| 2048 |
+--------------------------+
1 row in set (0.00 sec)
< max_connect_errors 설정 확인 및 변경>
mysql [(none)] > select@@global.max_connect_errors;
+-----------------------------+
| @@global.max_connect_errors |
+-----------------------------+
| 10 |
+-----------------------------+
1 row in set (0.00 sec)
mysql [(none)] > set global max_connect_errors=1000;
Query OK, 0 rows affected (0.00 sec)
mysql [(none)] > select@@global.max_connect_errors;
+-----------------------------+
| @@global.max_connect_errors |
+-----------------------------+
| 1000 |
+-----------------------------+
1 row in set (0.00 sec)
mysql [(none)] >
실시간 반영이기에 별도로 mysql은 재기동하지 않아도 된다.
영구 반영이 아니기에 my.cnf에도 등록하고 mysql를 재기동 해줘야만 한다.
# vi /etc/my.cnf
[mysqld]
~(생략)
max_connections = 300
max_connect_error = 1000
'DB > Mysql' 카테고리의 다른 글
[Database] AWS RDS mysql dump시...warning.. (0) | 2023.11.02 |
---|---|
[Mysql/MariaDB] "mysql: [Warning] Using a password on the command line interface can be insecure." 발생 시 (0) | 2020.09.11 |
[Mysql/MariaDb ] innodb frm파일에서 table schema 복구 (0) | 2020.07.23 |
[MariaDB] audit log 설정 (0) | 2020.01.30 |
[DATABASE] MariaDB 10.3.xx Install - 바이너리 설치 (0) | 2020.01.29 |