Указанный узел отсутствует - когда он исчез?


Итак, я унаследовал давний и сложный сайт drupal с множеством записей, которые ссылаются друг на друга. Сайт начинался в Drupal 6, и эти ссылки раньше были ссылками на узлы CCK, но они были перенесены на Drupal 7, и я думаю, что теперь в основном ссылки на сущности, хотя здесь или там может быть ссылка на узел CCK. Я упоминаю об этом, потому что это область, о которой я мало что знаю, и я думаю, что это может иметь отношение к тому, что следует.

Проблема заключается в следующем: Есть некоторые узлы, на которые ссылаются по идентификатору другие узлы, которые, похоже, исчезли. Допустим, например, у нас есть тип контента "Курятник", который содержит ссылки на 100 "куриных" узлов. Если я отредактирую "Курятник", я увижу 100 полей, каждое с именем и значением, например, "Курица 1[nid:1]", "Петух 50[nid:62]", но одно из них будет пустой ссылкой. "[nid:4]", и когда я построю представление, чтобы перечислить всех "Цыплят", не будет курица с яйцом: 4. Это похоже на то, что курица была удалена из базы данных, и удаление не распространилось на все вещи, которые ссылались на нее, как это должно было быть. Очевидно, я хотел бы знать, как это произошло, и я заметил, что у нас уже несколько лет включены резервные копии. Я хотел бы узнать, когда это произошло и что еще произошло примерно в это время. Появлялись ли эти пустые ссылки одновременно?

  • Я могу загрузить резервные копии и загрузить их в локальную экземпляр mysql. Как бы я запросил, есть ли в них chicken nid:4? Это не кажется простым или интуитивно понятным из схемы drupal, которую я видел.

  • Кажется ли эта проблема кому-нибудь знакомой, и есть ли у вас какие-либо предположения о том, было ли это разовое событие, которое вряд ли повторится?

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

Author: Rokujolady, 2016-08-09

2 answers

Вы можете скопировать базу данных в свою локальную версию MySQL. Это общий экспорт и импорт базы данных, инструкции по которому вы можете найти в другом месте.

Для запроса определенных узлов вы можете использовать этот SQL:

SELECT * FROM node WHERE nid = 4;

Если вы получите результат, узел существует, если нет, то его нет.

Возможно, у вас есть запись в таблице узлов, но отсутствуют другие связанные данные узла, и в этом случае ваши данные каким-то образом повреждены. Надеюсь, это не так это.

Существует так много вариантов того, как это могло произойти, что мы не можем дать однозначный ответ, но первые 2 наиболее вероятные возможности, которые приходят на ум:

  1. Узлы исчезли по какой-либо причине
  2. Во время миграции с Drupal 6 на Drupal 7 узлы каким-то образом оказались с разными идентификаторами узлов, и поля ссылок не были обновлены для соответствия.

Если это второй, вы можете выполнить поиск по названию узла, например пример:

SELECT * FROM node WHERE title = 'Chicken';

Если вы получите результат, и nid не соответствует тому, что вы ожидаете, основываясь на поле ссылки, то это, вероятно, ваша проблема. В этом случае вам нужно будет каким-то образом сопоставить старые идентификаторы узлов с новыми идентификаторами узлов, а затем обновить значения ссылочных полей, чтобы они соответствовали новым идентификаторам.

В зависимости от того, насколько сложной окажется проблема, вам, возможно, придется дополнительно ознакомиться со схемой Drupal.

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

После нескольких запросов, чтобы определить, отсутствуют ли данные или они все еще есть, но изменились, я бы, вероятно, начал с сравнения различных версий базы данных по интересующим моментам во времени (например, до и после любого серьезная разработка или миграция), чтобы попытаться сузить круг, когда данные исчезли/изменились. Затем выясните, что происходило в то время (была ли это миграция? и т.д.), затем расследуйте на основе этого.

 2
Author: rooby, 2016-08-10 02:05:58

Drupal 7 по умолчанию не удаляет ссылки на удаленные узлы. См. Модуль Ссылка на поле удалить. Некоторые подробности об этом на странице проекта (проверьте эту страницу для получения еще более подробной информации):

Этот модуль удаляет ссылки на удаленную сущность из полей, хранящихся в базе данных SQL. Он существует для того, чтобы устаревшие ссылки на несуществующий контент не вызывали неожиданных проблем (например, когда ссылающийся контент используется отображается).

Я не уверен, что это очистит существующие "мертвые" ссылки, но, по крайней мере, продвигается вперед.

 2
Author: bleen, 2016-08-10 09:04:35