Bash

使用 arpwatch 文本文件數據庫更新 mysql 數據庫

  • October 12, 2012

我希望將 arpwatch 條目保留在 mysql 數據庫中,以便與我基於 mac 地址儲存的其他資訊進行交叉引用。我已經手動將 arpwatch 數據庫導入到我的 mysql 數據庫中,但是作為數據庫的新手,我不確定在不創建重複項的情況下使用新條目不斷更新數據庫的最佳方法是什麼。沒有一個欄位可以是唯一的,因為即使是時間也經常重複。我對觸發器或新站之類的實際 arpwatch 事件不感興趣,只對 mac/ip/time 配對感興趣。

一個簡單的 bash(或 sql)shell 腳本可以解決問題嗎?是否可以使mac地址加上時間成為某種複合鍵?

  • 數據庫稱為實用程序,表是arpwatch,列是mac,ip,時間
  • 一個名為“hosts”的單獨表,其中包含 mac、ip、type、hostname、location、notes 列,其中 mac 作為主鍵。該表將使用 arpwatch 列關聯 mac 隨著時間的推移所擁有的不同 IP 地址
  • 初始導入是使用 MySQL Workbench 完成的,使用 INSERT INTO 命令在文本文件上進行創造性搜尋和替換
  • 設置mac,ip,time為複合主鍵
  • 創建 awk 腳本:arpwatch_to_sql.awk

#!/usr/bin/awk -f
BEGIN {
       OFS=","
       FS="\t"
       print "INSERT IGNORE INTO utility.arpwatch (mac,ip,time) VALUES"
}
{print "('"$1"'", "'"$2"'", "'"$3"'""),"}

  • 導入更新的命令:

./arpwatch_to_sql.awk /var/lib/arpwatch/arp.dat > ~/updatearp.sql
mysql -vvvv -h [sql hostname] -P 3306 -u [username] -p [password] <updatearp.sql 2>&1 1>&2|echo `date` `grep 'Query\|Records'`>>updatearp.log

引用自:https://serverfault.com/questions/437476