我希望将 arpwatch 条目保存在 mysql 数据库中,以便与我基于 mac 地址存储的其他信息进行交叉引用。我已手动将 arpwatch 数据库导入我的 mysql 数据库,但作为数据库新手,我不确定在不创建重复项的情况下不断用新条目更新数据库的最佳方法是什么。所有字段都不可能是唯一的,因为即使时间也经常重复。我对实际的 arpwatch 事件(如触发器或新站)不感兴趣,只对 mac/ip/时间配对感兴趣。
一个简单的 bash (或 sql) shell 脚本能解决问题吗?是否可以将 mac 地址加上时间作为某种复合键?
- 数据库名为 utility,表名为 arpwatch,列为 mac、ip、time
- 一个名为“hosts”的单独表,其列为 mac、ip、type、hostname、location、notes,mac 为主键。此表将使用 arpwatch 列关联 mac 随时间变化的不同 ip 地址
- 初始导入是使用 MySQL Workbench 完成的,使用 INSERT INTO 命令,并在文本文件上进行创造性搜索和替换
答案1
设置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