Ошибки при переходе на MySQL 8: как обнаружить и исправить? - MediaMint

Если вы когда-либо занимались обновлением серверного ПО, то знаете, что это похоже на ремонт двигателя на ходу. Особенно когда речь идет о переходе на новую версию базы данных, такую как MySQL 8. Вроде бы обновление должно принести только преимущества: повышенную производительность, новые возможности, улучшенную безопасность. Но на практике всё не так просто.

В этой статье вы узнаете о том, какие проблемы могут возникнуть при переходе на MySQL 8 и как их избежать, чтобы ваш сайт на 1С-Битрикс продолжал работать без сбоев.

Как понять, что ошибки вообще есть?

  1. Запускаем проверку системы Чтобы узнать, есть ли ошибки, нужно запустить проверку системы в административной панели сайта. Перейти на эту страницу можно двумя способами.
    • Через поиск: в правом верхнем углу в строке поиска вписать «Проверка системы» и выбрать одноименный пункт (Рисунок 1).
    • Через меню: перейти по пути «Настройки» -> «Инструменты» -> «Проверка системы».
    Проверка системы через поиск
    Рисунок 1 – Проверка системы через поиск
  2. Анализируем результаты

    После окончания тестирования системы будет сформирована таблица с отчетом. Нас интересует раздел «Тестирование базы данных». В строке «Кодировка базы данных» будет ошибка (Рисунок 2). Вариации ошибок могут быть разными:

    • Ошибка! Сравнение для базы (utf8mb3_gerenal_ci) отличается от сравнения для соединения (utf8mb3_unicode_ci);
    • Ошибка! Кодировка базы (utf8mb4) отличается от кодировки соединения (utf8mb3).

Это связано с тем, что с последними обновлениями главного модуля (ядра) CMS «1С-Битрикс: Управление сайтом» требует кодировку сравнения utf8mb4 для системы управления базами данных MySQL, а не utf8mb3, как это было раньше.

Результат тестирования базы данных
Рисунок 2 – Результат тестирования базы данных

Важно! Перед исправлением ошибок очень рекомендуем сделать резервную копию сайта вместе с базой данных, чтобы восставить её в случае неудачного устранения ошибок. Подробнее о создании резервной копии можно почитать в документации Bitrix: https://dev.1c-bitrix.ru/learning/course/?COURSE_ID=35&LESSON_ID=5330

Как исправить проблему с кодировкой базы данных?

  1. Узнаём имя базы данных

    В первую очередь нужно узнать имя базы данных для вашего сайта. Сделать это можно через файл настроек системы «.settings.php» (полный путь к файлу: корень_сайта/bitrix/.settings.php). В тексте этого файла нужно найти раздел «connections», в нём поле «database» (отмечен красным на рисунке 3). В этом поле будет указано название базы данных. Копируем это название и сохраняем куда-нибудь в ближайшей доступности, например, в блокнот.

    Код файла .settings.php
    Рисунок 3 – Код файла .settings.php
  2. Изменяем кодировку базы данных

    Если в ошибке кодировки базы данных указана любая другая, не содержащая слова uft8mb4, кодировка, её нужно сменить на правильную. Сделать это можно двумя способами:

    • в СУБД через панель управления хостингом;
    • с помощью SQL запроса в админ-панели Bitrix.

Заполните форму и сделайте первый шаг к разработке или продвижению своего сайта!

Как с вами лучше связаться?

Отправляя заявку, вы принимаете условия и политику обработки персональных данных

result-icon

Отлично!

Заявка отправлена!
В скором времени с Вами свяжется наш эксперт.

Смена кодировки через SQL-запрос

Переходим на страницу «SQL запрос». Удобнее всего это сделать через поиск в правой верхней части админ-панели (Рисунок 4).

Поиск страницы «SQL-запрос»
Рисунок 4 – Поиск страницы «SQL-запрос»

На открывшейся странице в поле ввода SQL-запроса вставляем такой запрос (косые кавычки необходимо оставить) и нажимаем кнопку «Выполнить запрос», после чего подтверждаем действие:

				ALTER DATABASE `имя_вашей_базы_данных` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

Смена кодировки через панель управления хостингом

Рассмотрим процесс смены кодировки для базы данных на примере хостинга Timeweb.

Заходим в панель управления хостигом, в раздел «Базы данных», открываем phpMyAdmin (отмечен красным на рисунке 5).

Интерфейс управления базами данных в панели управления хостингом
Рисунок 5 – Интерфейс управления базами данных в панели управления хостингом

В левом меню в списке баз данных ищем ту, которая используется для сайта (Рисунок 6). Кликаем на её название.

Список баз данных в phpMyAdmin
Рисунок 6 – Список баз данных в phpMyAdmin

Перед вами откроется список таблиц базы данных. Далее в верхней панели инструментов нужно перейти на вкладку «Операции» (Рисунок 7).

Верхнее меню
Рисунок 7 – Верхнее меню

На вкладке «Операции» находим настройку схемы сравнения (Рисунок 8), устанавливаем utf8mb4_general_ci. Галочку «Изменить сортировки всех таблиц» оставляем неотмеченной, жмем кнопку «Вперёд» в этом блоке.

Настройка схемы сравнения таблиц базы данных
Рисунок 8 – Настройка схемы сравнения таблиц базы данных
  1. Редактирование файлов подключения к базе данных

    После изменения кодировки базы данных нужно отредактировать файлы подключения к базе данных. Они располагаются в папке /bitrix/php_interface/. Необходимые файлы: «after_connect.php» (если существует) и «after_connect_d7.php». Если файла «after_connect.php» не существует, то его можно не создавать и пропустить шаг с его правкой. Каждый исправленный файл необходимо сохранить с помощью одноименной зеленой кнопки под полем ввода текста (кода).

    В файле «after_connect.php» меняем эти строки

    				$DB->Query("SET NAMES 'utf8'");
    $DB->Query('SET collation_connection = "utf8_unicode_ci"');

    На такие:

    				$DB->Query("SET NAMES 'utf8mb4'");
    $DB->Query('SET collation_connection = "utf8mb4_general_ci"');

    В файле «after_connect_d7.php» производим такую замену строк:

    				$this->queryExecute("SET NAMES 'utf8");
    $this->queryExecute('SET collation_connection = "utf8_unicode_ci"');

    Меняем на

    				$this->queryExecute("SET NAMES 'utf8mb4'");
    $this->queryExecute('SET collation_connection = "utf8mb4_general_ci"');

    Если у вас версия главного модуля ниже 22.0.0, то в файле «after_connect_d7.php» необходимо использовать следующий синтаксис:

    				$connection = \Bitrix\Main\Application::getConnection();
    $connection->queryExecute('SET NAMES "utf8mb4"');
    $connection->queryExecute('SET collation_connection = "utf8mb4_general_ci"');
  2. Перезапускаем проверку системы

    После изменения и сохранения файлов необходимо перезапустить проверку системы. После окончания проверки в поле «Кодировка таблиц в БД» будет ошибка с большим количеством неправильных кодировок таблиц (Рисунок 9).

    Что делать?

    Автоматически их исправить нельзя, поэтому нужно открыть журнал проверки. Сделать это можно путем клика на символ знака вопроса рядом с текстом ошибки (отмечен оранжевым на рисунке 9).

    Большое количество ошибок по кодировкам таблиц
    Рисунок 9 – Большое количество ошибок по кодировкам таблиц

    Для их исправления нужно писать SQL-запросы для каждой таблицы, но так как таблиц очень много, то исправлять их вручную будет очень долго. Можно пойти двумя вариантами:

    • C помощью текстовых редакторов найти все названия таблиц и самостоятельно сформировать нужные SQL-запросы;
    • Воспользоваться нашим конвертером, который выдаст нужные SQL-запросы.

    Если воспользовались нашим конвертером, то просто копируем полученные запросы и вставляем их на странице «SQL-запрос» в админ панели.

    Примечание: Если запросов много (более 500), то может возникнуть такая ситуация, что сервер не сможет обработать их все за один раз и выдаст ошибку со статусом 502 или 504 (под полем ввода SQL-запросов). В таком случае просто поделите все запросы на группы по 150-250 штук – с таким количеством обычно справляются все сервера.

Возможная проблема: ошибка дублирования элемента

Если у вас на сайте есть поиск, то может возникнуть ошибка по дублированию элемента в таблицах (Рисунок 10). Если это таблица «b_search_stem», то можно ее полностью очистить. Это таблица индексирования поиска и популярных запросов.

Ошибка по дублированию элементов
Рисунок 10 – Ошибка по дублированию элементов

Чтобы очистить эту таблицу, необходимо удалить вставленные ранее запросы, написать такой SQL-запрос:

				DELETE FROM `b_search_stem`;

И выполняем его. Видим подтверждение успешного выполнения запроса. Заново вставляем все запросы, скопированные из конвертера. Теперь при выполнении всех запросов должно все быть хорошо.

  1. Проверяем структуру базы данных

    Идем снова на страницу проверки системы и запускаем снова проверку. После окончания проверки получаем сообщение об ошибках в структуре базы данных (Рисунок 11).

    Ошибки в структуре базы данных
    Рисунок 11 – Ошибки в структуре базы данных

    Снова открываем журнал проверки системы через символ знака вопроса, находим строку, у которой статус «Fail». Под ней будут написаны готовые SQL запросы, которые нужно будет выполнить на странице «SQL-запрос». Копируем их и выполняем.

    После выполнения всех команд заново запускаем проверку системы и убеждаемся, что ошибок больше никаких нет (Рисунок 12).

    Успешное исправление всех ошибок
    Рисунок 12 – Успешное исправление всех ошибок

Заключение

Переход на MySQL 8 может показаться сложным и пугающим, особенно когда сталкиваешься с неожиданными ошибками. Но если действовать поэтапно и внимательно, можно избежать большинства проблем.

Не хотите разбираться со всеми этими нюансами самостоятельно?

Мы готовы помочь! Наша команда специалистов по разработке и продвижению сайтов имеет большой опыт в работе с MySQL и 1С-Битрикс. Мы быстро и безопасно проведём все необходимые обновления, а вы сможете сосредоточиться на развитии своего бизнеса.

Свяжитесь с нами прямо сейчас, и мы сделаем ваш переход на MySQL 8 максимально комфортным и безболезненным. Пусть технологии работают на вас, а не наоборот!

eye

107 просмотров

Оценить:

3

Смотреть все публикации

Вопрос к эксперту стрелка

Не нашли ответ на свой вопрос?
Задайте его нашему эксперту!

При публикации ответа E-mail опубликован не будет

result-icon

Отлично!

Наши эксперты ответят на Ваш вопрос в ближайшее время.

изображение формы

Ответы на вопросы

Тут пока пусто...

...но мы ждем ваши вопросы

MediaMint
Россия
Московская область
Королев
ул. Подмосковная, д.7
+7 (499) 444-25-70

ОШИБКА: Не задан URL картинки (заполните свойство Ссылка на картинку или Ссылка на миниатюру)

Блог веб-студии "MediaMint"

Статьи о разработке и создание продающих сайтов, а также про их продвижение в SEO и контекстной рекламе

MediaMint
Веб-студия MediaMint - разработка и создание авторских сайтов и на готовых решениях Битрикс, продвижение SEO и ведение контекстной рекламы, техническая поддержка сайтов и разработка интернет-магазинов и лендингов.
Россия
Московская область
Королёв
ул. Подмосковная, д.7
+7 (499) 444-25-70

Как вам удобнее начать общение по проекту?

Оставьте ваш номер, и мы перезвоним

Нажимая кнопку Оставить сообщение, вы соглашаетесь на обработку персональных данных

result-icon

Отлично!

Заявка отправлена! В скором времени с Вами свяжется наш эксперт.

Оставьте ваш номер, и мы перезвоним

Как с вами лучше связаться?

Нажимая кнопку Заказать звонок, вы соглашаетесь на обработку персональных данных

result-icon

Отлично!

Заявка отправлена! В скором времени с Вами свяжется наш эксперт.

Мы используем куки

Мы используем файлы cookie, чтобы обеспечить вам наилучшую работу на нашем веб-сайте.