como ignorar um erro MySql e passar para a próxima consulta?

1

Eu criei um script de shell para conectar-me a um DateBase e INSERT IPs e MACs do arquivo dhcpd.log, conectando-me ao DB apenas uma vez:

#/!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

No MySql, configurei os atributos "IP, MAC" como um campo "ip, mac" único, que não será duplicado, portanto, quando ele duplicou no log do dhcp.log a resposta do DB com uma mensagem ERROR 1062 (23000) at line 1: Duplicate entry '192.168.1.20-00:0c:29:95:fd:10' for key 'IP_Address'
minha pergunta é: Como eu me conecto ao banco de dados apenas uma vez, o sql irá interpretar várias consultas em uma conexão, mas o problema é que quando ocorreu um erro, ele não concluirá a interpretação de outras consultas, é uma maneira de ignorar um erro de SQL vá para outras perguntas?

    
por Networker 19.05.2014 / 23:07

1 resposta

6

Atualize sua instrução de inserção assim:

INSERT IGNORE INTO IP_MACTable (IP_Address, MAC) VALUES ('$ip','$mac');

Além disso, você pode forçar o mysql a continuar com erro usando a opção --force:

mysql -u root --password='pw' --force MatchingDB
    
por 19.05.2014 / 23:16