我有一個MySQL數據庫可以被一羣隊友訪問。是否有任何命令來獲取當前正在訪問或已經訪問和註銷的用戶的日誌信息?訪問數據庫的用戶列表
回答
運行從一個MySQL工具下面查看所有正在運行的程序(包括睡眠連接):
SHOW PROCESSLIST
或者,您可以查詢INFORMATION_SCHEMA表以獲得相同的:
select * from information_schema.processlist
要查看所有人已登錄的歷史記錄,可以將常規查詢日誌配置爲轉到表中,方法是將以下啓動參數添加到您的mysqld啓動「--log-output = TABLE --general-log」,然後你可以從general_log ta中查詢這些信息在mysql模式中。以下是查詢,你可以使用:
select * from mysql.general_log where command_type = 'Connect';
提醒一句的是,這個表可以得到巨大。你會想定期清理它。
通過查看SHOW PROCESSLIST或INFORMATION_SCHEMA.PROCESSLIST,可以獲得當前與數據庫保持連接的用戶。
該數據的歷史記錄是不存在的。使用其他地方建議的通用查詢日誌不是一個好主意,因爲它根本沒有擴展:一般查詢日誌記錄了服務器看到的每一條語句,並且它的寫入大大增加了LOCK_log和磁盤I/O.如果您的通用查詢日誌是CSV表,則無法有效查詢它,如果它是MyISAM表,它將基本上序列化數據庫中的所有查詢(即使是查詢!)。
也就是說,因爲每個查詢都需要被記錄,甚至讀取查詢。爲此,需要寫入一般查詢日誌。爲此,請求MyISAM日誌表上的表鎖。這是非常緩慢的,即使在低負載的服務器上也不會提供任何建議。
不支持通用查詢日誌的其他格式。
有一組變量可以定義服務器啓動,從屬連接和用戶連接的動作。
[email protected] [kris]> show global variables like 'init%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| init_connect | |
| init_file | |
| init_slave | |
+---------------+-------+
3 rows in set (0.00 sec)
通過init_connect設置到註銷當前用戶,當前時間,你可以生成你想要在日誌中更可擴展的方式連接ID的INSERT語句。使用帶有auto_increment id的InnoDB表格。
請注意,出於安全原因,init_connect未針對root用戶(SUPER_PRIV)的登錄進行處理。這些將會逃避你的記錄。
在MySQL 5.5中,Audit API已添加到服務器。我相信你真正想要的是一個審計插件。詳情請參閱http://dev.mysql.com/doc/refman/5.5/en/writing-audit-plugins.html。
- 1. 獲取用戶有權訪問的數據庫列表
- 2. 查找用戶帳戶訪問數據庫中的表格
- 3. 列出用戶有權訪問的多個數據庫的數據庫名稱
- 4. 用戶無權訪問AnalysisServices數據庫
- 5. 如何用C#獲得訪問MDB數據庫表的列表
- 6. 使用客戶端訪問數據庫或服務器來訪問數據庫
- 7. goDaddy網站拒絕訪問數據庫用戶的訪問
- 8. 訪問無法訪問數據庫的用戶界面
- 9. 單擊列表訪問數據表單數據庫查看
- 10. 訪問用戶的數據
- 11. 多個用戶訪問相同的數據庫表
- 12. 名單表,訪問類型的特定數據庫用戶
- 13. 用戶無法訪問SQL Server中的用戶數據庫。只能訪問系統數據庫
- 14. 如何獲取數據庫列表和有權訪問MySQL的用戶
- 15. 無法訪問數據庫,拒絕用戶訪問
- 16. 實施訪問控制列表vs使用數據庫角色和用戶
- 17. 訪問數據庫使用兩個表
- 18. 從另一個數據庫訪問用戶定義表類型
- 19. php數據庫表訪問管理員和用戶
- 20. 多個用戶訪問數據庫錶行預防
- 21. 訪問數據庫中的列Eloquent Laravel4
- 22. 訪問控制列表來管理提取的數據庫列
- 23. 訪問客戶端WebSQL數據庫
- 24. 訪問用戶數據
- 25. 使用訪問數據庫
- 26. Laravel 4 - 用戶只能在多用戶數據庫中訪問他的數據
- 27. 訪問數據庫的登錄表單
- 28. 數據庫數據訪問
- 29. 訪問拒絕用戶'用戶名'到數據庫'dbname'
- 30. 訪問被拒絕用戶'用戶'@'%'到數據庫'db'
這隻會顯示當前正在運行的查詢 - 而不是以前誰訪問過數據庫。 – 2011-04-07 02:44:17
啊。我錯過了。沒有辦法看到真正註銷的用戶,只能看到當前登錄的用戶(即使他們沒有運行查詢,他們仍會打開連接)。如果您想跟蹤所有人已經登錄,您可能需要創建一個cron作業,將該信息定期捕獲到表中,然後您可以查詢該表。 – squawknull 2011-04-07 02:46:41
您也可以使用常規查詢日誌 - http://dev.mysql.com/doc/refman/5.1/en/query-log.html。您可以將其配置爲登錄到可以直接查詢的表格。 – squawknull 2011-04-07 02:48:16