Трудно отладить "Сервер Mysql ушел" - PullRequest
15 голосов
/ 25 мая 2011

Я использую MsAccess с фоновой базой данных Mysql, и сегодня у меня возникают некоторые проблемы.

В зависимости от того, как далеко я могу попасть в программу, я могу получить список всех имен и записей.Но как только я вхожу в форму редактирования любой записи, я получаю различные результаты.Иногда мне везет, и я вижу первую запись.Но любая запись после этого всегда получит ошибку MsAccess: Объект недействителен или больше не установлен , а затем любые последующие вызовы после приведут к ошибке Mysql ODBC Сервер Mysql пропал.

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

Вот что я пыталсяfar:

  1. Я попытался изменить некоторые параметры подключения ODBC.
    • Проверено Разрешить большие результаты - FAILED
    • Проверено Включить автоподключение - FAILED
  2. I 've Проверенные и восстановленные таблицы - FAILED
    • В результате большого количества таблиц "таблица нуждается в обновлении, пожалуйста, исправьте таблицу"
  3. Удвоил числа в конфигурации my.cnf и перезапустил службу mysql, а также программное обеспечение msaccess. FAILED
    • Это были настройки моего my.cnf после внесения изменений.

Здесь:

set-variable = max_connections=500
safe-show-database
log-error=/var/log/mysqld.log
connect_timeout=1000
interactive_timeout=28800
wait_timeout=288000          <**This was changed**

join_buffer_size=6M
key_buffer_size=300M         <**THIS WAS CHANGED **
max_allowed_packet=300M      <**THIS WAS CHANGED **
myisam_sort_buffer_size=300M <**THIS WAS CHANGED **
read_buffer_size=6M
sort_buffer_size=6M
table_cache=12288
thread_cache_size=24
tmp_table_size=132M
query_cache_limit=3M
query_cache_size=64M
query_cache_type=1

По сути, я попробовал каждое предложение, которое смог найти, и не могу понять проблему.

Я также посмотрел на MYSQL: Ушел Если я пройду туда маркированный список

  • Никто не убил работающий поток
  • Я не думаю, что запрос был выполнен после закрытия соединения (так как он работал в течение многих лет)
  • Клиентское приложение обладает необходимыми привилегиями
  • Донне знаю, как выяснить, был ли у меня тайм-аут из-за соединения TCP / IP на стороне клиента
  • Я не знаю, установил ли я тайм-аут на стороне сервера,но я знаю, что автоматическое переподключение в клиенте отключено
  • ???
  • Запрос потенциально может быть большим, так как это форма со многими подчиненными формами
  • ???
  • DNS должен быть в порядке, так как я могу подключиться к нему с помощью реального средства просмотра SQL (HeidiSQL)
  • ??? Дочерние вилки ???
  • ???

Я думаю, что это одна из тех ошибок, которую трудно выяснить, так как я измотан: / Я, вероятно, упускаю некоторую информацию, но я нене уверен, что еще включить.

--- EDIT ---

Спасибо всем за ваши комментарии, я все еще отлаживаю эту проблему.Кажется, что не все формы вызывают некоторые проблемы.Поэтому я начинаю думать, что это проблема MSAccess, а не проблема MySql.Все формы, которые ломаются, имеют одинаковую строку в своем коде VBA:

Private Sub Form_Error(DataErr As Integer, Response As Integer)
    If Screen.ActiveControl.Name = "UnboundTextBox" Then
       Response = acDataErrContinue
    End If
End Sub

Я не помню, чтобы вставлял этот код, поэтому я предполагаю, что это автоматическая вещь, но я все еще прохожумои формы, чтобы увидеть, какие из них вызывают эту ошибку, а какие нет.Так больше в нескольких.

--- Сегодня я делаю некоторую отладку, пытаясь найти все, что я могу, из любого журнала, который я могу собрать ----

 MSACCESS        17ec-b10   EXIT  SQLStatisticsW  with return code -1 (SQL_ERROR)
    HSTMT               0AF82920
    WCHAR *             0x00000000 [      -3] <empty string>
    SWORD                       -3 
    WCHAR *             0x00000000 [      -3] <empty string>
    SWORD                       -3 
    WCHAR *             0x0013AAE8 [      -3] "location\ 0"
    SWORD                       -3 
    UWORD                        1 <SQL_INDEX_ALL>
    UWORD                        0 <SQL_QUICK>

    DIAG [08S01] [MySQL][ODBC 3.51 Driver][mysqld-5.0.92-community]Lost   
 connection to MySQL server during query (2013) 

----------------------------- ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ --------------------------

На прошлой неделе или около того мой начальник усердно работал над установкой нового внутреннего сервера для нашего офиса.Мы также несколько раз меняли IP-адреса и провайдеров.Оказывается, в результате он создал для меня административный кошмар, когда я попытался отладить проблемы с сервером и проблемы с программным обеспечением и т. Д., Когда проблема была в настройках, которые провайдеры провайдера установили с настройками маршрутизатора.и т. д. и т. д. Так что, по сути, вся эта головная боль не была чем-то плохим ни для сервера, ни для программного обеспечения, а для аппаратного обеспечения.

Итак, теперь я должен задом наперед спроектировать все, что я сделал, и попытаться заставить его работать на обоих ips.Это работает на важный сейчас.Но он не работает на старом, так что ... Я думаю, мне просто нужно это выяснить.[Машет воображаемым кулаком в воздух] Lol

Ответы [ 3 ]

2 голосов
/ 01 сентября 2013

Проблема в том, что время соединения истекло. Это не настройка, которую вы можете изменить на уровне ODBC. Мой провайдер MySQL установил тайм-аут на 30 секунд (вы можете узнать, что у вас установлено при выполнении запроса PassThrough "SELECT @@ wait_timeout"). Я обошел его, опрашивая соединение каждые 10 секунд с простой формой. Это поддерживает связь. Убедитесь, что у вас есть макрос AutoExec, который открывает форму.

Private Sub Form_Open(Cancel As Integer)
    Me.TimerInterval = 1000 ' 10 seconds
End Sub

Private Sub Form_Timer()
    Me.Requery
End Sub
1 голос
/ 29 мая 2011

Я не использовал MySQL с Access в производственной среде, но проблема, с которой вы столкнулись, звучит подозрительно похоже на проблему, с которой я столкнулся в SQL Server.В основном, если на рабочей станции клиента установлены неверные настройки DNS, он может запутаться в том, как разрешить соединение с SQL Server и потерять соединение.В тех случаях, когда я сталкивался с этим, рабочие станции были неправильно настроены с DNS-провайдером Интернета в качестве основного DSN, но SQL Server был локальным сервером, доступным только в локальной сети (и не отображался DNS-провайдерами).

Решение состоит в том, чтобы использовать локальный контроллер домена в качестве основного DNS.Он выполнит поиск IP-адреса локального SQL Server и выдаст все нелокальные запросы DNS DNS-провайдера.

Если у вас нет контроллера домена Windows / Samba, вам необходимо использовать любой локальный контроллер.Сервер авторизации имен в локальной сетиВ качестве альтернативы, вы можете подключиться к серверу MySQL по IP-адресу и избежать проблемы, или отобразить его в файле HOSTS клиентской рабочей станции (что не рекомендуется - это отличный способ вызвать действительно сложные проблемы для устранения проблем при изменении IP-адресов).

0 голосов
/ 27 мая 2011
[mysqld-5.0.92-community]Lost   
connection to MySQL server during query (2013) 

Этот стандарт означает, что вы обнаружили ошибку в MySQL-Server. Можете ли вы опубликовать хвост своих mysqld.err и mysqd.log

, это приведет к перезапуску сервера и отключит все открытыесоединения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...