주어진 사용자 이름으로 모든 클라이언트를 MySQL에서 연결 해제하는 효율적인 방법이 필요합니다. 사용자 비밀번호 변경에 대해 생각했지만 연결시에만 확인됩니다.
아이디어?
주어진 사용자 이름으로 모든 클라이언트를 MySQL에서 연결 해제하는 효율적인 방법이 필요합니다. 사용자 비밀번호 변경에 대해 생각했지만 연결시에만 확인됩니다.
아이디어?
답변:
아래의 "SQL to SQL"방법을 사용할 수 있습니다 (필요에 따라 추가 연결 옵션을 mysql 클라이언트에 전달하기 만하면 됨).
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';" | mysql -vv
참고 : 이것은 MySQL 5.1 및 5.5에서 작동합니다. information_schema에 processlist 테이블이 없으므로 이전 MySQL 버전에서는 다르게 구현해야합니다.
사용 된 옵션 :
-N means that you do not want to get column names back.
-B puts it into batch mode, so that you do not get MySQL's table layout.
-e executes the following statement.
-v controls the verbosity, could be used up to three times.
작동 방식에 대한 설명 :
먼저 KILL 문이 ID와 함께 생성됩니다.
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';"
샘플 출력 :
KILL 1061;
KILL 1059;
KILL 1057;
그런 다음 해당 명령문이 실행됩니다.
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';" | mysql -vv
샘플 출력 :
--------------
KILL 1061
--------------
Query OK, 0 rows affected
--------------
KILL 1059
--------------
Query OK, 0 rows affected
--------------
KILL 1057
--------------
Query OK, 0 rows affected
리눅스에서는 그런 것을 사용할 수 있습니다.
내 접근 방식은 매우 간단합니다. 첫 번째 단계에서 'show processlist'를 데이터베이스로 보냅니다. 결과는 모든 연결된 사용자가있는 목록입니다. 다음 단계에서는 good grep 명령을 사용하여 사용자 이름을 필터링합니다. awk로 'kill command'를 생성합니다. 마지막 단계에서 모든 kill 명령을 mysql에 보냅니다. 모든 것은 | 상징.
mysql -uroot -e 'show processlist' | grep username | awk {'print "kill "$1";"'}| mysql -uroot