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は1つの接続で複数のクエリを解釈しますが、問題は、エラーが発生した場合に別のクエリの解釈が完了しないことです。それでは、これはSQLエラーを無視して他のクエリを実行し続ける方法ですか? ?
答え1
次のように挿入文を更新してください。
INSERT IGNORE INTO IP_MACTable (IP_Address, MAC) VALUES ('$ip','$mac');
--forceオプションを使用して、エラーが発生したときにmysqlを実行し続けることもできます。
mysql -u root --password='pw' --force MatchingDB