Перейти к содержимому

Mysql debug sql bitrix как отключить

  • автор:

Некоторые приёмы работы в Битрикс на SQL и BASH

Я продолжаю писать о Битриксе в контексте обменов, Mysql и командной строки Linux.

Эта статья является вводной к серии статей о структуре базы данных Битрикс, где эта тема будет раскрыта достаточно подробно. Для начала же будут представлены решения некоторых небольших, но назойливых задач. Как всегда, знание SQL обязательно.

В статье рассматриваются довольно частные вопросы, которые не возникают ежедневно. Конечно, вы можете использовать эти материалы по их прямому назначению, но главная цель статьи не в этом. Я начинаю вскрывать «чёрный ящик» под названием «структура базы данных битрикс», и показывать, что эти знания могут пригодиться для повышения уровня владения как системой, так и базовыми технологиями (SQL, linux shell), что, конечно, помогает решать новые, сложные, интересные, разнообразные задачи.

Страница, с которой можно делать SQL запросы в базу, или mysql web клиент битрикс, находится в панели управления Битрикса по пути: «Настройки->Инструменты->SQL запрос».

Также, конечно, можно делать запросы из командной строки операционной системы, для чего могу предложить вам несложную операцию извлечения логина и пароля прямо из настроек Битрикса:

log=$(grep -i "login" /home/bitrix/www/bitrix/php_interface/dbconn.php | cut -f2 -d'"') pas=$(grep -i "pass" /home/bitrix/www/bitrix/php_interface/dbconn.php | cut -f2 -d'"') mysql -u$log -p$pas $log 

— таким образом можно получить логин и пароль к базе данных Mysql Bitrix из командной строки linux на bash. Пути, конечно же, заменяйте на ваши собственные. В варианте, предоставляемом виртаульной машиной Битрикс, DOCUMENT_ROOT выглядит как /home/bitrix/www/.

1. Настройка «Избранного» для всех пользователей панели управления Bitrix сразу.

Когда вводится новый сайт, разработчику не хочется объяснять каждому, кто добавляет новости или редактирует страницы, что нужно нажать, чтобы попасть в новости или каталог товаров. Лучше вывести ссылки прямо на стартовую страницу панели управления битрикс, тем более, что в битриксе «рабочий стол» в админке для этого и предназначен.

Если настройки так называемого «рабочего стола» можно распространить на всех, кто зайдёт в админку Битрикса, то колонку «Избранное» пользователь заполняет только для себя. Это логично, но обычно пользователи пренебрегают такой возможностью, поэтому сделаем эту работу за них.

К тому же, не всё можно поместить на «Рабочий стол», а в «Избранное» можно добавить всё, что угодно, даже ссылку на сторонний ресурс, например, на почту или тикеты службы техподдержки другой системы.

Заполнить блок «Избранное» в админке битрикса именно для всех контент-менеджеров панель управления не позволяет: нет такой кнопочки. Поэтому, вначале добавим нужные ссылки в блок «Избранное» для себя.

Узнайте ваш ID пользователя. Если вы под администратором (admin) в панели управления, то ваш ID пользователя =1.

Очевидно, эти данные относятся к пользователю, и первый взгляд бросается на таблицы, начинающиеся с b_user_, которых в базе Битрикса с десяток. Однако, нужная нам таблица не имеет такого префикса и называется b_favorites.

Эта таблица содержит поле COMMON, которое для всех записей имеет значение ‘N’. Как обнаруживается, функция показа избранного для всех пользователей есть, и поле COMMON в таблице b_favorites полностью оправдывает своё наименование.

update b_favorite set common='Y' where user_id=1;

Нам даже не нужно дублировать записи администратора для всех пользователей (а как тогда было бы с вновь заводимыми администраторами сайта. Делать mysql триггер. Заводить событие. ). Теперь все пользователи админки Bitrix видят те же самые «Избранные», что и вы. Задача решена.

2. Как сменить логин и пароль пользователя битрикс через базу данных. Как сбросить пароль администратора Bitrix.

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

Основные данные всех пользователей хранятся в таблице b_user. Вам нужно знать ID пользователя в системе Битрикс.

Установка собственного логина и пароля Bitrix средствами Mysql

Пароль хранится в базе в виде:

Говорят, они что-то ещё изменили, но если вы сделаете так, то оно будет работать.

update b_user set login='su',password=concat('12345678',md5('12345678stupidpassword')) where >

где
su — новый логин пользователя
12345678 — соль
stupidpassword — новый пароль пользователя
— id пользователя (если admin, то =1)

Пароль битрикс сброшен, задача решена. Заодно, вы можете изменить и логин.

Копирование пароля от другого пользователя

И второй, очень простой, способ сброса пароля в битрикс.

На этот раз, нам нужно просто перенести хеш пароля от одного пользователя к другому. Конечно, нужно знать ID обоих пользователей в bitrix, в данном случае пользователю с мы устанавливаем пароль от пользователя с

update b_user b1 inner join b_user b2 on b2.id=36 set b1.password=b2.password where b1.id=895;

3. Применение настройки полей в редактировании заказа в Bitrix админке для всех пользователей.

В некоей доменной зоне второго уровня, на некотором сайте, в административной панели системы управления Битрикс располагается страница редактирования заказа интернет-магазина, в заголовке таблицы товаров которой есть кнопка настройки в виде шестерёнки, и бывает эта кнопка то синяя, то серая…

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

Чтобы применить эти настройки ко всем пользователям панели управления битрикса, а не объяснять каждому, «нажмите маленькую кнопочку в заголовке таблицы с товарами, видите список свойств… Выберите нужные вам. », выставим настройки через базу.

Эти настройки хранятся в таблице b_user_option, которые сопоставлены определённому пользователю посредством поля user_id. Но есть одна особенность: если user_id=0, то свойство — глобальное, и применяется для всех пользователей.

update b_user_option set user_id=0 where name='table_columns' and category='order_basket_table' and user_id=1

где user_id=1 — ID пользователя, под которым вы настраивали таблицу товаров. Если это admin, то решена: Теперь ваши настройки таблицы товаров работают у всех сразу.

4. Сортировка результатов поиска в битрикс по собственному алгоритму.

Если речь идёт о поиске по сайту, основной таблицей для модулей поиска в битриксе является b_search_content.

Интересные поля таблицы b_search_content:

custom_rank — поле, по которому сортировка работает прежде всех остальных полей
param1 — код инфоблока
param2 — номер инфоблока
module_id — =’iblock’
item_id — id элемента или раздела
— для поиска в инфоблоках.

Прежде всего нас интересует поле custom_rank.

Если в предыдущих случаях мы пользовались предусмотренными, но нереализованными возможностями Битрикс, то для этого поля в панели управления специальная «галочка» есть. Но выставляется она отдельно для каждого элемента, и обычно этой возможностью не пользуются.

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

В моём случае, при поиске товаров в каталоге интернет-магазина, реализованном на решении разработчика romza, нужно было вначале выводить те товары, у которых была установлена некая специальная галочка, которая являлась «свойством», соответствующим наличию товара в определённой торговой точке. Прилетало всё это добро с инкрементальной загрузкой из 1С, поэтому данный SQL запрос был повешен на событие окончания обмена с 1С.

update b_search_content sc inner join b_iblock_element_property elp on elp.iblock_element_id=sc.item_id and elp.iblock_property_id= set sc.custom_rank=if(elp.value=,,0) where sc.param1='' and sc.param2=

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

Сейчас же, за счёт того, что запрос идёт вначале по таблице b_iblock_element_property, а не b_iblock_element, которая является основной для хранения элементов инфоблоков, мы отбираем только те элементы, у которых нужное свойство вообще есть, и если оно равно нужному значению, то поднимается custom_rank, в противном случае, он сбрасывается в ноль.

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

Как быстро почистить кеш в битрикс.

«И на footer.php»: Очистка кеша в битрикс через панель управления происходит очень медленно. На самом деле, идёт всего лишь удаление файлов в определённых директориях, просто это делается медленными средствами. Сделаем специальный файл для очистки кеша в битрикс в командной строке linux.

cd /home/bitrix/ cat clearcache.sh #!/bin/bash cd $( dirname $0 ) basedir=$(pwd)/www/bitrix/ for d in cache managed_cache; do find $basedir$d -mindepth 1 -delete done EOF chmod 0775 clearcache.sh 

Теперь вы можете запустить ./clearcache.sh, и кеш битрикса очистится практически мгновенно.

Скрипт этот должен лежать на одну директорию выше, чем DOCUMENT_ROOT вашего сайта. Хотя, вы можете изменить как место его нахождения, так и код, суть в том, что мы должны удалить все файлы из директорий:

cache
managed_cache
stack_cache — раньше была ещё эта директория, но в последних версиях я её не наблюдаю, поэтому сейчас без неё.

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

В виртаульной машине Битрикс DOCUMENT_ROOT равен /home/bitrix/www/, если же у вас сайт установлен в другую директорию, скорректируйте скрипт согласно вашим путям.

  • PHP
  • 1С-Битрикс
  • Разработка под Linux

Ошибки при работе с 1С-Битрикс

Если после переноса вы видите на главной странице вместо новостей форму для авторизации и все пункты меню отмечены значком замка:

… и после авторизации все отображается правильно — перейдите в административную панель Битрикс и пройдите по пути: Настройки (Settings) → Настройки продукта (System settings) → Сайты (Sites) → Список сайтов (List of sites), выберите ваш сайт и проверьте значение поля «Путь к корневой папке веб-сервера для этого сайта (Path to the web server root folder of this site)», скорее всего там указан неправильный путь.

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

Если у вас возникли сложности, не описанные здесь, напишите нам на support@vmco.ru

При входе в административный интерфейс возникает сообщение об ошибке «Кодировка используемой вами базы данных MySql “utf8”, системе обновлений необходима кодировка “cp1251”. Обратитесь к администратору MySql для выполнения запроса alter database DATABASE_NAME default character set cp1251»

По умолчанию все сервисы виртуальной машины VMBitrix работают в кодировке UTF-8. По сравнению с кодировкой CP1251 (Windows-1251) UTF-8 предоставляет большие возможности по хранению информации на различных языках, подробнее можно узнать в Wikipedia.

Если по каким-либо причинам вы не можете перейти на использование UTF-8 — выполните указанный запрос самостоятельно.

Для этого перейдите в административный раздел Битрикс и пройдите по пути Настройки (Settings) → Инструменты (Tools) → SQL запрос (SQL query), скопируйте и вставьте запрос из сообщения об ошибке и выполните его.

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

Если у вас возникли сложности, не описанные здесь, напишите нам на support@vmco.ru

Зависает переиндексация статических файлов сайта

При попытке обновить поисковый индекс вашего сайта процесс зависает (длится очень долго и статус уже переиндексированных документов не обновляется). Если производить переиндексацию по отдельным модулям — зависание происходит только при выборе модуля «Статические файлы».

Для решения проблемы необходимо изменить параметры mbstring в файле /etc/php.ini:

mbstring.func_overload = 0 mbstring.internal_encoding = CP1251

и перезапустить web-сервер Apache чтобы новые параметры вступили в силу:

/etc/init.d/apache2 restart

Если у вас возникли сложности, не описанные здесь, напишите нам на support@vmco.ru

На любой странице сайта возникает ошибка:

The script encountered an error and will be aborted. To view extended error messages, enable this feature in .settings.php.

В новом ядре Битрикс, настройка параметров производится в файле bitrix/.settings.php (обратите внимание, что имя файла начинается с точки). Ранее, для этих задач использовался файл bitrix/php_interface/dbconn.php.

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

Поэтому первым делом, необходимо войти на сервер (по SSH или sFTP) и отредактировать файл bitrix/.settings.php. В нем следует найти строчку:

'debug' => false,

и изменить значение параметра debug на true, то есть строка должна принять вид:

'debug' => true,

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

Болле подробное описание всех параметров файла .settings.php есть на сайте разработчика.

Если у вас возникли сложности, не описанные здесь, напишите нам на support@vmco.ru

На любой странице возникает ошибка:

DB query error. Please try later.

Эта ошибка абсолютно аналогична описанной выше, но возникает только в старом ядре Битрикс. Для включения вывода полного сообшения об ошибке войдите на сервер (по SSH или sFTP) и отредактируйте файл bitrix/php_interface/dbconn.php. В нем найдите строчку:

$DBDebug = false;

и измените значение переменной $DBDebug на true, то есть строка должна принять вид:

$DBDebug = true;

После этого, при обращении к странице с ошибкой, вы увидите полное сообщение об ошибке. После исправления ошибки, не забудьте вернуть параметр $DBDebug в изначальное значение.

Если у вас возникли сложности, не описанные здесь, напишите нам на support@vmco.ru

На сайте возникает ошибка:

Mysql connect error [localhost, 127.0.0.1]: Can't connect to local MySQL server through socket '/var/lib/mysqld/mysqld.sock' (2) (400)

Данная ошибка означает, что сервер баз данных MySQL не доступен. Это может произойти в ряде случаев и зачастую требуется отдельный анализ ситуации для выявления точной причины. Но в большинстве случаев эта ошибка возникает из-за следующих проблем:

Нехватка оперативной памяти.

Если при разработке проекта не рассчитывалась большая нагрузка (со стороны пользователей или объема обрабатываемых данных), или при разработке была допущена ошибка, или параметры MySQL и Apache не оптимальны для проекта, то при всплеске активности может возникнуть переполнение оперативной памяти (RAM). В этом случае, операционная система, для поддержания собственной безопасности, принудительно завершает работу самого объемного процесса (для web-серверов это как правило именно MySQL). В этом случае, в системном журнале /var/log/syslog и на консоли сервера (доступ к которой можно получить в панели управления vCenter) будет содержаться сообщение вида:

kernel: Out of memory: Kill process 1543 (mysqld) score 146 or sacrifice child

Сервер не может стартовать из-за ошибки в конфигурации.

Если у вас возникли сложности, не описанные здесь, напишите нам на support@vmco.ru

Возникает ошибка любого MySQL запроса вида:

MySQL Query Error: SELECT … FROM … [Got error 28 from storage engine]

Ошибка может содержать любой SELECT, INSERT или UPDATE запрос, но при этом обязательно заканчивается уточнением Got error 28 from storage engine. Причиной ошибки является переполнения жесткого диска (HDD)

В этом случае, войдите на сервер по SSH и выполните команду df -h:

# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 9.6G 9.2G 0 100% / tmpfs 250M 0 250M 0% /dev/shm /dev/sda1 118M 102M 9.1M 92% /boot

Основной раздел, в примере /dev/sda2 (так как он наибольший, что видно по колонке Size, и точка монтирования у него — корневая директория Mounted on /) используется на 100%

Для восстановления работы следует удалить более ненужные данные с диска или увеличить дисковое пространство.

Если у вас возникли сложности, не описанные здесь, напишите нам на support@vmco.ru

  • Общие вопросы
  • Вопросы по 1С-Битрикс
  • Ошибки при работе с 1С-Битрикс
  • Поддержка почты домена

Почему VM

Виртуальные машины — это свобода:

  • Свобода выбора OS и того, что в ней содержится.
  • Свобода выбора конфигурации.
  • Свобода от ограничений физических серверов, от их поломок и простоев.
  • другие причины…

Почему мы

  • Мы давно и успешно работаем в телекоммуникационном бизнесе. Мы накопили огромный опыт и умеем его применять. Мы знаем все об ошибках, которые не нужно совершать.
  • Мы не экономим на качестве: мы покупаем лучшее оборудование и не занимаемся «уплотнением». Мы сами пользуемся нашей услугой и следим за тем, чтобы все было идеально.

Создание базы через ISPmanager

Панель управления ISPmanager значительно упрощает управление СУБД и базами данных. На корректно работающем VDS создание базы займет не больше 5 минут.

В левом меню ISPmanager переходим в раздел Базы данных и нажимаем Создать базу данных.

Заполняем необходимые поля: имя БД, владелец БД (должен совпадать с владельцем сайта), сервер БД, кодировка БД, после чего создаем нового пользователя БД (либо выбираем существующего) и задаем пароль. Рекомендуем создавать сложные пароли.

Подробнее о создании Базы данных можно узнать в отдельной статье.

Теперь немного о тех местах, где могут возникнуть сложности.

Раздела «Базы данных» нет в меню

Есть 2 возможных варианта решения проблемы:

1. На сервере не запущен сервер баз данных MySQL

Проверить, активен ли сервис, вы можете в разделе Мониторинг и журналы панели ISPmanager. Попробуйте запустить или перезапустить службу mariadb (в ОС CentOS и Debian) или mysql (в ОС Ubuntu) с помощью кнопок в панели.

Если не помогло, перезапустите из консоли командой systemctl restart mysql для Ubuntu/Debian или командой systemctl restart mariadb для Centos 7.

2. Проблемы с подключением к базе данных

Перейдите в раздел Серверы БД, двойным кликом откройте свойства и нажмите Сохранить, ничего не меняя. Это принудительно обновит информацию о MySQL в панели управления. После этого обновите страницу — раздел Базы данных должен появиться.

Не подходит пароль к серверу баз данных

Случается так, что пароль root от MySQL-сервера утерян и надо установить новый. Делается следующим образом:

В Debian/Ubuntu:

# systemctl stop mysql
# systemctl stop mariadb
# systemctl stop mysqld

Запускаем его без проверки таблиц прав:

# mysqld_safe --skip-grant-tables &

Заходим root’ом без пароля:

# mysql -uroot
# use mysql;
# UPDATE user SET Password=PASSWORD("new_password") WHERE User='root';
# UPDATE user SET authentication_string=PASSWORD("new_password") WHERE User='root';

Проверить версию MySQL можно с помощью команды:

# mysql –version
# mariadb –version

Продолжаем для всех версий

# FLUSH PRIVILEGES;

В Debian/Ubuntu:

# systemctl restart mysql
# systemctl restart mariadb
# systemctl restart mysqld

Авторизуемся как root с паролем new_password

# mysql -uroot -p

После вводим новый пароль.

Где искать ошибки?

MySQL — свободная реляционная система управления базами данных. Поиск проблем с сервисом лучше всего начинать с изучения логов. Для этого необходимо подключиться на сервер по SSH. Их расположение разнится в зависимости от используемой файловой системы. В конфигурационном файле my.cnf нужно искать строки log и log-error , чтобы определить, где находятся логи. Также можно воспользоваться mysql запросом:

show variables like '%log%';

Если логирование не включено, сделать это можно следующим образом. Зайти в файл:

/etc/my.cnf #Centos /etc/mysql/my.cnf #Debian /etc/mysql/mysql.conf.d/mysql.cnf #Ubuntu

Расположение конфигурационного файла может отличаться в зависимости от дистрибутива или CMS.

И в секцию [mysqld] добавить строку:

log-error=/var/log/mysql-errors.log

Выйти из файла, выполнить команды:

touch /var/log/mysql-errors.log chown mysql:mysql /var/log/mysql* chmod 640 /var/log/mysql*

Следующая команда включит просмотр созданного лога в режиме реального времени(tail –f) и оставить его в фоне(&) что бы можно было параллельно запускать другие команды:

tail –f /var/log/mysql-errors.log &

Данная команда позволяет проводить действия с БД или сайтов и одновременно смотреть на ошибки в логе. Чтобы остановить команду, нажмите Ctrl+C .

Перечень возможных проблем

Table ‘./site/content’ is marked as crashed and should be repaired

Такое сообщение может появиться в логах или на сайте. Оно означает, что таблица одной из БД «побилась» и требуется ее восстановление. Необходимо подключится на сервер по SSH, выполнить команду, которая проверит все базы данных на предмет ошибок

mysqlcheck —repair —analyze —optimize —all-databases -u –p

Если эта команда выдаёт ошибку, вставьте ключи раздельно:

mysqlcheck —repair —all-databases -u –p mysqlcheck —analyze —all-databases -u –p mysqlcheck —optimize —all-databases -u –p

  • — имя пользователя базы данных или root,
  • — заменить на пароль пользователя или root от MySQL (его можно посмотреть в ISPmanager — Базы данныхСерверы БД — двойной клик на сервер MySQL для просмотра пароля root (либо Базы данных — двойной клик на нужную базу данных и двойной клик на нужного пользователя).

Либо можно выполнить исправление конкретной базы данных:

mysqlcheck —repair —analyze —optimize -u -p

  • — имя пользователя базы данных или root,
  • — заменить на пароль пользователя или root от MySQL (его можно посмотреть в ISPmanager — Базы данныхСерверы БД — двойной клик на сервер MySQL для просмотра пароля root (либо Базы данных — двойной клик на нужную базу данных и двойной клик на нужного пользователя),
  • — база данных, которой требуется исправление.

mysql_connect() [function.mysql-connect]: Access denied for user ‘user_xxx’@’localhost’ (using password: YES)

Чаще всего связана с тем, что в настройках сайта указаны не верные данные (логин и/или пароль) для подключения к базе. Вариант решения: посмотреть в админ-панели сайта данные пользователя, пароль и название базы для подключения к базе. Зайти в ISPmanager — Базы данных — кликнуть на базу, затем на пользователя и в графу Пароль поставить пароль из админ-панели.

Может быть обратная ситуация, когда в панели ISPmanager указаны верные данные, а в конфигурационных файлах указаны неверные. В таком случае нужно править конфигурационные файлы, для CMS Bitrix, например, это /bitrix/.settings.php и /bitrix/php_interface/dbconn.php .

На сайте ошибка «Не удалось подключиться к базе данных»

В зависимости от используемой CMS эта ошибка может по-разному выглядеть:

Возникла ошибка при подключении сервера баз данных MySQL Can't connect to local MySQL server Error connect to mysql Unable to connect to the database:Could not connect to .

Подключится на сервер по SSH, выполнить:

systemctl restart mysql #перезапуск MySQL для Ubuntu, Debian systemctl restart mariadb #перезапуск MySQL для Centos 7 ps axuw | grep mysql #Эта команда должна вывести список процессов MySQL. #Если ничего не вывела – значит, MySQL не запустился.

Убедится что в ISPmanager, в разделе Службы лампочка mysql или mariadb горит.

В панели ISPmanager не удается создать базу данных, ошибка «Недостаточно данных»

Это значит у вас в ISPmanagerСерверы БД не создано ни одного сервера баз данных. Для создания нажмите на Серверы БД, далее на Создать сервер. В полях введите название сервера БД (например, MySQL), придумайте имя пользователя и пароль. Также в панели ISPmanager можно установить более 1 СУБД, альтернативные СУБД будут работать в контейнерах Docker.

MySQL не запускается ни в сервисах, ни через консоль

При запуске через консоль ошибки могут быть вида:

cant connect to local mysql server throught socket /var/run/mysqld/mysql.d.sock /etc/init.d/mysql start Starting MySQL database server: mysqld . . . . . . . . . . . . . . failed! /usr/local/etc/rc.d/mysql-server restart mysql not running? (check /var/db/mysql/peroksid.ispvds.com.pid). Starting mysql.

Проверить свободное место на диске:

df –h #общая информация du –hs /* #сколько занимает конкретные папки

Если не осталось места, удалить ненужные файлы.

Частая ситуация, когда логи сайтов разрастаются и места на диске свободного не остается, MySQL не может нормально работать (справедливо и для всех остальных сервисов – apache, exim и т.д.)

Снова пробуем перезапустить MySQL:

systemctl restart mysql #перезапуск MySQL для Ubuntu и Debian systemctl restart mariadb #перезапуск MySQL для Centos 7

Если проблема не со свободным местом, в логах должны появиться записи, похожие на эти:

130929 06:16:05 mysqld_safe Starting mysqld daemon with databases from /var/db/mysql 130929 6:16:05 [Warning] '--skip-locking' is deprecated and will be removed in a future release. Please use '--skip-external-locking' instead. 130929 6:16:05 [Warning] option 'max_allowed_packet': unsigned value 5824839680 adjusted to 1073741824 Unknown suffix '-' used for variable 'sort_buffer_size' (value '--read_buffer_size=256K') 130929 6:16:05 [Warning] option 'sort_buffer_size': unsigned value 0 adjusted to 32776 130929 6:16:05 [ERROR] /usr/local/libexec/mysqld: Error while setting value '--read_buffer_size=256K' to 'sort_buffer_size' 130929 6:16:05 [ERROR] Aborting

Смотрим записи с меткой [ERROR]. В логе выше ошибка «Error while setting value ‘—read_buffer_size=256K’ to ‘sort_buffer_size’» означает, что в конфиге my.cnf неверно прописана директива ‘sort_buffer_size. Этот случай приведен только для примера. В каждом конкретном случае лог будет различаться. Ошибки могут быть самые разные. Дальнейшие действия зависят от конкретной ошибки и требуют детального разбирательства.

Решение проблем с кодировками MySQL

Чтобы решить проблему — достаточно понять логику работы. MySQL, начиная с версии 4.1, знает, что такое кодировки и как с ними работать. Если до 4.0 она работала с байтами, то теперь работает с символами.

MySQL написали шведы, поэтому кодировкой по умолчанию (сразу после установки) является latin1, а «сравнение» (последовательность букв, алфавит; влияет на сортировки) — latin1_swedish.

Итак, где кодировки указываются.

1. Кодировка конкретной базы/таблицы/столбца. Это кодировка, в которой MySQL будет хранить данные. Например, если у вас данные в cp1251, то будет большой ошибкой указывать для хранения кодировку latin1. В ней нет соответствий для русских символов, все они будут заменены на вопросы.

Кодировку хранения можно задать, например, так.В терминале открываем MySQL с помощью команды mysql или mysql -u имя_пользователя -p , вводим пароль, после чего пишем в консоли MySQL:

create database `имя базы` default charset cp1251;

Если кодировка не указана — будет использовано значение параметра default-character-set из файла /etc/my.cnf (либо latin1, если параметра нет). Кстати, именно этот параметр редактирует ISPmanager в свойствах сервера баз данных.

2. Кодировка соединения. Это кодировка, в которой клиент (скрипт пользователя, форум, mysql-клиент и т.д.) общается с MySQL. Когда клиент подсоединяется к серверу, тот ему сообщает значение параметра default-character-set . Таким образом они договариваются о том, в какой кодировке будут общаться. Кодировку общения можно изменить запросом (его лучше выполнять сразу после соединения с сервером):

set names cp1251

где вместо cp1251 вы можете указать нужную кодировку.

Кстати, множество современных правильных скриптов именно это и делают.

Одна сложность: есть ряд кривых клиентов, которые всего этого не понимают и общаются в какой-то своей кодировке. Персонально для них можно написать в /etc/my.cnf , секцию [mysqld] :

[mysqld] set init_connect="set names utf8"

где вместо utf8 вы можете указать нужную кодировку.

Что это означает? Сразу после подсоединения любого клиента, MySQL выполнит запрос set names utf8 , как будто смену кодировки общения запросил сам клиент.

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

phpMyAdmin, mysqldump — обычные клиенты, на них действуют те же самые правила. Одно «но»: на все PHP-скрипты (включая phpMyAdmin) действует default-character-set из секции [client] в my.cnf . Для mysqldump есть отдельная секция [mysqldump] . Часто бывает так, что команда mysqldump «не видит» секцию [mysqldump] , поэтому в случаях, когда необходимо делать дамп БД в определенной кодировке, лучше использовать mysqldump с параметром —default-character-set=utf8 (вместо utf8 укажите нужную кодировку). ISPmanager прописывает default-character-set во все секции.

Дамп базы — это обычный набор MySQL-команд. Если вы в самое его начало напишете set names cp1251; , то эта команда тоже выполнится, и MySQL будет считать, что дальше все данные в дампе идут в кодировке cp1251.

Кодировки в MySQL-командах пишутся без кавычек и без «-» (дефисов). Популярные в России кодировки: utf8, cp866 (DOS), cp1251 (windows-1251), koi8r, utf8mb4.

И, наконец, пара советов:

  • Если вы в этом новичок, постарайтесь свести всё к одной кодировке. Пусть у вас дамп и default-character-set (напомню, влияет на кодировку хранилища при создании таблиц и на кодировку общения с клиентом) будет в одной кодировке. Это избавит от путаницы и решит 90% проблем.
  • Если есть возможность — используйте консольную утилиту mysqldump. phpMyAdmin — это дополнительная прослойка, которая лишь добавляет свою путаницу и свои баги.

Русификация MySQL

Чтобы русифицировать базу данных MySQL, не вдаваясь в подробности почему и как, проделайте следующие процедуры:

1. В конфигурационном файле /etc/my.cnf добавьте следующие строчки:

Под разделом [client]:

default-character-set=cp1251

Под разделом [mysqld]:

character-set-server=cp1251 collation-server=cp1251_general_ci init-connect = "set names cp1251"

2. После этого перезапустите базу MySQL или весь ваш виртуальный сервер (из ISPmanager или консоли).

Ошибки баз данных (mysql) и методы решений

Обратите внимание: при редактировании файлов баз данных сторонними программами (Sublime Text, Notepad++ и др.) всегда учитывайте кодировку в которой открывается и сохраняется .sql файл базы данных. В случае допуска ошибки могут проявляться малопредсказуемые последствия работы сайта.

Duplicate entry ‘1’ for key ‘PRIMARY’

Требуется заменить во всей базе данных INSERT INTO на REPLACE INTO.

Multiple primary key defined

Убедитесь, что в базе в которую производится импорт нет каких-либо данных (база должна быть полностью очищена).

[Bitrix\Main\DB\SqlQueryException] Mysql query error: Illegal mix of collations for operation ‘UNION’ (400)

Проблема с разными кодировками таблиц (collation utf8_unicode_ci и utf8_general_ci).
Требуется заменить DEFAULT CHARSET=utf8 на DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci во всей базе данных.

MySQL Query Error: SELECT DISTINCT BE.ID as ID . which is not in SELECT list; this is incompatible with DISTINCT

Необходимо очистить содержимое папки /bitrix/tmp/

[Bitrix\Main\DB\ConnectionException] Mysql connect error [localhost]: (1045) Access denied for user ‘***’@’localhost’ (using password: YES) (400)

Неверные данные для подключения к базе данных. Проверьте название базы данных, имя назначенного пользователя и его пароль в панели хостинга и отредактируйте данные в файлах /bitrix/php_interface/dbconn.php и /bitrix/.settings.php

Переменная sql_mode в MySQL должна быть пустая, текущее значение.

/bitrix/php_interface/after_connect_d7.php
добавить $connection->queryExecute(«SET sql_mode=»»);

/bitrix/php_interface/after_connect.php
добавить $DB->Query(«SET sql_mode=»»);

Ошибка innodb_strict_mode=ON, требуется OFF или Ошибка! Переменная sql_mode в MySQL должна быть пустая, текущее значение.

/bitrix/php_interface/after_connect.php
$DB->Query(«SET sql_mode=»»);
$DB->Query(«SET innodb_strict_mode=0»);

/bitrix/php_interface/after_connect_d7.php
$connection = Bitrix\Main\Application::getConnection();
$connection->queryExecute(«SET sql_mode=»»);
$connection->queryExecute(«SET innodb_strict_mode=0»);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *