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