Belirli bir kullanıcı adı ile tüm istemcilerin MySQL'den bağlantısını kesmek için etkili bir yola ihtiyacım var. Kullanıcıların şifresini değiştirmeyi düşündüm, ancak bunun sadece bağlantı yapıldığında kontrol edildiğini düşünüyorum.
Fikirler?
Belirli bir kullanıcı adı ile tüm istemcilerin MySQL'den bağlantısını kesmek için etkili bir yola ihtiyacım var. Kullanıcıların şifresini değiştirmeyi düşündüm, ancak bunun sadece bağlantı yapıldığında kontrol edildiğini düşünüyorum.
Fikirler?
Yanıtlar:
Aşağıdaki "SQL'den SQL'e" yöntemini kullanabilirsiniz (gerektiğinde mysql istemcisine ekstra bağlantı seçenekleri iletin):
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';" | mysql -vv
Not: Bu MySQL 5.1 ve 5.5 ile çalışır. Information_schema işlem listesi tablosuna sahip olmadığından, bu işlem daha eski MySQL sürümleri için farklı şekilde uygulanmalıdır.
Kullanılan seçenekler:
-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.
Nasıl çalıştığının açıklaması:
Önce KILL ifadeleri kimliklerle birlikte oluşturulur.
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';"
Örnek çıktı:
KILL 1061;
KILL 1059;
KILL 1057;
Sonra bu ifadeler yürütülür.
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';" | mysql -vv
Örnek çıktı:
--------------
KILL 1061
--------------
Query OK, 0 rows affected
--------------
KILL 1059
--------------
Query OK, 0 rows affected
--------------
KILL 1057
--------------
Query OK, 0 rows affected
Linux'ta böyle bir şey kullanabilirsiniz.
Benim yaklaşımım çok basit. İlk adımda veritabanımıza 'işlem listesini göster' gönderiyoruz. Sonuç, tüm bağlı kullanıcıların bulunduğu bir listedir. Bir sonraki adımda, kullanıcı adlarını filtrelemek için eski eski grep komutunu kullanacağız. Awk ile 'kill komutu' üretiriz. Son adımda tüm kill komutlarını mysql'e gönderiyoruz. Her şey | ile birleştirilmelidir. sembolü.
mysql -uroot -e 'show processlist' | grep username | awk {'print "kill "$1";"'}| mysql -uroot