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.
Блок кода |
---|
language | ruby |
---|
linenumbers | false |
---|
|
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
...
- /MariaDB требуются привилегии root или sudo.
- Обратите внимание, что для заливки дампа базы помимо сервера MySQL вам понадобится клиентское приложение mysql.
|
Возможно несколько вариантов установки сервера БД, рассмотрим их.
MariaDB
Для установки MariaDB на Linux, Вы можете воспользоваться предусмотренным системой способом установки. Например, для Linux с пакетным менеджером yum:
Блок кода |
---|
|
yum install mysql, mysql-server |
Служба сервера обычно устанавливается и стартует автоматически. Обратите внимание, что для заливки дампа базы помимо сервера MySQL вам понадобится клиентское приложение mysql.
update
yum install mariadb-server mariadb-client |
Для Linux с пакетным менеджером apt:
Блок кода |
---|
|
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
Блок кода |
---|
|
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
Блок кода |
---|
|
{ \
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
Выполните:
Блок кода |
---|
|
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, затем:
Блок кода |
---|
|
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
Блок кода |
---|
|
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/.
Рекомендуемые параметры конфигурации с описанием параметров:
Блок кода |
---|
|
# 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-клиента):
Блок кода |
---|
|
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'colla%'; |
...
utf8mb4
"Правильный" UTF-8, длиной от 1 до 4 байт. Конфигурация MySQL/MariaDB:
Блок кода |
---|
|
[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 не указываем:
Блок кода |
---|
|
useUnicode=true&characterEncoding=UTF-8& |
utf8
"Ограниченный" UTF-8, длиной от 1 до 3 байт.
Блок кода |
---|
|
[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):
Блок кода |
---|
|
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):
Блок кода |
---|
|
chown -R mysql:mysql /new/data/dir |
Если в системе включен SELinux, то ему также нужно будет указать, что MySQL может работать с новой директорией:
Блок кода |
---|
|
semanage fcontext -a -t mysqld_db_t "/new/data/dir(/.*)?"restorecon -Rv /new/data/dir |