2012-02-02 6 views
1

Я запускаю три скрипта perl последовательно. Каждый из них подключается к базе данных Mysql несколько раз и либо выбирает, либо обновляет информацию, содержащуюся в базе данных. После запуска этих трех скриптов примерно в 20 раз (& подключение/отключение от базы данных намного больше, чем это), я получаю сообщение «Не удается подключиться к серверу MySQL на« localhost »(10055).Не удается подключиться к серверу MySQL на «localhost» (10055)

Я читал в другом месте, что я мог бы подключить его к базе данных с помощью mysql_auto_reconnect = 1, однако я не совсем уверен, что это проблема. Сервер Mysql на моем компьютере все еще подключен, когда программа выходит из строя - мне не нужно ее перезапускать. Я хотел понять, почему он это делает, а также я не совсем уверен, как я ввел «mysql_auto_reconnect = 1», так как когда я это делаю, он говорит мне, что DBI-> connect с использованием синтаксиса старого стиля устарел.

my $dbh_m= DBI->connect("dbi:mysql:XXX","root","XXX","mysql_auto_reconnect=1") 

или die ("Ошибка при выборе Trans: $ DBI :: errstr");

Должен ли я также писать это каждый раз при подключении к базе данных? (Включение этого в одно из соединений не решает проблему, я все равно получаю сообщения об ошибках от всех остальных - он не запускается снова, а затем снова разбивается). Является ли это проблемой со многими подключениями/отключением от базы данных?

Спасибо!

ответ

1

Какое сообщение об ошибке вы получили?

Вы должны, вероятно, сделать что-то вроде:

my $dbh; 
{ 
    local [email protected]; 
    do { 
     eval { 
      $dbh = DBI->connect("dbi:mysql:XXX", "root", "XXX", { mysql_auto_reconnect => 1 }) 
     }; 
     if ([email protected]) { 
      warn "Error: $DBI::errstr\n"; 
      warn "Trying to reconnect in 5 sec.\n"; 
      sleep 5; 
     } 
    } while ([email protected]); 
} 

Только в том случае, база данных не отвечает или есть слишком много соединений.

+0

Спасибо, я использовал это. Кажется, я слишком много подключаюсь/отключается от базы данных, лучше ли открывать базу данных и запускать несколько запросов, а только отключать их в конце программы? Ошибка, которую я получаю: «Не удается подключиться к серверу MySQL на« localhost »(10055)», и что есть проблема с подготовкой – Lisa

+0

. Вы должны проверить свой конфигурационный файл MySQL и увеличить максимальный предел соединения, если он слишком низок. И, да - обычно вам нужно подключиться к базе данных только один раз. – JackTheRandom

3
DBI->connect("dbi:mysql:XXX", "root", "XXX", { mysql_auto_reconnect => 1 }) 
+0

Даже если положить, что, я все еще получаю ту же ошибку всплывал (поставили его на каждой связи я делаю) – Lisa

+0

Возможно, но вопрос, который вы задавали, касался того, как использовать 'mysql_auto_reconnect' – ikegami

+0

Да, спасибо за помощь – Lisa

0

Возможно, вы не отсоединяетесь от mysql, когда заканчивается ваш скрипт?

Ешьте ресурсы в mysql. Пожалуйста, проверьте журналы mysql для подсказки.

С уважением,

+0

Я подключался/отключался для каждого оператора update/select, который я сделал, это то, что я должен делать, или мне нужно только отключиться в конце программы? Я думал, что это происходит потому, что я слишком часто был подключен/диск за очень короткое время Спасибо! – Lisa

+0

Если бы я был вами, я использую одно соединение/разъединение в программе. Проверьте ошибку после каждого действия базы данных (выберите/вставьте и т. Д.). Если это неуспешно, попробуйте повторно подключить и выполнить тот же оператор. – user1126070

+0

Еще одна мысль: если вы не используете autocommit, возможно, вы съели ресурс с большой транзакцией. – user1126070

-1

Как исправить MySQL Ошибка 10055 Чтобы устранить эту проблему, необходимо увеличить количество динамических портов. Выполнение следующих команд даст вам 50000 портов для динамического использования.

В Windows Server 2008 R2 открыть окно командной строки

Введите следующую
netsh int ipv4 set dynamicport tcp start=10000 num=50000
Нажмите Enter

Введите следующую
netsh int ipv4 set dynamicport udp start=10000 num=50000
Press Enter

Введите следующую
netsh int ipv6 set dynamicport tcp start=10000 num=50000
Нажмите Enter

Введите следующую
netsh int ipv6 set dynamicport udp start=10000 num=50000
Нажмите Enter

+1

Скачивание без атрибуции с [здесь] (http://blog.whitesites.com/How-to-Fix-MySQL-Error -10055__635140180116307813_blog.htm) –

Смежные вопросы