Erro no MySQL durante um grande upload de dados

2

Estou usando um script python com a biblioteca python MySQLdb para carregar uma grande quantidade de dados em um banco de dados MySQL local. Quando usei uma amostra dos dados, tudo correu bem e carregou. Agora estou usando todos os meus dados (são cerca de 300.000 linhas divididas em 12.000 arquivos de texto) e recebo o seguinte erro:

"OperationalError: (2003, ""Can't connect to MySQL server on 'localhost' (10055)"")"    

No ponto em que falha, carregou 17231 linhas de informação. Estou usando o Python 2.7, Win7 64 e MySQL 5.1.53 em uma máquina desktop. Eu usei uma instalação do WAMP e ver os dados usando o PhpMyAdmin. Um exemplo da função que estou usando para fazer o upload dos dados é o seguinte:

# upload data
def updateDB(db, table, values):

    db = MySQLdb.connect (host = 'localhost', user = 'root', passwd = '', db = db)
    cursor = db.cursor()
    print str(values)
    cursor.execute(makeSQLHeader(table, values), values)     
    db.commit()
    db.close()

Isso funciona bem para os dados de teste e a estrutura do arquivo de texto é idêntica para todos os meus dados. Qual seria uma boa estratégia para resolver este problema?

    
por celenius 29.07.2011 / 18:56

2 respostas

4

Meus dois pensamentos sobre isso são que ou está demorando muito para carregar e você está desconectando com um tempo limite. Existem algumas maneiras de se reconectar em python encontradas aqui Aqui estão as variáveis de timeout relevantes no mysql: wait_timeout and < href="http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_interactive_timeout"> interactive_timeout

Segunda ideia, e da discussão nos comentários, parece a certa. Provavelmente, você está atingindo o limite conexão mysql abrindo uma conexão por arquivo.

Tente abrir uma única conexão e executar o teste (quando você fizer isso, poderá atingir o tempo limite, dependendo de quanto tempo demora).

    
por 29.07.2011 / 19:19
2

Pode ser que você esteja dentro dos limites do máximo permitido de pacotes. Você poderia definir algo assim em my.cnf:

max_allowed_packet=12M

Para mais informações, consulte este artigo no guia de referência do MySQL .

    
por 29.07.2011 / 19:33

Tags