mysql數據庫審計日誌windows,審計工作日誌

本文目錄一覽:

如何實現MySQL數據庫使用情況的審計

mysql的審計功能

mysql服務器自身沒有提供審計功能,但是我們可以使用init-connect + binlog的方法進行mysql的操作審計。由於mysql binlog記錄了所有對數據庫長生實際修改的sql語句,及其執行時間,和connection_id但是卻沒有記錄connection_id對應的詳細用戶信息。在後期審計進行行為追蹤時,根據binlog記錄的行為及對應的connection-id 結合 之前連接日誌記錄 進行分析,得出最後的結論。

1. 設置init-connect

1.1 創建用於存放連接日誌的數據庫和表

create database accesslog;

CREATE TABLE accesslog.accesslog (`id` int(11) primary key auto_increment, `time` timestamp, `localname` varchar(30), `matchname` varchar(30))

1.2 創建用戶權限

可用現成的root用戶用於信息的讀取

grant select on accesslog.* to root;

如果存在具有to *.* 權限的用戶需要進行限制。

這裡還需要注意用戶必須對accesslog表具有insert權限

grant select on accesslog.* to user@’%’;

1.3 設置init-connect

在[mysqld]下添加以下設置:

init-connect=’insertinto accesslog.accesslog(id, time, localname, matchname)

values(connection_id(),now(),user(),current_user());’

——注意user()和current_user()的區別

log-bin=xxx

這裡必須開啟binlog

1.4 重啟數據庫生效

shell /etc/init.d/mysql restart

2. 記錄追蹤

2.1 thread_id確認

可以用以下語句定位語句執行人

Tencent:~ # mysqlbinlog –start-datetime=’2011-01-26 16:00:00′

–stop-datetime=’2011-01-26 17:00:00′ /var/lib/mysql/mysql-bin.000010

| grep -B 5 ‘wsj’

COMMIT/*!*/;

# at 767

#110126 16:16:43 server id 1 end_log_pos 872 Query thread_id=19 exec_time=0 error_code=0

use test/*!*/;

SET TIMESTAMP=1296029803/*!*/;

create table wsj(id int unsigned not null)

BEGIN

/*!*/;

# at 940

#110126 16:16:57 server id 1 end_log_pos 1033 Query thread_id=19 exec_time=0 error_code=0

SET TIMESTAMP=1296029817/*!*/;

insert into wsj(id) values (1)

BEGIN

/*!*/;

# at 1128

#110126 16:16:58 server id 1 end_log_pos 1221 Query thread_id=19 exec_time=0 error_code=0

SET TIMESTAMP=1296029818/*!*/;

insert into wsj(id) values (2)

2.2 用戶確認

thread_id 確認以後,找到元兇就只是一條sql語句的問題了。

mysql select * from accesslog where id=19;

+—-+———————+———————+———–+

| id | time | localname | matchname |

+—-+———————+———————+———–+

| 19 | 2011-01-26 16:15:54 | test@10.163.164.216 | test@% |

+—-+———————+———————+———–+

1 row in set (0.00 sec)

3. Q

Q:使用init-connect會影響服務器性能嗎?

A:理論上,只會在用戶每次連接時往數據庫里插入一條記錄,不會對數據庫產生很大影響。除非連接頻率非常高(當然,這個時候需要注意的就是如何進行連接復用和控制,而非是不是要用這種方法的問題了)—如果採用長連接並且緩存的話,可以提高性能

Q:access-log表如何維護?

A: 由於是一個log系統,推薦使用archive存儲引擎,有利於數據厄壓縮存放。如果數據庫連接數量很大的話,建議一定時間做一次數據導出,然後清表。

Q:表有其他用途么?

A:有!access-log表當然不只用於審計,當然也可以用於對於數據庫連接的情況進行數據分析,例如每日連接數分布圖等等,只有想不到沒有做不到。—可以用來測試讀寫分離,驗證負載均衡等

Q:會有遺漏的記錄嗎?

A:會的,init-connect 是不會在super用戶登錄時執行的。所以access-log里不會有數據庫超級用戶的記錄,這也是為什麼我們不主張多個超級用戶,並且多人使用的原因。–這種審計不會記錄root等具有super權限的賬號對數據庫的訪問

如何查看mysql數據庫操作記錄日誌?

有時候我們會不小心對一個大表進行了 update,比如說寫錯了 where 條件……

此時,如果 kill 掉 update 線程,那回滾 undo log 需要不少時間。如果放置不管,也不知道 update 會持續多久。

那我們能知道 update 的進度么?

實驗

我們先創建一個測試數據庫:

快速創建一些數據:

連續執行同樣的 SQL 數次,就可以快速構造千萬級別的數據:

查看一下總的行數:

我們來釋放一個大的 update:

然後另起一個 session,觀察 performance_schema 中的信息:

可以看到,performance_schema 會列出當前 SQL 從引擎獲取的行數。

等 SQL 結束後,我們看一下 update 從引擎總共獲取了多少行:

可以看到該 update 從引擎總共獲取的行數是表大小的兩倍,那我們可以估算:update 的進度 = (rows_examined) / (2 * 錶行數)

?小貼士

information_schema.tables 中,提供了對錶行數的估算,比起使用 select count(1) 的成本低很多,幾乎可以忽略不計。

那麼是不是所有的 update,從引擎中獲取的行數都會是表大小的兩倍呢?這個還是要分情況討論的,上面的 SQL 更新了主鍵,如果只更新內容而不更新主鍵呢?我們來試驗一下:

等待 update 結束,查看 row_examined,發現其剛好是表大小:

那我們怎麼準確的這個倍數呢?

一種方法是靠經驗:update 語句的 where 中會掃描多少行,是否修改主鍵,是否修改唯一鍵,以這些條件來估算係數。

另一種方法就是在同樣結構的較小的表上試驗一下,獲取倍數。

這樣,我們就能準確估算一個大型 update 的進度了。

如何開啟windows mysql日誌與查詢功能

開啟mysql慢查詢日誌查看配置:

//查看慢查詢時間

show

variables

like

“long_query_time”;默認10s

//查看慢查詢配置情況

show

status

like

“%slow_queries%”;

//查看慢查詢日誌路徑

show

variables

like

“%slow%”;

修改配置文件

在my.ini中加上下面兩句話

log-slow-queries

=

d:\wamp\mysql_slow_query.log

long_query_time=5

第一句使用來定義慢查詢日誌的路徑(因為是windows,所以不牽涉權限問題)

第二句使用來定義查過多少秒的查詢算是慢查詢,我這裡定義的是5秒

第二步:查看關於慢查詢的狀態

執行如下sql語句來查看mysql慢查詢的狀態

show

variables

like

‘%slow%’;

執行結果會把是否開啟慢查詢、慢查詢的秒數、慢查詢日誌等信息打印在屏幕上。

第三步:執行一次慢查詢操作

其實想要執行一次有實際意義的慢查詢比較困難,因為在自己測試的時候,就算查詢有20萬條數據的海量表,也只需要0.幾秒。我們可以通過如下語句代替:

select

sleep(10);

第四步:查看慢查詢的數量

通過如下sql語句,來查看一共執行過幾次慢查詢:

show

global

status

like

‘%slow%’;

mysql日誌的配置:

注意:這些日文件在mysql重啟的時候才會生成

#記錄所有sql語句

log=e:/mysqllog/mysql.log

#記錄數據庫啟動關閉信息,以及運行過程中產生的錯誤信息

log-error=e:/mysqllog/myerror.log

#

記錄除select語句之外的所有sql語句到日誌中,可以用來恢複數據文件

log-bin=e:/mysqllog/bin

#記錄查詢慢的sql語句

log-slow-queries=e:/mysqllog/slow.log

#慢查詢時間

long_query_time=0.5

如何查看mysql數據庫操作記錄日誌

是否啟用了日誌

1

mysqlshow variables like ‘log_bin’;

怎樣知道當前的日誌

1

mysql show master status;

看二進制日誌文件用mysqlbinlog

shellmysqlbinlog mail-bin.000001(要寫絕對問題路徑d://)

或者

shellmysqlbinlog mail-bin.000001 | tail

Windows 下用類似的命令。

mysql有以下幾種日誌:

錯誤日誌: -log-err

查詢日誌: -log

慢查詢日誌: -log-slow-queries

更新日誌: -log-update

二進制日誌:-log-bin在mysql的安裝目錄下,打開my.ini,在後面加上上面的參數,保存後重啟mysql服務就行了。

windowos環境下mysql數據庫日誌文件在哪

可通過以下語句查看日誌存放路徑:

show variables like ‘general_log_file’;結果:

其中,如圖所示紅框部分即為mysql日誌文件的存放路徑及文件名。

原創文章,作者:BVXK,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/141121.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
BVXK的頭像BVXK
上一篇 2024-10-04 00:24
下一篇 2024-10-04 00:24

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • Cron執行日誌用法介紹

    本文將從多個方面對cron執行日誌進行詳細闡述,包括cron執行日誌的定義、cron執行日誌的產生原因、cron執行日誌的格式以及如何解讀cron執行日誌。 一、定義 Cron是一…

    編程 2025-04-29
  • Hibernate日誌打印sql參數

    本文將從多個方面介紹如何在Hibernate中打印SQL參數。Hibernate作為一種ORM框架,可以通過打印SQL參數方便開發者調試和優化Hibernate應用。 一、通過配置…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • 使用Snare服務收集日誌:完整教程

    本教程將介紹如何使用Snare服務收集Windows服務器上的日誌,並將其發送到遠程服務器進行集中管理。 一、安裝和配置Snare 1、下載Snare安裝程序並安裝。 https:…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的數據庫存儲引擎

    本文將介紹兩款高性能的數據庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28

發表回復

登錄後才能評論