Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление

MySQL/MariaDB-сервер (далее - MySQL) используется как постоянное хранилище для большинства данных биллинговой системы. Доступ к нему со стороны приложений биллинга осуществляется посредством сетевого соединения, поэтому MySQL может быть установлен на отдельной машине с любой поддерживаемой ОС. Для небольших баз, либо тестовых целей возможна установка MySQL на одну машину с сервером биллинга и другими серверными приложениями , - весь процесс установки описан под этот случай и все конфигурации по умолчанию также ориентированы на этот случай.

Для работы биллинга необходим MySQL/MariaDB-сервер версии 5.1 5 и новее. Свежий сервер MariaDB — очень хороший вариант. Служба Служба MySQL-сервера должна быть запущена до момента старта всех серверных приложений биллинга.

После установки MySQL-сервера (см. далее) произведите его настройку в соответствии требованиями и рекомендациями по настройке MySQL-сервера с нашего нашего WiKi.

Якорь
mysql_connect_properties
mysql_connect_properties

Подключение к MySQL для каждого приложения настраивается в .properties- или .xml- файле, например например data/data.properties для  для сервера биллинга, планировщика и загрузчика логов, и inet-access.xml для приложения InetAccess.

Блок кода
languageruby
linenumbersfalse
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://127.0.0.1/bgbilling?useUnicode=true&characterEncoding=UTF-8&connectionCollation=utf8_unicode_ci&allowUrlInLocalInfile=true&zeroDateTimeBehavior=convertToNull&jdbcCompliantTruncation=false
db.user=bill
db.pswd=bgbilling

Если база данных MySQL и приложение установлены на одной машине, то ничего менять не надо. В противном случае вместо 127.0.0.1 указывается IP-адрес машины с БД. Параметры Параметры db.user и  и db.pswd определяют  определяют имя пользователя и пароль, под которыми приложение будет подключаться к базе данных. Возможна настройка отдельного пользователя MySQL для каждого серверного приложения биллинга, это позволит сразу видеть источник запроса на MySQL-сервере.

Пользователь Пользователь bill с паролем  с паролем bgbilling создаётся  создаётся при начальном создании БД при установке сервера биллинга (скрипт скрипт dump.sql).

Обратите внимание на параметры characterEncoding и connectionCollation - значения должны соответствовать реальной картине с кодировками (также см. ниже).

*NIX

Установка

Linux

Подсказка
  • Для установки MySQL

...

  • /MariaDB требуются привилегии root или sudo.
  • Обратите внимание, что для заливки дампа базы помимо сервера MySQL вам понадобится клиентское приложение mysql.

Возможно несколько вариантов установки сервера БД, рассмотрим их.

MariaDB

Для установки MariaDB на Linux, Вы можете воспользоваться предусмотренным системой способом установки. Например, для Linux с пакетным менеджером yum:

Блок кода
languagebash
yum install mysql, mysql-server

Служба сервера обычно устанавливается и стартует автоматически. Обратите внимание, что для заливки дампа базы помимо сервера MySQL вам понадобится клиентское приложение mysql.

update
yum install mariadb-server mariadb-client

Для Linux с пакетным менеджером apt:

Блок кода
languagebash
apt-get update
apt-get install mariadb-server mariadb-client

MariaDB из репозитария MariaDB

Для установки MariaDB версии отличной от поставляемой с текущей ОС воспользуйтесь репозитарием MariaDB: https://downloads.mariadb.org/mariadb/repositories/

Пример для Debian 9 и MariaDB 10.2
Блок кода
languagebash
apt-get install software-properties-common dirmngr
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mirror.truenetwork.ru/mariadb/repo/10.2/debian stretch main'

apt-get update
apt-get install mariadb-server mariadb-client
Пример для CentOS 7 и MariaDB 10.2
Блок кода
languagebash
{ \
  echo '[mariadb]'; \
  echo 'name = MariaDB'; \
  echo 'baseurl = http://yum.mariadb.org/10.2/centos7-amd64'; \
  echo 'gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB'; \
  echo 'gpgcheck=1'; \
} > /etc/yum.repos.d/MariaDB.repo

yum install MariaDB-server MariaDB-client

MySQL

Для установки MySQL воспользуйтесь репозитарием MySQL для вашей операционной системы: https://dev.mysql.com/downloads/

Пример для Debian или Ubuntu

Выполните:

Блок кода
languagebash
curl -fsSL https://dev.mysql.com/get/mysql-apt-config_0.8.9-1_all.deb -o mysql-apt-config.deb
dpkg -i mysql-apt-config.deb

выберите версию MySQL, нажмите OK, затем:

Блок кода
languagebash
apt-get update
apt-get install mysql-server mysql-client

При установке Вам предложат указать пароль для пользователя root MySQL.

Подробнее: https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/

Пример для CentOS 7, Red Hat Enterprise Linux 7
Блок кода
languagebash
wget http://repo.mysql.com/mysql57-community-release-el7.rpm
rpm -ivh mysql57-community-release-el7.rpm
yum update
yum install mysql-server mysql-client

Подробнее: https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/

Windows

Для установки MySQL-сервера на Windows-машине загрузите последнюю версию с сайта сайта http://dev.mysql.com/downloads/mysql/. Рекомендуем установить MySQL Server в корень диска, например в папку папку C:\MySQL.

Служба сервера обычно устанавливается и стартует автоматически. Обратите внимание, что для заливки дампа базы помимо сервера MySQL вам понадобится клиентское приложение mysql.

О кодировках

Рекомендуемые настройки для БД "character_set" везде "utf8", настройки "collation" везде "utf8_unicode_ci" (не "utf8_general_ci").

...

Настройка

В зависимости от дистрибутива, конфигурация MySQL/MariaDB может находиться в файле /etc/my.cnf и/или в директориях /etc/my.cnf.d/ или в /etc/mysql/.

Рекомендуемые параметры конфигурации с описанием параметров:

Блок кода
languageruby
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
 
[client]
# Кодировка по-умолчанию при подключении консольным клиентом и mysqldump
default-character-set = utf8mb4

[mysqld]
# Кодировка сервера
character-set-client-handshake = FALSE
character-set-server = utf8mb4 
collation-server = utf8mb4_unicode_ci

# Интерфейс, на котором будет открыт порт
#bind-address = 127.0.0.1

# Каталог для хранения БД, высокие требования по надёжности и скорости
#datadir = /var/lib/mysql
# каталог для хранения временных файлов, желательно чтобы это был tmpfs
#tmpdir = /tmp
#log-error = /var/lib/mysql/mysqld.log
# PID файл процесса
#pid-file = /var/run/mysqld/mysqld.pid
# Логирование запросов, выполняющихся длительное время
#log-slow-queries = /var/log/slowquery.log
#long_query_time = 1

# Ограничение на максимальное число соединений с БД
max_connections = 1000

# Тип хранилища таблиц по-умолчанию
default-storage-engine = InnoDB
 
# Режим разбора SQL-запросов
sql_mode =

# Отключаем DNS резолвинг для устанавливаемых соединений
skip-name-resolve

# Максимальный размер пакета с запросом, принимаемого сервером
max_allowed_packet = 64M

# Для каждой таблицы InnoDB - отдельный файл
innodb_file_per_table=1

# Путь к каталогу под журнал транзакций, можно вынести на отдельный диск
#innodb_log_group_home_dir = 

# Размер главного буфера InnoDB, он должен составлять порядка 70-80% от RAM сервера для выделенного сервера БД.
# Если же на сервере присутсвуют другие приложения - то с учетом того, чтобы хватило памяти всем.
innodb_buffer_pool_size = 512M

# Размер каждого файла журнала в группе журналов (указывается в мегабайтах),
# рекомендуемое значение - 25% от innodb_buffer_pool_size, но в пределах 64M-512M
innodb_log_file_size = 128M
# кол-во файлов в группе журналов
innodb_log_files_in_group = 2
innodb_log_buffer_size = 16M

# Вызов sync диска не на каждой транзакции, а раз в секунду - ускорение работы, меньше зависимость от скорости диска
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT

# Число одновременно работающих потоков InnoDB, рекомендуемые границы: 16 - 256
innodb_thread_concurrency = 128 

# Время ожидания прекращения блокировки (записи) прежде чем будет произведен откат транзакции
innodb_lock_wait_timeout = 120

# Максимальное кол-во одновременно открытых таблиц
table_open_cache = 1024

# Максимальный размер временной таблицы, которая будет расположена в RAM
max_heap_table_size = 64M
tmp_table_size = 64M

# Буферы на каждый поток
read_buffer_size = 2M
read_rnd_buffer_size = 8M
sort_buffer_size = 8M
join_buffer_size = 8M
key_buffer_size = 32M

# Размер кэша запросов
query_cache_size = 64M
# максимальный раз, при котором результат запроса будет помещен в кэш
query_cache_limit = 4M

bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 64M

[mysqldump]
# Маскимально возможный размера пакета при снятии дампов утилитой mysqldump
max_allowed_packet = 64M

[mysqld_safe]
# Лимит количества открытых файлов (в дополнение к лимиту ОС)
open-files-limit = 4096

Из предложенных параметров настройке обычно подлежат следующие параметры:

  • innodb_buffer_pool_size - размер буфера InnoDB, в которой MySQL будет хранить данные для чтения таблиц и их индексов. Чем больше значение, тем меньше операций с диском. Однако сервер при этом не должен уходить в swap;
  • innodb_log_file_size - размер файлов логов транзакций InnoDB, он не должен быть слишком маленьким по сравнению с innodb_buffer_pool_size, но следует также учитывать, что при старте MySQL будет перечитывать данные логи. Диапазона 64M-512M для биллинга обычно достаточно (подробнее).
Примечание
  • В параметре sql_mode запрещается установка режимов STRICT_TRANS_TABLES и STRICT_ALL_TABLES, это приведёт к неработоспособности некоторых компонентов биллинговой системы (legacy).
  • В параметре wait_timeout запрещается установка значения, меньше чем 28800 - биллинг работает с пулом соединений к БД, которые могут быть неактивны, он сам следит за их закрытием, поэтому нет необходимости, чтобы MySQL закрывал соединения по таймауту. Если уже у Вас к БД подключаются другие приложения, которым необходимо маленькое значение параметра wait_timeout, то добавьте в URL подключения к БД (db.url) всех приложений параметр &interactiveClient=true (в этому случае для соединений биллинга будет работать параметр interactive_timeout вместо wait_timeout).
  • В случае использования Nginx как proxy для MySQL для балансировки нагрузки следует установить значение конфигурации Nginx proxy_timeout не меньше чем максимум от (wait_timeout, interactive_timeout).

Кодировки

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

Проверить текущие кодировки БД можно запросами (из sql-клиента):

Блок кода
languagesql
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'colla%';

...

utf8mb4

"Правильный" UTF-8, длиной от 1 до 4 байт. Конфигурация MySQL/MariaDB:

Блок кода
languageruby
[client]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4 
collation-server = utf8mb4_unicode_ci

В параметрах подключения приложений биллинга к БД (db.url) указываем useUnicode=true и characterEncoding=UTF-8, параметр connectionCollation не указываем:

Блок кода
languagetextruby
useUnicode=true&characterEncoding=UTF-8&

utf8

"Ограниченный" UTF-8, длиной от 1 до 3 байт.

Блок кода
languageruby
[client]
default-character-set=utf8

[mysqld]
character-set-server=utf8
collation-server=utf8_unicode_ci
init_connect="SET collation_connection = utf8_unicode_ci;"
sql_mode=

В параметрах подключения приложений биллинга к БД (db.url):

Блок кода
languageruby
useUnicode=true&characterEncoding=UTF-8&connectionCollation=utf8_unicode_ci&

Если collation установлен именно "utf8_unicode_ci" — также обратите внимание на параметр "connectionCollation=utf8_unicode_ci" в db.url в data.properties (см. выше). Здесь и в других местах его приходится дополнительно прописывать, т.к. для MySQL collation по-умолчанию для utf8 является utf8_general_ci.

Действия при смене datadir

Убедитесь, что у пользователя mysql есть права на новую директорию, если это не так, то дайте ему их (например, новая директория - это /new/data/dir):

Блок кода
languagebash
chown -R mysql:mysql /new/data/dir

Если в системе включен SELinux, то ему также нужно будет указать, что MySQL может работать с новой директорией:

Блок кода
languagebash
semanage fcontext -a -t mysqld_db_t "/new/data/dir(/.*)?"restorecon -Rv /new/data/dir