Ответы на вопросы
Тут пока пусто...
...но мы ждем ваши вопросы
Если вы когда-либо занимались обновлением серверного ПО, то знаете, что это похоже на ремонт двигателя на ходу. Особенно когда речь идет о переходе на новую версию базы данных, такую как MySQL 8. Вроде бы обновление должно принести только преимущества: повышенную производительность, новые возможности, улучшенную безопасность. Но на практике всё не так просто.
В этой статье вы узнаете о том, какие проблемы могут возникнуть при переходе на MySQL 8 и как их избежать, чтобы ваш сайт на 1С-Битрикс продолжал работать без сбоев.
После окончания тестирования системы будет сформирована таблица с отчетом. Нас интересует раздел «Тестирование базы данных». В строке «Кодировка базы данных» будет ошибка (Рисунок 2). Вариации ошибок могут быть разными:
Это связано с тем, что с последними обновлениями главного модуля (ядра) CMS «1С-Битрикс: Управление сайтом» требует кодировку сравнения utf8mb4 для системы управления базами данных MySQL, а не utf8mb3, как это было раньше.
Важно! Перед исправлением ошибок очень рекомендуем сделать резервную копию сайта вместе с базой данных, чтобы восставить её в случае неудачного устранения ошибок. Подробнее о создании резервной копии можно почитать в документации Bitrix: https://dev.1c-bitrix.ru/learning/course/?COURSE_ID=35&LESSON_ID=5330
В первую очередь нужно узнать имя базы данных для вашего сайта. Сделать это можно через файл настроек системы «.settings.php» (полный путь к файлу: корень_сайта/bitrix/.settings.php). В тексте этого файла нужно найти раздел «connections», в нём поле «database» (отмечен красным на рисунке 3). В этом поле будет указано название базы данных. Копируем это название и сохраняем куда-нибудь в ближайшей доступности, например, в блокнот.
Если в ошибке кодировки базы данных указана любая другая, не содержащая слова uft8mb4, кодировка, её нужно сменить на правильную. Сделать это можно двумя способами:
Переходим на страницу «SQL запрос». Удобнее всего это сделать через поиск в правой верхней части админ-панели (Рисунок 4).
На открывшейся странице в поле ввода SQL-запроса вставляем такой запрос (косые кавычки необходимо оставить) и нажимаем кнопку «Выполнить запрос», после чего подтверждаем действие:
ALTER DATABASE `имя_вашей_базы_данных` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Рассмотрим процесс смены кодировки для базы данных на примере хостинга Timeweb.
Заходим в панель управления хостигом, в раздел «Базы данных», открываем phpMyAdmin (отмечен красным на рисунке 5).
В левом меню в списке баз данных ищем ту, которая используется для сайта (Рисунок 6). Кликаем на её название.
Перед вами откроется список таблиц базы данных. Далее в верхней панели инструментов нужно перейти на вкладку «Операции» (Рисунок 7).
На вкладке «Операции» находим настройку схемы сравнения (Рисунок 8), устанавливаем utf8mb4_general_ci. Галочку «Изменить сортировки всех таблиц» оставляем неотмеченной, жмем кнопку «Вперёд» в этом блоке.
После изменения кодировки базы данных нужно отредактировать файлы подключения к базе данных. Они располагаются в папке /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"');
После изменения и сохранения файлов необходимо перезапустить проверку системы. После окончания проверки в поле «Кодировка таблиц в БД» будет ошибка с большим количеством неправильных кодировок таблиц (Рисунок 9).
Что делать?
Автоматически их исправить нельзя, поэтому нужно открыть журнал проверки. Сделать это можно путем клика на символ знака вопроса рядом с текстом ошибки (отмечен оранжевым на рисунке 9).
Для их исправления нужно писать SQL-запросы для каждой таблицы, но так как таблиц очень много, то исправлять их вручную будет очень долго. Можно пойти двумя вариантами:
Если воспользовались нашим конвертером, то просто копируем полученные запросы и вставляем их на странице «SQL-запрос» в админ панели.
Если у вас на сайте есть поиск, то может возникнуть ошибка по дублированию элемента в таблицах (Рисунок 10). Если это таблица «b_search_stem», то можно ее полностью очистить. Это таблица индексирования поиска и популярных запросов.
Чтобы очистить эту таблицу, необходимо удалить вставленные ранее запросы, написать такой SQL-запрос:
DELETE FROM `b_search_stem`;
И выполняем его. Видим подтверждение успешного выполнения запроса. Заново вставляем все запросы, скопированные из конвертера. Теперь при выполнении всех запросов должно все быть хорошо.
Идем снова на страницу проверки системы и запускаем снова проверку. После окончания проверки получаем сообщение об ошибках в структуре базы данных (Рисунок 11).
Снова открываем журнал проверки системы через символ знака вопроса, находим строку, у которой статус «Fail». Под ней будут написаны готовые SQL запросы, которые нужно будет выполнить на странице «SQL-запрос». Копируем их и выполняем.
После выполнения всех команд заново запускаем проверку системы и убеждаемся, что ошибок больше никаких нет (Рисунок 12).
Переход на MySQL 8 может показаться сложным и пугающим, особенно когда сталкиваешься с неожиданными ошибками. Но если действовать поэтапно и внимательно, можно избежать большинства проблем.
Не хотите разбираться со всеми этими нюансами самостоятельно?
Мы готовы помочь! Наша команда специалистов по разработке и продвижению сайтов имеет большой опыт в работе с MySQL и 1С-Битрикс. Мы быстро и безопасно проведём все необходимые обновления, а вы сможете сосредоточиться на развитии своего бизнеса.
Свяжитесь с нами прямо сейчас, и мы сделаем ваш переход на MySQL 8 максимально комфортным и безболезненным. Пусть технологии работают на вас, а не наоборот!
107 просмотров
Тут пока пусто...
...но мы ждем ваши вопросы