ฉันต้องการวิธีที่มีประสิทธิภาพในการยกเลิกการเชื่อมต่อลูกค้าทั้งหมดด้วยชื่อผู้ใช้ที่ได้รับจาก 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 สิ่งนี้จะต้องดำเนินการแตกต่างกันไปสำหรับ 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
บน linux คุณสามารถใช้สิ่งนี้
วิธีการของฉันง่ายมาก ในขั้นตอนแรกเราจะส่ง 'แสดงรายการกระบวนการ' ไปยังฐานข้อมูลของเรา ผลลัพธ์คือรายการที่มีผู้ใช้ที่เชื่อมต่อทั้งหมด ในขั้นตอนต่อไปเราใช้คำสั่ง grep แบบเก่าที่ดีในการกรองชื่อผู้ใช้ ด้วย awk เราสร้าง 'คำสั่ง kill' ในขั้นตอนสุดท้ายเราส่งคำสั่ง kill ทั้งหมดไปที่ mysql ทุกอย่างจะต้องมีการต่อกันกับ | สัญลักษณ์.
mysql -uroot -e 'show processlist' | grep username | awk {'print "kill "$1";"'}| mysql -uroot