Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 3 Следующий »

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

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

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

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 - значения должны соответствовать реальной картине с кодировками (также см. ниже).

Установка

Linux

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

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

MariaDB

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

yum 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.

Настройка

В зависимости от дистрибутива, конфигурация 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).

См. также wiki.

Кодировки

Рекомендуемая для использования кодировка для новых инсталляций - 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;"

В параметрах подключения приложений биллинга к БД (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
  • Нет меток