讓不支援 Web API 的程式支援並使用 LINE Notify 服務
需求說明在開發某個應用的時候,使用 LINE Notify 作為通知功能,卻發現到該架構沒有使用 Web API 的函式 (Webrequest, HttpWebRequest, RestGet, …),透過執行外部程式的方式來達成目的。 LINE Notify這個服務蠻方便的,如果要作簡易的通知機器人又不想要作複雜的機器人開發,只要註冊一下就可以使用了,Google 一下有很多人都有使用經驗,是個不錯的服務。 讓不支援 Web API 的程式支援如果你的架構能支援使用外部程式,或是可以使用其他類 (如 C++ export function) 函式庫的話,以下的說明可以讓該架構可以使用 Web API。 我的架構中是沒有支援使用外部程式,但可以用 C++ 的外部函式庫,在 Windows 上面。 首先,我使用 Windows 都有的 shell32.dll。 12345678910#import "shell32.dll" int ShellExecuteW( int hWnd, ...
從 SQL Server 到 MariaDB - [11] Audit Log Parser 的實做
需求說明因為公司的稽核項目很多,所以大部分的專案都會買一些 SIEM 的設備 (Arcsight, 趨勢的平台…),有的時候很好用,但是有的時候太複雜或是很慢,所以就有自己作 Audit Log Parser 的動機。 對於 SQL Server 的 Audit Log (Trace File)有個自己作的 Parser,對於 MariaDB 應該也要有一樣的方式處理。 基本架構我的環境除了正式機以外,還有備援機 (Slave),原來是想在備援機上的 relayed binlog 來作處理,結果大失所望。那些從 master relayed 來的 binlog 完全不會有紀錄,這樣就不能從備援機正式機的 Audit Log 了。 我的 SQL Server 正式機因為怕效能損耗不會在正式機上 Parsing Trace Files,而是把資料透過網芳存到備援機,由備援機來 Parsing,那 MariaDB 可不可以這樣做呢? 答案是可以的。 在 server_audit_file_path 設定 ////remotehost//dir//audit.log 這樣就能達到遠端存資...
從 SQL Server 到 MariaDB - [10] DBA Daily Check Report 的製作 [2]
Event Status。這個取得資料的方式,除了之前提到的擴充 Event 可以得到 Event 結果以外,就是系統的 information_schema.EVENTS 可以得到相關資訊。 DB, Event Name, Last Run Time這些都能從 information_schema.EVENTS 拿 (event_schema, event_name, last_executed)。 Event 種類Event 種類有 ENABLE, DISABLE, SLAVESIDE_DISABLED (Replication 時從 Master 傳來的 Event,不會在 Slave 執行),根據實際情形作標示。 12345CASE status WHEN 'ENABLED' THEN '<div class="Healthy">Yes</div>' WHEN 'SLAVESIDE_DISABLED' THEN '<div class=&quo...
從 SQL Server 到 MariaDB - [9] DBA Daily Check Report 的製作 [1]
需求說明(這篇與下一篇是因為參加 2017 iT 邦幫幫忙鐵人賽而產生的,原來是沒有那麼快要開始作,但是因為沒稿子了就只能趕快做出來,分享給大家) 在 SQL Server 與 Oracle DB 都有一個 Daily Check Scripts 來讓我在上班開始的時候作一些自主檢查,並且產出報告,這個對於管理多台機器較為方便。 在 SQL Server 上我採用這個 Scripts, Oracle DB 的部份採用這個,十分方便,很多東西都能顯示,大部分的問題都能夠馬上發現。 到了 MariaDB 希望能夠 Porting 這個來方便管理。 接下來針對這個 Porting 來說明過程 PowerShell 基礎架構 Uptime and Version Disk Drive Status Backup Status Event Status Fail Events Status Database File Status Session List Replication Status PowerShell 基礎架構在作這個 Porting 之前,筆者先到 Google 找有沒...
從 SQL Server 到 MariaDB - [8] User-defined Functions 與擴增 Event 功能
需求說明雖然一些排程或是資訊可以透過系統排程來處理,但是原有的 SQL Server 管理方式幾乎都是透過 SQL Server Job 系統執行,加上 SQL Server 有許多可以在 Server 本體就能做完的方式,為了追求一樣的管理方式,導入 User-defined Functions (UDF) 來擴增 Server 功能。 透過 MariaDB 裡的 Event System 進行備份基本上 Google 搜尋 MariaDB/MySQL 備份,不外乎是利用 cron jobs 或是 Windows tasks 來進行備份,這樣進行備份一則與原來的 SQL Server 管理不一樣,另外一個也沒辦法知道備份的情況 (要登入主機看 Task 狀態)。 如果能透過 MariaDB 來發動備份 (透過 Event) 感覺能夠與以前的管理方式一樣,Server 要的排程 Server 自己發動,而且也能收集相關資料進行監控。 但是 MariaDB 沒有什麼介面可以來執行系統作業,這時候剛好找到 UDF,還有一大堆神人做好的 MySQLUDF Repository...
Ubuntu Kernel 的 Livepatch 機制
最近 Ubuntu 推出一個新的服務,Kernel 的 Livepatch 服務,還蠻不錯的,不用重開機就可以更新 Kernel,不過還是有些限制,整理與測試如下。 神人的詳細連結。 需要訂閱服務,免錢的有 3 個,也有付費服務(Ubuntu Advantage)。 不過我試一下超過 3 個好像也可以。 只有沒被修改的 Kernel 可以用。 被修改過的或是想要自己做 Livepatch 很複雜。 支援 x86_64,amd64。 支援 16.04 LTS 的 4.4 Kernel。 要裝 snapd,沒更新到最新就會有錯。 對象是 CVE 的 Patch,所以效能或是其他增進的還是要走老路 (update and reboot)。 首先要有個 Ubuntu SSO 帳號,登入後就可以獲得 Token 了。 不過這個畫面沒有說到用了幾個 licenses。 接下來到想要用的機器上執行指令。 可以看到現在正在用的 Kernel Patches。 如果不想用就 canonical-livepatch disable。
Trace File 挖寶記
昨天下午收到一封告警訊息,發現到是一個從來沒有在告警訊息中出現的帳號 (datareader/datawriter, dbo login),覺得很奇怪,不知道是不是又被 SQL Injection 攻擊了,於是有了這篇紀錄說明如何從 Trace File 挖寶。 這篇的結果不是那麼重要,但是怎麼從 Trace File 找到想要的資訊我覺得還蠻重要的。 基本上 TextData 應該都會有 Query 資訊,大部份都能馬上判定是什麼狀況,但是像這種沒有 TextData 的就要直接去看看 Trace File 裡頭的資訊了。 Event Class 是 118,Audit Object Derived Permission Event。 裡頭寫到重要的資訊,就是欄位編號,名稱,跟內容。 從 Log Server 拿出所要的 csv 檔,取出需要的部份 (如果原來的太大了的話)。 一些重要的欄位 欄位號碼 名稱 內容 8 HostName Name of the computer on which the client is running. This...
從 SQL Server 到 MariaDB - [7] Linked Server 與 FederatedX Storage Engine
需求說明資料庫有跨地區傳送資料的需求,在 SQL Server 用到 Linked Server 來傳送資料,希望在 MariaDB 也有類似的 Solution 可以使用。 原來的架構如下圖 採用 FederatedX Storage Engine 的原因這種同步問題應該採用 Replication 來執行的,但是因為下面的原因而不使用 在 Site B 會有一份 Site A A_DB 的副本,然後透過那個副本來傳送資料到 Site B 的 B_DB,架構如下 這樣 Site B 有一份 A_DB 的副本,蠻浪費空間的,如果把讀寫頭指向 B_DB,雖然可以多個 GTID,但是感覺很混亂,而且出問題就很難修復。 Replication 不能設定同步時間 (Site A 與 Site B 中間的連線頻寬與其他服務 share,不能一直使用),雖說可以透過網路管控讓他自己停止 Replication,但是覺得這樣不能完全控制,不太方便。 在這篇裡有網友解答可以透過 FEDERATED engine 達成 linked server 的需求,因此就來看看這是什麼。 M...
從 SQL Server 到 MariaDB - [6] Audit 的實作
需求說明在資料庫的 Audit (稽核) 部份,需要有一套如同 SQL Server 的方式來執行。 MariaDB Server Audit Plugin好在 MariaDB 有 Server Audit Plugin,相關文件在此。 開起來很簡單,設定也很容易。 MariaDB Server Audit Plugin 與 SQL Sever Trace File Audit 的比較SQL Server 的 Audit 是用 Trace File 來儲存 Audit 資料,以下用一個表格做一個比較 項目 SQL Server Trace File Audit MariaDB Server Audit Plugin 儲存方式 Binary File 自有格式 Text File (逗號隔開), syslog 取用方式 fn_trace_gettable() 取得資料 打開檔案或是 syslog client 紀錄分類方式與數量 20 種 Class,每個 Class 數個 Events (2012) 8 種 (CONNECT, QUERY, READ, WRI...
用指令開啟或關閉 SD 卡合併到內存
今天老婆說剛買沒多久的手機又滿了,不能裝東西,想說颱風天來幫她合併 SD 卡內存,這樣她又更能盡情裝 APP 了(?),結果系統一直顯示無法合併 (因為速度太慢),但是其實測速以後還好阿,因此用手動的方式來設定合併內存。 這篇有用的對象如下 Android 6.0 以上設備 會開啟 adb 跟 debug 模式 不管 SD 卡的速度 (因為合併內存一定會降速度,很差的卡降更多) 合併內存功能被鎖起來,或是因為速度偵測而無法合併的都可以使用 合併內存 備份 SD 卡 adb start-server adb shell sm list-volumes all [應該類似 public:179,32 mounted … 這樣,後面的 179,32 等會會用到] adb shell sm set-force-adoptable true adb shell sm partition disk:179,32 private [這步將會把 SD 卡合併到內存,包含格式化,等了很久才完成,這時候看手機應該看不到 SD 卡了] adb shell sm set-force-adoptabl...