Bitrix mysql option php

Где хранятся настройки mysql в bitrix env и как их изменять

Я периодически работаю с сайтами на битрикс, которые работают в готовом web окружении от разработчиков. Сегодня я поделюсь информацией о том, где хранятся и как изменять настройки mysql на сервере с bitrix env. Многие простые вещи становятся очень сложными, если ты не знаком с нюансами работы этого окружения.

Онлайн-курс по Kubernetes – для разработчиков, администраторов, технических лидеров, которые хотят изучить современную платформу для микросервисов Kubernetes. Самый полный русскоязычный курс по очень востребованным и хорошо оплачиваемым навыкам. Курс не для новичков – нужно пройти вступительный тест.

Проверяем, кто занимает всю память на сервере

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

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

Не удивился, увидев, что mysql. Первое, что сделал — перезапустил его и стал наблюдать. Увидел такую картинку в zabbix.

Читайте также:  Where is python interpreter

Mysql занимает всю оперативную память

Дальше сервер кушал весь своп и прибивал процесс mysql с сообщением в системном логе:

kernel: Out of memory: Kill process 30609 (mysqld) score 97 or sacrifice child

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

Где в bitrix env настройки mysql

Для начала нужно было проверить, где на сервере с bitrixenv хранятся настройки mysql. По аналогии с остальными настройками (php, apache, nginx), предвкушал долгие поиски и не ошибся. В итоге выяснил, что хранятся они в файле /etc/mysql/conf.d/bvat.cnf. Но мало узнать, где они хранятся. Как оказалось, этот файл формируется динамически при каждом запуске сервера, в зависимости от доступной оперативной памяти. Тут то я и понял, в чем проблема. Расскажу обо всем по порядку.

В bitrix env есть служба под названием bvat. Она стартует при загрузке сервера через /etc/init.d/bvat. Эта служба определяет количество оперативной памяти на сервере и в зависимости от этого меняет некоторые настройки web окружения. В частности mysql, php, apache. Можно посмотреть этот скрипт, чтобы понять, что он делает. Если кратко, то он запускает скрипт /etc/ansible/library/bx_perf, который подключает некоторые переменные и формирует новые конфиги. Свою работу логирует в файле /opt/webdir/logs/bvat.log.

В моем случае bvat не изменял конфиг для mysql. Я проверил документацию по нему на сайте битрикса. Четко сказано, что он работает при загрузке системы. Я запускал руками те проверки из скрипта, что должны менять именно mysql конфиг. Удалял конфиг, но bvat неизменно создавал новый конфиг, из расчета, что на сервере 16Гб памяти. Это так и было на момент первоначальной установки. Но со временем гипервизор нагрузили и память сделали динамическую, уменьшив максимально доступную.

В какой-то момент всем памяти на гипервизоре стало не хватать и он начал распределять ее по виртуальным машинам. Конкретно подопытному серверу стало доставаться меньше памяти, чем 16 Гб, но все конфиги были заточены под это количество. Из-за этого серверу не хватало памяти и он начинал уходить в своп и аварийно перезапускать службы, пожирающие память.

Когда я все понял, сделал виртуальной машине статическую память (меньше 16Гб) и перезагрузился. Но конфиг mysql не изменился. Тут явно какой-то глюк. bvat по прежнему откуда-то доставал 16Гб памяти и на основе их рисовал конфиг. Я просмотрел весь скрипт. Там используется несколько проверок памяти. Я посмотрел основную, через free -m, она показывает корректное значение, которое меньше 16Гб, но bvat откуда-то берет другое число. Я не стал разбираться с этим, так как налицо баг, который скорее всего либо уже исправлен, либо будет исправлен после какого-нибудь обновления.

Как изменить настройки mysql в bitrixenv

Для того, чтобы руками изменить какие-то параметры в mysql, которые не будут изменяться динамически, необходимо воспользоваться файлом /etc/mysql/conf.d/z_bx_custom.cnf. Основной параметр, который приводит к тому, что mysql занимает всю оперативную память — innodb_buffer_pool_size. В первую очередь следует переназначить именно его. Сделать где-то в треть реальной оперативной памяти. С остальными параметрами надо разбираться отдельно. Я не стал тратить на это время, пока временно отдал серверу первоначальный объем памяти в 16Гб. В ближайшее время обновлю полностью сервер вместе с bitrix env и посмотрю, исчез ли глюк с тем, что память определяется неправильно. Если нет, буду руками выставлять параметры под реальную оперативную память сервера.

Заключение

К bitrixenv у меня неоднозначное отношение. С одной стороны удобно, что все собрано в одном месте, связано друг с другом и быстро устанавливается, настраивается. Но когда нужно дебажить какие-то проблемы, уходит в разы больше времени, чем если бы ты использовал классический веб сервер, настроенный собственноручно. Сейчас я уже неплохо ориентируюсь в bitrixenv, решаю вопросы быстро, но с mysql столкнулся впервые. Обычно там проблемы с конфигами php, apache, nginx, с отправкой почты.

Закономерный вывод в конце — bitrixenv не предназначен для работы на сервере с динамической оперативной памятью. Надо либо отключать bvat, либо ставить статическую память виртуальной машине.

Если у вас есть желание научиться администрировать системы на базе Linux, но вы с ними никогда не работали и не знакомы, то рекомендую начать с онлайн-курса «Linux для начинающих» в OTUS. Курс для новичков, для тех, кто с Linux не знаком. Цена за курс минимальная (символическая). Информация о курсе и цене.

Источник

Быстрая установка (Short install)

Быстрая установка позволяет в упрощенном виде установить продукт «1C-Битрикс». Во время такой установки мастером пропускаются шаги лицензионного соглашения, предварительной проверки хостинга, выбора и настройки базы данных и т.п.

Примечание: Быстрая установка не рекомендуется для MSSQL и Oracle из-за сложности настроек этих баз данных, хоть и поддерживается в продуктах «1C-Битрикс». Установку продукта для баз данных MSSQL и Oracle лучше производить стандартным мастером.

Все необходимые данные для установки содержатся в файлах /bitrix/php_interface/dbconn.php и /bitrix/.settings.php (настройки для нового ядра D7), которые нужно создать и поместить в необходимые директории устанавливаемого дистрибутива.

Пример файла /bitrix/php_interface/dbconn.php

Рассмотрим каждую строку подробнее:

  • SHORT_INSTALL — если указано значение true , то запускается упрощенный мастер установки.
  • SHORT_INSTALL_CHECK — проверка параметров окружения (права доступа к файлам, БД и т.п). Если такой константы нет, проверка будет выполнена на первом хите. После этого в начало dbconn.php запишется define(«SHORT_INSTALL_CHECK», true);
  • MYSQL_TABLE_TYPE — выбор типа таблиц MySQL: MyISAM или InnoDB .
  • BX_UTF — выбор кодировки сайта: true — UTF8, false — CP1251.
  • DBPersistent — если данная константа инициализирована значением true , то будет создаваться постоянное соединение с базой, иначе — обычное.

Примечание: При создании соединения с базой в памяти создается дескриптор данного соединения. Если соединение обычное, то после отработки скрипта это дескриптор удаляется. Если соединение постоянное, дескриптор остается и может быть использован другими процессами при необходимости. Достоинством постоянного соединения является то, что, как правило, времени на него требуется меньше, но в то же время есть недостаток — количество открытых постоянных соединений ограничивается в настройках базы данных и при превышении этого лимита посетитель не сможет зайти на сайт пока не освободятся новые соединения.

  • MySQL — адрес и порт сервера базы данных (например, localhost или 192.168.3.155:31007 , если БД находится на другом хосте и на нестандартном порту).
  • MSSQL — строка соединения с сервером (например, для ODBC: DRIVER=SQL Server; SERVER=TESTSQL , для Native: TESTSQL ).
  • Oracle — не используется.
$DBName = " (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.0.1) (PORT = 1521) ) ) (CONNECT_DATA = (SERVICE_NAME = BX) ) ) ";

Примечание: Базы данных должны быть заранее созданы на хостинге. Например, для кодировки сайта в UTF8 при создании MySQL-базы collation для нее должно быть utf8_unicode_ci , в CP1251 — cp1251_general_ci .

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

Внимание: В PHP должно быть установлено расширение mysqli, дополнительные проверки на наличие расширения не производятся! Включать mysqli нужно отдельно для старого (dbconn.php) и нового ( .settings.php) ядра.

Пример файла /bitrix/.settings.php

Примечание: Некоторые секции файла настроек содержат параметр readonly. Если он принимает значение true , то данные настройки нельзя изменить через API.

  • utf_mode — отвечает за кодировку сайта, значения value :
    • true — UTF8;
    • false — CP1251.
    • config_options — время жизни кэша настроек сайта в секундах;
    • site_domain — время жизни кэша настроек домена в секундах.

    Таким образом, быстрая установка начнется с Пятого шага мастера установки продукта.

    Источник

    Как подключится к базе данных в битриксе через ssl?

    AlexanderKs3

    Похоже, такая возможность в Bitrix не заложена. По крайней мере, если посмотреть исходники, /bitrix/modules/main/lib/db/mysqliconnection.php, то в методе connectInternal() между mysqli_init() и real_connect() не предусмотрена установка options() и ssl_set(), только назначение нестандартного порта и MYSQLI_INIT_COMMAND, а в конце — подключение файла after_connect_d7.php, в которм указываются доп. инструкции после успешного коннекта к базе:

    protected function connectInternal() < if ($this->isConnected) return; $host = $this->host; $port = 0; if (($pos = strpos($host, ":")) !== false) < $port = intval(substr($host, $pos + 1)); $host = substr($host, 0, $pos); >if (($this->options & self::PERSISTENT) != 0) $host = "p:".$host; /** @var $connection \mysqli */ $connection = \mysqli_init(); if (!$connection) throw new ConnectionException('Mysql init failed'); if (!empty($this->initCommand)) < if (!$connection->options(MYSQLI_INIT_COMMAND, $this->initCommand)) throw new ConnectionException('Setting mysql init command failed'); > if ($port > 0) $r = $connection->real_connect($host, $this->login, $this->password, $this->database, $port); else $r = $connection->real_connect($host, $this->login, $this->password, $this->database); if (!$r) < throw new ConnectionException( 'Mysql connect error ['.$this->host.']', sprintf('(%s) %s', $connection->connect_errno, $connection->connect_error) ); > $this->resource = $connection; $this->isConnected = true; // nosql memcached driver if (isset($this->configuration['memcache'])) < $memcached = \Bitrix\Main\Application::getInstance()->getConnectionPool()->getConnection($this->configuration['memcache']); mysqlnd_memcache_set($this->resource, $memcached->getResource()); > $this->afterConnected(); >

    В файле .settings.php определяется класс для подключения (className), возможно это пригодится для подключения своего, модиф. класса.

    Источник

Оцените статью