關於MYSQL的輪詢與監控一點點小心得

2021-08-08 02:15:43 字數 1704 閱讀 7987

這次自己寫的時候是用c#的,之前沒接觸過,過程挺累的,基本語法都不懂。不過其它的查查資料也基本都搞定了。功能類與模組都寫出來了。

差乙個核心的功能:mysql的資料監控!

因為帝國cms用的是mysql,所以也沒太可能去換。

因為使用頻率不高,用輪詢明顯不好,間隔時間長的話實時性又不好,但間隔時間短極佔資源;

在mssql裡有乙個sqldependcy類可以呼叫 ,可以實現監控資料的變化,onchange就好!

但mysql 查了兩天資料,沒用這東西,也嘗試自己寫這個類出來,也沒成功。國外有個devart.data.mysql.dll,但要授權好像,試了一下可以用,但放到伺服器上又出問題。還是自己研究。

在csdn裡看到一般就兩種方案,1、觸發器;2、binlog;

觸發器什麼的看了看可能也要輪詢,又放棄。只好用binlog。

下面進入正題,希望對碰到同樣問題的人有點點幫助;

1、首先把mysql的binlog開啟:

在mysql的安裝目錄下開啟my.ini,

在[mysqld]下

新增一行:

log-bin=mysql-bin

重啟一下mysql的服務。

這樣,在mysql 的data目錄下就會生成日誌檔案;

2、取得當前正在使用的日誌檔案(mysql每次重啟會重新建乙個檔案)

object binlog1 = dbhelpermysql.getsingle("show master status");
//做一些資料上的處理
object binlog1 = dbhelpermysql.getsingle("show master status");

byte bt = (byte)binlog1;

binlog = system.text.utf8encoding.utf8.getstring(bt);//取得當前日誌檔名

這裡引用 的就不說了,就是進行資料庫查詢而已;

3、取得mssql的安裝目錄

object basepath1 = dbhelpermysql.getsingle("select @@basedir as basepath from dual");

basepath = (string)basepath1;//取得mysql安裝路徑

4、合併成完整檔案位址,再取得檔案大小,存入變數

basepath = basepath.replace("/", "\\") + "data\\" + binlog;

int filesize = filehelper.getfilesize(basepath);

5、開始迴圈檢測

public void dowhile(int filesize, string basepath)

"檢測到變化:" + filesize);

startran();

}

上面就是迴圈讀取日誌檔案大小,與之前取得的大小作比較,如果有差異就執行我的文件轉換函式。

執行完畢後又再一次重新讀取大小,如此如此。。。

看了看cpu使用上,基本沒有。

我是菜鳥,如果有什麼更好的方法,也請告知我一下!

關於iBatis selectKey的一點筆記

技術前提 我們使用ibatis作為持久層方案 技術場景 假設我們有兩張表,一張主表main,一張子表sub,並且主表的主鍵是由資料庫維護的自增長的主鍵,子表中有乙個字段引用這個主鍵,那麼當我們插入主表資料後,就需要馬上返回這個自增長的主鍵。解決方案 可以在insert時通過ibatis的select...

關於「收穫與失去」的一點思考

在你距離睡覺時間還有4個小時,如果這時你發現了五部時長兩個小時的電影,並且這五部電影都是你非常想看的,那麼你會怎麼辦呢?這時你會有什麼感受呢?第一種感受,你會因為今晚還能看兩部電影而感到慶幸嗎?第二種感受,你會因為今晚不能看另外三部電影而感到沮喪嗎?推測一,大多數人可能兩種感覺都不會有,他們會隨便選...

mysql的一點語法

mysql的alter table可用於增加和刪除表的結構,還有非標準的change table old column new column type的改名語法。modify的寫法就比較簡潔alter table modify column type not null 就可以改變列型別。建立帶分割槽...