Temat: [MySQL] - aktywność użytkowników db
Sebastian Zaborowski:
Czy istnieje możliwość sprawdzenia aktywności tych użytkowników? Chodzi tylko o to jak często się łącza, ewentualnie kiedy było ostatnie połączenie z bazą danego użytkownika.
Napewno jest kilka możliwości, choć żadna nie jest natywną samej bazy.
1. Utworzenie procedury rejestrującej logowanie do bazy do jednej tabeli i umieszczenie wywołania w init-connect. Tabela prosta, coś typu:
CREATE TABLE user_login_audit (
user varchar(64) NOT NULL,
login_time timestamp NOT NULL,
INDEX (user, login_time)
) ENGINE=InnoDB DEFAULT
Jednak w przypadku dużej liczby połączeń na sekundę trochę kosztowne, przy stosunkowo już niedużej odpada możliwość wykorzystania tabeli MyISAM z uwagi na powstającą serializację.
2. Jak już ktoś wspomniał - slow log lub general log.
3. Podsłuchanie tcpdumpem ruchu i wyłuskanie nazw użytkowników?
4. Wykorzystanie userstats i sprawdzenie jacy użytkownicy logowali się do bazy od czasu włączenia zbierania statystyk.
mysql> SET GLOBAL userstat_running=ON;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM INFORMATION_SCHEMA.USER_STATISTICS\G
*************************** 1. row ***************************
USER: root
TOTAL_CONNECTIONS: 1
CONCURRENT_CONNECTIONS: 0
CONNECTED_TIME: 0
...
Jeśli jakiegoś użytkownika na liście nie ma, to znaczy, że nie podłączał się do bazy. User stats nie ma w MySQL, jest dostępne jako patch od Google do własnoręcznego wkompilowania w bazę lub w Percona Server.
W każdym z tych przypadków tak naprawdę chodzi o zbieranie informacji przez jakiś czas - zwykle jeden dzień, kilka dni co najwyżej.
Maciek