DateBaseに接続するシェルスクリプトを作成し、DBに1回だけ接続することで、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のログに複製されると、DB応答とメッセージERROR 1062 (23000) at line 1: Duplicate entry '192.168.1.20-00:0c:29:95:fd:10' for key 'IP_Address'
私の質問は次のとおりです。DBに1回だけ接続するため、SQLは1つの接続で複数のクエリを解釈しますが、問題はエラーが発生したときに他のクエリの解釈が完了しないためです。 SQLエラーを無視して他のクエリに進みますか?
次のように挿入ステートメントを更新します。
INSERT IGNORE INTO IP_MACTable (IP_Address, MAC) VALUES ('$ip','$mac');
また、--forceオプションを使用して、エラー時にmysqlを強制的に続行することもできます。
mysql -u root --password='pw' --force MatchingDB