Per aspera ad astra
"Правильный" перевод: мы сами создаем себе проблемы, а потом героически их преодолеваем
Этот блог никогда не имел коммерческой направленности. Пригодная для коммерциализации тема декодирования VIN автомобилей ушла на отдельный домен carinfo.kiev.ua. Здесь же осталось то, что мне интересно, но чисто для души. Мои наблюдения, какие-то мысли, наработки в мире IT. Посещаемость меня не волнует: коды аналитики встроены в страницы сайта, но я ее (аналитику) никогда не смотрю. В 2017 по требованию платежных систем я перевел carinfo.kiev.ua на защищенный протокол SSL. Этот же домен переводить не стал, так как здесь нет ничего тайного и/или связанного с охраной личной или банковской тайны. Поэтому тратить деньги на покупку SSL сертификата посчитал излишним.
Последние несколько лет на Facebook появилась неприятная и непонятная для меня особенность: при "поделиться новостью" несмотря на возможность выбора изображения со страницы, в результате в публикации ленте Facebook упорно показывалось только лого сайта несмотря на любые мои ухищрения:
Но в последнее время, из-за роста количества публикаций в блоге, связанных с темой войны россии против Украины, эта особенность Facebook начала меня раздражать. Потыкался туда-сюда, спросил у Google - ответа нет. 11 января даже написал запрос в поддержку Facebook. И жизнь потекла дальше своим чередом...
5 февраля, обсуждая с единомышленниками один новый проект, снова уткнулся носом в то, что поисковики любят когда сайты защищены SSL сертификатом. И возникла у меня мысль, что проблема именно в протоколе - возможно Facebook отказывается принимать нормально ссылки на страницы без SSL. И решил таки закрыть свой блог сертификатом. За пару часов подобрал подходящего поставщика, заказал, оплатил, и установил сертификат на сервер. Сходил в свою ленту Facebook и подергал свои публикации из этого блога: если на странице публикации здесь заранее изменить ссылки на изображения с http на https, и два раза (?) отредактировать публикацию на Facebook, то публикация становится "нормальной", с интересными картинками. И даже через некоторое время обновится счетчик "нравится" на странице публикации здесь, который к большому сожалению обнуляется при переходе на другой протокол.
Можно так подергать счетчики на публикациях, которыми ты сам делился. Что делать с публикациями, которыми делились посетители сайта - у меня ответа нет. Скорее всего надо смириться с этой потерей.
Ок, что мы имеем: сайт переведен на SSL, но Facebook так же хочет, чтобы все ссылки на изображения на странице тоже были с использованием протокола https. Надо сделать пакетное обновление уже сделанных публикаций, так как в силу ряда причин ссылки на страницах почти всегда абсолютные, а не относительные (моя лень тут не на первых местах, но и далеко не последняя ). Значит берем в руки case tools и делаем обновление базы сайта средствами SQL. Сначала для одной публикации:
UPDATE node_revisions dnr SET dnr.teaser = REPLACE(dnr.teaser, 'http://reznik.kiev.ua', 'https://reznik.kiev.ua'), dnr.body = REPLACE(dnr.body, 'http://reznik.kiev.ua', 'https://reznik.kiev.ua') WHERE dnr.nid = 1695;
Двойное редактирование своей публикации в ленте Facebook - и результат налицо!
Ок, раз на тестовой публикации все прошло нормально, то теперь надо применить пакетную обработку для всех остальных. На всякий случай сначала делаю пакетное обновление тизеров публикаций:
UPDATE node_revisions dnr SET dnr.teaser = REPLACE(dnr.teaser, 'http://reznik.kiev.ua', 'https://reznik.kiev.ua');
Проверяю - все в порядке. Переходим к body (основному телу) публикаций. И 5 февраля в 16:42 (воскресенье!) следующей летит эта SQL команда:
UPDATE node_revisions dnr SET dnr.body = REPLACE(dnr.teaser, 'http://reznik.kiev.ua', 'https://reznik.kiev.ua') WHERE dnr.body LIKE '%http://reznik.kiev.ua%' ORDER BY dnr.nid DESC;
Проверяю результат и прихожу в шок: у публикаций исчезли body - вместо них записаны тизеры. Не буду писать оправданий почему я пропустил эту дефективную команду, отмечу только что в ней не так: если в body публикации есть текст "http://reznik.kiev.ua", то в body пишется текст из teaser! Осознав произошедшее я пришел в ужас: под нож попали более тысячи публикаций! И отменить сделанное невозможно!
Мой сайт работает с базой данных в формате MyISAM. Во первых это опция по умолчанию при установке (а первые 8 лет сайт существовал на разных виртуальных хостингах, где InnoDB далеко не всегда поддерживался), во вторых этот формат занимает на 30% меньше места, чем "транзакционный" InnoDB. А при малой интенсивности записей в базу MyISAM (контент на сайт вношу только я и это несколько публикаций в день) еще и будет быстрее для чтения. Опережают его в скорости чтения сжатые (compressed) таблицы, которые можно использовать только для чтения. То есть сделать rollback транзакции не получится. Раньше у меня каждую ночь по крону снимались резервные дампы баз всех сайтов. Потом я разжился сервером репликации баз данных из-за carinfo.kiev.ua, и теперь уже на сервере репликации продолжали сниматься дампы с реплицированной базы данных (что позволяло основному сайту всегда быть онлайн). Но летом 2019 у меня были проблемы со свободным местом на сервере репликации, я арендовал более мощный сервер и... и сделав тестовые дампы, cron так и не запустил на нем.
Имея тестовый дамп базы сайта от лета 2019 года я восстановил более ранние публикации. Какое-то количество из них я правил после этого, но уже что есть, то есть. Осталось почти семьсот публикаций после 24.02.2022, резервных копий которых у меня под рукой нет. Их восстановление заняло 7 суток без пары часов. Это была не круглосуточная работа: есть основная работа, семейная жизнь и самый роковой фактор - регулярные отключения электроэнергии из-за обстрелов критической инфраструктуры Украины крылатыми ракетами кремлевскими террористами. Последний фактор оказался самым значительным: пока я вынужденно бездействовал из-за отсутствия электроэнергии и интернета, сайт на сервере в Западной Европе продолжал крутиться и все, в том числе и боты поисковых систем, видели мой позор. И это очень сильно деморализовало меня и вселяло панику. А паника приводит к ошибкам и лишним действиям... Как я выбирался из собственноручно созданной ямы:
Позитив: все страницы сводок теперь в унифицированном последнем формате вместо десятка версий от полностью ручной работы в первые дни до шаблонного копировать-вставить с октября 2022 года.
Негатив: Потеряны комментарии и другие дополнения, которыми я особенно активно снабжал эти публикации в первые полгода войны.
В результате не смог восстановить только 4 публикации. Из почти семисот в начале! Не смог восстановить три незначительные публикации и Краткие итоги Декабря и всего 2022 года . С последней публикацией что-то непонятное: я конечно ее публиковал 2 января, но не нашел вообще никаких ее следов нигде, и на Facebook я ею тоже не делился. Заговоренной оказалась, прям. Надо как-то ее восстанавливать, точне писать с нуля... [Проблема решена - читайте дополнение внизу страницы] Так же потеряны две недописанные публикации, сравнимые по объему с этой, которую Вы сейчас читаете. Их точно нет больше нигде
Итак. Опираясь на опыт выше последовательность действий в ситуации, когда база публикаций сайта повреждена, резервной копии базы нет, и ее надо как можно быстрее и полнее восстановить:
Если бы у меня была резервная копия базы данных, то полное восстановление публикаций заняло бы 2...3 часа максимум (вспомнить настройки подключения к серверу репликации, зайти, вспомнить расположение дампов, скачать дамп, разархивировать, развернуть на временном сервере, скопировать нужные таблицы и т.д.). Так что делайте регулярные резервные копии базы данных.
Статью Краткие итоги Декабря и всего 2022 года смог восстановить! Это удалось сделать с помощью программы ChromeCacheView, которая умеет доставать данные из кэша браузеров на разных самых распространенных платформах (кроме Firefox, для которого используется отдельная утилита MZCacheView от тех же авторов)!
Важно! Для восстановления данных из кэша браузера на компьютере, где возможно была ранее просмотрена искомая страница в полном варианте, ни в коем случае не открывайте страницу в самом браузере до попытки восстановления, ведь в таком случае кэш браузера обновится самой последней "побитой" версией страницы.
И это наверное единственный способ восстановить публикацию, которую Вы написали, но еще не публиковали для открытого доступа, и/или страницы с ограниченным доступом, которые поисковики не могут проиндексировать.
Re: Facebook назначаю виновным
Статью Краткие итоги Декабря и всего 2022 года смог восстановить! Это удалось сделать с помощью программы ChromeCacheView, которая умеет доставать данные из кэша браузеров на разных самых распространенных платформах (кроме Firefox, для которого используется отдельная утилита MZCacheView от тех же авторов)!
Важно! Для восстановления данных из кэша браузера на компьютере, где возможно была ранее просмотрена искомая страница в полном варианте, ни в коем случае не открывайте страницу в самом браузере до попытки восстановления, ведь в таком случае кэш браузера обновится самой последней "побитой" версией страницы.
Я полный текст этой страницы нашел в кэше браузера на рабочем компьютере, где я эту страницу почему-то открывал 3 февраля. И не важно почему я ее открывал с рабочего компьютера! Важно, что страница восстановлена!
Отправить новый комментарий