我创建了一个shell脚本,通过连接到DB只一次连接到dbcpd.log文件中的DateBase和INSERT 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的日志中重复时,DB会回复消息ERROR 1062(23000)at第1行:重复条目’192.168.1.20-00:0c:29:95:fd:10’用于键’IP_Address’
我的问题是:由于我只连接到DB一次,sql会在一个连接中解释多个查询,但问题是当发生错误时它不会完成解释其他查询,所以它是一种忽略SQL错误的方法,继续其他查询?
解决方法:
像这样更新你的插入语句:
INSERT IGNORE INTO IP_MACTable (IP_Address, MAC) VALUES ('$ip','$mac');
您还可以使用–force选项强制mysql继续出错:
mysql -u root --password='pw' --force MatchingDB
标签:linux,shell,mysql
来源: https://codeday.me/bug/20190814/1651903.html