Рекомендации по настройке MySQL

Материал из BiTel WiKi

(Различия между версиями)
Перейти к: навигация, поиск
(Набор Perl утилит для работы с MySQL)
Строка 18: Строка 18:
default-character-set=cp1251
default-character-set=cp1251
default-collation=cp1251_general_ci
default-collation=cp1251_general_ci
-
sql-mode=
+
sql_mode=
#
#
max_allowed_packet=50M
max_allowed_packet=50M

Версия 07:33, 24 июня 2013

База MySQL данных должна быть настроена с поддержкой транзакций. Для биллинга версий от 5.2 и старше это требование обязательно, т.к. транзакции используются для отката результатов неудавшихся операций.

Настройка MySQL

Рекомендуемая конфигурация, разбор параметров после. Пример сделан для ОС *NIX типа, как наиболее подходящей для высоконагруженных серверов БД. При необходимости его можно адаптировать для Windows системы, изменив соответственно пути файловой системы и пропустив секцию mysqld.safe.

Кодировка 1251 базы данных по-умолчанию - исторически сложившаяся и не изменяемая как не несущая в себе существенных неудобств. Но при большой необходимости (например, требования хранения в БД символов других алфавитов) может быть изменена на UTF-8 или иную, при этом необходимо также скорректировать .properties файлы приложений биллинга на предмет кодировки БД.

[mysqld]
datadir=/var/lib/mysql
tmpdir = /tmp
socket=/var/lib/mysql/mysql.sock
user=mysql
log-slow-queries=/var/log/slowquery.log
skip-name-resolve
#
default-storage-engine = innodb
default-character-set=cp1251
default-collation=cp1251_general_ci
sql_mode=
#
max_allowed_packet=50M
max_connections=1000
#
memlock
table_cache=4096
thread_cache_size=300
thread_concurrency=2
#
# InnoDb
innodb_file_per_table
#
innodb_log_group_home_dir = /var/lib/mysql/
innodb_buffer_pool_size = 1G
innodb_additional_mem_pool_size = 16M
#
innodb_log_files_in_group = 2
innodb_log_file_size = 128M
innodb_log_buffer_size = 8M
innodb_lock_wait_timeout = 120
#
innodb_thread_concurrency = 2
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
#
# MyIsam
#key_buffer_size = 1G
#myisam_recover
#myisam_repair_threads = 1
#myisam_data_pointer_size = 6
#
# Replication
#server-id=1
#log-bin=/var/lib/mysql-binlog/mysql-bin
#expire_logs_days=3
#replicate-do-db=bgbilling
#relay-log-space-limit = 10G
#
[mysqld_safe]
open-files-limit=32000
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#
[client]
default-character-set=cp1251
#
[mysqldump]
max_allowed_packet=50M
default-character-set=cp1251

Опции mysqld - общие параметры:

  • datadir - каталог для хранения БД, лучше если это будет отдельный диск (RAID); высокие требования по надёжности и скорости.
  • tmpdir - каталог для хранения временных файлов, лучше сделать отдельным быстрым диском; невысокие требования по надёжности, высокие по скорости; можно использовать RAM диск.
  • socket - файловый сокет, возможность подключения консольным клиентом.
  • user - пользователь ОС, под которым запускается БД.
  • log-slow-queries - логирование запросов, выполняющихся длительное время.
  • skip-name-resolve - отключает DNS резолвинг для устанавливаемых соединений.
  • default-storage-engine - тип хранилища таблиц по-умолчанию, InnoDB - транзакционный тип хранилища.
  • default-character-set - кодировка по-умолчанию для вновь создаваемых таблиц.
  • default-collation - collation (порядок букв, используется при сортировке) по-умолчнию для вновь создаваемых таблиц.
  • sql-mode - запрещается установка режимов STRICT_TRANS_TABLES и STRICT_ALL_TABLES, это приведёт к неработоспособности некоторых компонентов биллинговой системы.
  • max_allowed_packet - максимальный размер пакета с запросом, принимаемого сервером.
  • max_connections - ограничение на максимальное число соединений с БД.
  • memlock - запрет на перенос процесса mysqld в свап.
  • table_cache - максимальное количество описаний структур открытых таблиц в кэше.
  • thread_cache_size - размер кэша потоков для предотвращения их повторного создания.
  • thread_concurrency - число одновременно работающих потоков, рекомендуется ставить 2 * количество CPU + количество дисков.

Запрещается установка опции skip-networking, т.к. Java приложение подключается к серверу с использованием TCP протокола, а не через файловый сокет.

Опции mysqld - InnoDB:

  • innodb_file_per_table - для возможности использования Backup базы с помощью snapshot'ов (Linux, LVM) в ОС LINUX.
  • innodb_log_group_home_dir - путь к каталогу под журнал транзакций, лучше если это будет отдельный диск; высокие требования по скорости и надёжности, низкие по объёму.
  • innodb_buffer_pool_size - размер буфера под все нужды, он должен составлять порядка 70-80 % от общей памяти сервера БД.
  • innodb_additional_mem_pool_size - параметр можно не изменять, размер буфера под доп. цели.
  • innodb_log_files_in_group - количество файлов журналов транзакций в группе журналов; InnoDB производит запись в файлы по круговому способу; увеличение ускоряет запись но тормозит восстановление информации в случае сбоя.
  • innodb_log_file_size - размер каждого файла журнала в группе журналов (указывается в мегабайтах).
  • innodb_log_buffer_size - размер буфера, который в InnoDB используется для записи информации файлов журналов на диск.
  • innodb_lock_wait_timeout - время простоя (в секундах), на протяжении которого транзакция InnoDB может ожидать прекращения блокировки прежде, чем будет произведен откат.
  • innodb_thread_concurrency - должно совпадать с thread_concurrency; число одновременно работающих потоков, рекомендуется ставить 2 * количество CPU + количество дисков.
  • innodb_flush_log_at_trx_commit - 2 отменяет сброс данных на диск при каждой транзакции, ускорение работы.
  • innodb_flush_method - O_DIRECT отключает двойную буферизацию (самим mysql и ОС).

Опции mysqld -MyIsam, если используется (например, для некритичных таблиц):

  • key_buffer_size - размер кэша для хранения индексов;
  • myisam_recover -восстановление битых таблиц при старте сервера.
  • myisam_repair_threads - число потоков восстановления.
  • myisam_data_pointer_size - возможность создания больших первичных ключей в таблицах.

Опции mysqld - репликации, если используется:

  • server-id - идентификатор сервера.
  • log-bin - место хранение bin-логов; лучше если это будет отдельный диск, высокие требования по скорости и надёжности, малые по объёму.
  • expire_logs_days - автоматическое удаление старых bin-логов.
  • replicate-do-db - реплицируемая БД.
  • relay-log-space-limit - ограничение на объём bin-логов.

Опции mysqld_safe:

  • open-files-limit - лимит количества открытых файлов для ОС Linux.
  • log-error - файл для логирования ошибок.
  • pid-file - PID файл процесса.

Опции mysqldump:

  • max_allowed_packet - установка маскимально возможного размера пакета при снятии дампов утилитой mysqldump.
  • default-character-set - кодировка по-умолчанию при снятии дампов БД.

Опции client:

  • default-character-set - кодировка по-умолчанию при подключении консольным клиентом.

В качестве примера конфигурации вы также можете использовать примеры конфигурации MySQL (/usr/share/mysql/my-innodb-heavy-4G.cnf).

Ссылки:

Набор Perl утилит для работы с MySQL

В архиве Медиа: mysql_perl_utilites.zip размещены файлы:

  • access.pm - параметры доступа к MySQL для остальных скриптов.
  • extract_myisam.pl - выбор MyIsam таблиц из базы и вывод в файл tables.
  • convert.pl - конвертация таблиц из файла tables в InnoDb.
  • drop.pl - удаление таблиц, перечисленных в файле tables.

Конвертацию можно выполнять только после включения в my.cnf поддержки InnoDb. Следует учитывать, что конвертация больших таблиц может быть очень длительной, поэтому оптимальным будет исключить из конвертации помесячные таблицы с сессиями, наработками и т.п. Для транзакционной работы они не критичны. Достаточно, что в последующие месяцы эти таблицы также будут создаваться в формате InnoDb. Также можно предварительно отработать конвертацию таблиц на стороннем MySQL сервере.

Выберите MyIsam таблицы в файл tables с помощью скрипта extract_myisam.pl, скорректируйте файл tables, оставив только последние месячные и постоянные таблицы. Затем выполните скрипт convert.pl.

Алгоритм конвертации с репликацией

  1. Включить поддержку InnoDb на slave-сервере.
  2. Включить поддержку InnoDb на master-сервере.
  3. Запустить скрипт конвертации в InnoDB (см. ранее) для master-сервера.
Личные инструменты