我创建了一个 shell 脚本来连接到 DateBase,并通过仅连接到数据库一次来从 dhcpd.log 文件插入 IP 和 MAC:
#/!bin/bash
dhcpLogFile="/var/log/dhcpd.log"
NumberOfLines=$(awk '/DHCPACK/ { print $8} ' $dhcpLogFile | awk '!x[$0]++'|awk 'BEGIN{i=0}{i++;}END{print i}')
j=1
while [ $NumberOfLines -gt 0 ]
do
ip=$(awk '/DHCPACK/ { print $8} ' $dhcpLogFile | awk '!x[$0]++' |cut -f$j -d$'\n')
mac=$(awk '/DHCPACK/ { print $10} ' $dhcpLogFile | awk '!x[$0]++' |cut -f$j -d$'\n')
let "j +=1"
let "NumberOfLines -=1"
INSERT INTO IP_MACTable (IP_Address, MAC) VALUES ('$ip','$mac');
done | mysql -u root --password='pw' MatchingDB
在 MySql 中,我已将“IP,MAC”属性设置为唯一,因此“ip,mac”字段不会重复,因此当它在 dhcp.log 的日志中重复时,数据库会回复一条消息,ERROR 1062 (23000) at line 1: Duplicate entry '192.168.1.20-00:0c:29:95:fd:10' for key 'IP_Address'
我的问题是:当我仅连接到数据库一次,sql将在一个连接中解释多个查询,但问题是当发生错误时它不会完成解释其他查询,那么这是一种忽略SQL错误并继续执行其他查询的方法吗?
答案1
像这样更新您的插入语句:
INSERT IGNORE INTO IP_MACTable (IP_Address, MAC) VALUES ('$ip','$mac');
您还可以使用 --force 选项强制 mysql 在出错时继续:
mysql -u root --password='pw' --force MatchingDB