ฉันจะตัดการเชื่อมต่อไคลเอ็นต์จาก 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 สิ่งนี้จะต้องดำเนินการแตกต่างกันไปสำหรับ MySQL รุ่นเก่าเนื่องจาก information_schema ไม่มีตารางรายการกระบวนการ

ตัวเลือกที่ใช้:

-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

บน linux คุณสามารถใช้สิ่งนี้

วิธีการของฉันง่ายมาก ในขั้นตอนแรกเราจะส่ง 'แสดงรายการกระบวนการ' ไปยังฐานข้อมูลของเรา ผลลัพธ์คือรายการที่มีผู้ใช้ที่เชื่อมต่อทั้งหมด ในขั้นตอนต่อไปเราใช้คำสั่ง grep แบบเก่าที่ดีในการกรองชื่อผู้ใช้ ด้วย awk เราสร้าง 'คำสั่ง kill' ในขั้นตอนสุดท้ายเราส่งคำสั่ง kill ทั้งหมดไปที่ mysql ทุกอย่างจะต้องมีการต่อกันกับ | สัญลักษณ์.

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

มันเป็นการดีที่จะเพิ่มคำอธิบายสั้น ๆ สำหรับรหัสนี้
RLF
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.