MySQL에서 클라이언트를 어떻게 분리 할 수 ​​있습니까?


9

주어진 사용자 이름으로 모든 클라이언트를 MySQL에서 연결 해제하는 효율적인 방법이 필요합니다. 사용자 비밀번호 변경에 대해 생각했지만 연결시에만 확인됩니다.

아이디어?

답변:


7

아래의 "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

이것은 MySQL 5.5의 경우 훨씬 더 직접적입니다. +1 !!!
RolandoMySQLDBA

1

리눅스에서는 그런 것을 사용할 수 있습니다.

내 접근 방식은 매우 간단합니다. 첫 번째 단계에서 'show processlist'를 데이터베이스로 보냅니다. 결과는 모든 연결된 사용자가있는 목록입니다. 다음 단계에서는 good grep 명령을 사용하여 사용자 이름을 필터링합니다. awk로 'kill command'를 생성합니다. 마지막 단계에서 모든 kill 명령을 mysql에 보냅니다. 모든 것은 | 상징.

mysql -uroot -e 'show processlist' | grep username | awk {'print "kill "$1";"'}| mysql -uroot

이 코드에 대한 간단한 설명을 추가하는 것이 좋습니다.
RLF December
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.