Замена http: на https: по всей базе Есть решение

Вопрос следующий. Делаем бэкап базы

mysqldump -u admin_ -p -f admin_ > base.sql

с последующей заменой всех вхождений http: на https:

sed -i 's/http:/https:/g' base.sql

Записываем как обычно в новую базу.

 mysql -u admin_ -p admin_ < base.sql

Но происходит ошибка. 

ERROR 1062 (23000) at line 2535: Duplicate entry '**********/kruzhka-golov' for key 'PRIMARY'

Причём если перезалить неизменённый файл который мы сделали в первом шаге то база заливается нормально.

Что это и что можно предпринять. Может есть какой-то более простой способ заменить http:?

17 ответов

  • 1

    сделайте через phpMyAdmin

    • +1
      Светлана Каменева Светлана Каменева 20 ноября 2019 15:00 #

      Тоже самое происходит.

    • 0
      Светлана Каменева Светлана Каменева 20 ноября 2019 15:03 #

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

  • 1

    ну.... смотря какие цели вы преследуете
    есть смысл таким заниматься только в описании товаров, категорий, блогов и т.д.
    тогда надо менять именно в тех полях таблиц, в которых есть эта необходимость

    • 0
      Светлана Каменева Светлана Каменева 20 ноября 2019 15:16 #

      Цель - убрать mixed content. Соответственно да нужно именно это - описания товаров, категорий, и новости-блог. Вы не могли бы подсказать в каких таблицах менять?

      • +1

        посмотрите таблицы - там по названиям все понятно

        shop_product, shop_category.....

        ну и в таблицу всегда можно заглянуть и увидеть оно или не оно

        • 0
          Светлана Каменева Светлана Каменева 20 ноября 2019 15:31 #

          Вообще скоро этот вопрос посыпется валом имхо. Так как гугл с декабря будет очень сильно бить за mixed content. А у старых сайтов таких страниц очень много. А по помощи всё понятно. За редким исключением вопросы решаются самостоятельно.

          • +1

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

            • 0
              Светлана Каменева Светлана Каменева 20 ноября 2019 15:48 #

              Было много контент менеджеров которые вставляли ссылки например на картинки с других файлообменников. Я ещё раз повторяю что сайт старый.

              • +1

                понимаю, сочувствую
                НО! движок и поддержка здесь не при чем. Это проблемы организации работы контент менеджеров. То что сайт старый - уже лет 10 - так точно, не рекомендуют использовать ссылки на внешние источники.

                • 0
                  Светлана Каменева Светлана Каменева 20 ноября 2019 16:28 #

                  Я понимаю вам пофлудить хочется. Но нам как-то нет. Мы просили совета, а получили упрёки в плохой организации. Решение найдено самостоятельно как и в 80 процентах обращений сюда.

                  • +1

                    Я вам дал дельный совет. если Вы им не воспользовались - это не мои проблемы
                    Если у Вас не хватает знаний -могли бы заплатить специалисту и не иметь головной боли.

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

                    • 0
                      Светлана Каменева Светлана Каменева 20 ноября 2019 16:46 #

                      Вы ниже то прочтите - решение найдено. Или вас уже не остановить? ))

  • 2
    Eugen Nichikov 20 ноября 2019 16:27 #

    Ошибка в том, что вы не удаляете старые данные из базы.

    Можно на первом шаге добавить DROP TABLE

    mysqldump --add-drop-table -u admin_ -p -f admin_ > base.sql

    Но, чтобы была возможность "вернуть как было", я бы рекомендовал создать новую, импортировать в неё, а потом подменить в конфиге на новую.

    Пошагово:

    1) Создаём базу admin_2

    2) дамп старой admin_

    mysqldump -u admin_ -p -f admin_ > base.sql

    3) замена

    sed -i 's/http:/https:/g' base.sql

    4) импорт файла в новую БД

     mysql -u admin_ -p admin_2 < base.sql

    5) в файле wa-config/db.php поменять значение database (и пользователя, если будете создавать нового).

    • +1
      Светлана Каменева Светлана Каменева 20 ноября 2019 16:48 #

      Это не помогало. Мы так тоже делали, 8 баз создали ). Вот сверху точечное решение проблемы через правку контента. Но всё равно ВАМ спасибо!

      • +1
        Eugen Nichikov Eugen Nichikov 20 ноября 2019 16:52 #

        Странно, т.к. ошибка

        ERROR 1062 (23000) at line 2535: Duplicate entry '**********/kruzhka-golov' for key 'PRIMARY'

        Буквально говорит о том, что при импорте возник дубль. В чистой базе не должно было бы быть такого.

        Но точечное решение - тоже ок. Можно в phpMyAdmin ещё по всем таблицам поискать http: авось, где-то ещё осталось.

  • 1
    Светлана Каменева 20 ноября 2019 16:31 # Решение

    Нам помогло следующее:

    1)

    UPDATE blog_post 
    SET text = REPLACE(text, 'http:', 'https:');

    Блоги/новости


    2)

    UPDATE shop_category 
    SET description = REPLACE(description, 'http:', 'https:');

    Категории

    3) 

    UPDATE shop_page 
    SET content = REPLACE(content, 'http:', 'https:');

    Страницы

    4)

    UPDATE shop_product 
    SET description = REPLACE(description, 'http:', 'https:');

    Товары

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите