Я использую скрипт python с библиотекой python MySQLdb
для загрузки большого количества данных в локальную базу данных MySQL. Когда я использовал образец данных, все прошло нормально и было загружено. Теперь я использую все свои данные (это примерно 300000 строк, разделенных на 12000 текстовых файлов), и получаю следующую ошибку:
"OperationalError: (2003, ""Can't connect to MySQL server on 'localhost' (10055)"")"
В момент сбоя он загрузил 17231 строку информации. Я использую Python 2.7, Win7 64 и MySQL 5.1.53 на настольном компьютере. Я использовал установку WAMP и просматривал данные с помощью PhpMyAdmin. Пример функции, которую я использую для загрузки данных, выглядит следующим образом:
# 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()
Это отлично работает для тестовых данных, и структура текстового файла идентична для всех моих данных. Что было бы хорошей стратегией для решения этой проблемы?
Мои две мысли по этому поводу заключаются в том, что либо загрузка занимает много времени, либо вы отключаетесь с таймаутом. Есть несколько способов автопереключения в python найдено здесь Вот соответствующие переменные тайм-аута в mysql: wait_timeout и Interactive_timeout
Вторая идея, и из обсуждения в комментариях она кажется правильной. Вы, вероятно, попали в соединение mysql ограничение, открывая соединение для каждого файла.
Попробуйте открыть одно соединение и запустить тест (когда вы это сделаете, вы можете достичь таймаута, в зависимости от того, сколько времени это займет).
Возможно, вы столкнулись с ограничениями максимально разрешенных пакетов. Вы можете установить что-то вроде этого в my.cnf:
max_allowed_packet=12M
Для получения дополнительной информации см. Эта статья в справочном руководстве по MySQL.