Назад | Перейти на главную страницу

Поставщик членства в MySql - схема отсутствует или неверна

У нас есть сайт ASP.NET, работающий на IIS 7.5 с базой данных MySQL с использованием коннектора .net, поставщики членства / ролей правильно настроены в web.config и работают - но только временно.

Исторически (соединитель .net версии 6.7.4.0 и ранее) у нас всегда была проблема после восстановления резервных копий сайта, включая таблицы членства, мы получали ошибку на странице о том, что у нас была «отсутствующая или неправильная схема» для поставщика членства, которая ерунда, потому что мы ясно видим таблицы в БД.

Чтобы решить эту проблему, мы просто удалим таблицы членства из БД, установим autogenerateschema = true в web.config, позволив поставщику ролей автоматически сгенерировать таблицы снова, что работает. Затем мы можем восстановить данные из нашей резервной копии (той же резервной копии!) И перезаписать новые пустые таблицы нашими существующими учетными записями, и все будет работать нормально. Мы подумали, что это просто причуда с коннектором .net, и поскольку это произошло только после восстановления БД из резервных копий, мы не особо волновались.

Теперь, когда мы обновились до .net connector 6.9.4.0, мы сталкиваемся с той же проблемой, только хуже, потому что теперь, если пул приложений перезапускается для этого веб-сайта, он запускает то же сообщение «отсутствует или неправильная схема», и мы применили исправить выше. Такие вещи, как внесение изменений в web.config, запускают цикл пула приложений, что означает, что мы не можем вносить изменения в web.config без остановки сайта!

Это поставщик ролей из web.config, некоторые детали опущены, он никогда не менялся, кроме того, что мы вручную обновляли номер версии.

<roleManager defaultProvider="MySQLRoleProvider" enabled="true">
      <providers>
        <clear />
        <add name="MySQLRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.9.4.0, Culture=neutral, PublicKeyToken=xxxxxx" applicationName="xxxxx" connectionStringName="xxxxxx" autogenerateschema="True" />
      </providers>
    </roleManager>

Следует отметить, что после запуска этой ошибки и применения нашего исправления мы восстанавливаем таблицы членства из одной и той же резервной копии, это означает, что таблицы идентичны до / после исправления, поэтому это не может быть проблемой с базой данных, это какая-то внутренняя состояние IIS.

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

UPDATE my_aspnet_schemaversion SET version = 10

Замените 10 версией, подходящей для загруженного коннектора.