UTM 5: Настраиваем MySQL

Форум для размещения материалов по реализации различных схем использования ПО, решению частых проблем и предупреждению частых ошибок
Закрыто
JAO
Сообщения: 1153
Зарегистрирован: Вт дек 11, 2007 08:17

UTM 5: Настраиваем MySQL

Сообщение JAO »

Поскольку в моей практике уже было несколько случаев, когда кому-то в наследство доставался биллинг в крайне запущенном состоянии, решил вынести инструкцию по настройке MySQL в отдельную статью.

Первое, что нам понадобится - это пятая версия MySQL и UTM 5 версии не ниже 2.1-006, с архивацией данных. Можно и без нее, но тогда хорошие результаты будут на хорошей машинке, которая стоит хороших денег. Этот вариант в основном неинтересный.

По умолчанию база данных UTM использует движок InnoDB, поэтому, чтобы биллинг быстрее выдавал отчеты, в MySQL нужно его настроить и включить опцию размещения таблиц в отдельных файлах (innodb_file_per_table). Настройки движка InnoDB по умолчанию для серьёзной работы не годятся совершенно.

Для сервера с 4 гигабайтами памяти и процессором с 4 ядрами в /etc/my.cnf нужно выставить следующие параметры (секция mysqld):

Код: Выделить всё

innodb_log_files_in_group=3
innodb_log_file_size=192M
innodb_buffer_pool_size=1024M
innodb_additional_mem_pool_size=64M
innodb_thread_concurrency=8
innodb_file_per_table=1
innodb_thread_concurrency - это число ядер, умноженное на два.

Прежде чем запускать MySQL с этими параметрами, нужно:

1. остановить ядро биллинга (и, возможно, радиус)
2. остановить MySQL
3. сделать полную копию каталога данных MySQL и файла my.cnf
4. запустить MySQL
5. снять дамп базы UTM
6. снять дампы остальных баз, хранящих данные в InnoDB (если они есть)
7. затереть базу UTM (DROP DATABASE)
8. затереть остальные базы, использующие InnoDB (если есть)
9. остановить MySQL
10. потереть файлы ib_logfile*, ibdata* в каталоге данных MySQL

И далее:

11. внести изменения в my.cnf
12. запустить MySQL (он пересоздаст хранилище InnoDB с новыми параметрами)
13. создать базу UTM (CREATE DATABASE ... CHARACTER SET, character set каждой базы можно посмотреть в файле db.opt перед шагами 7 и 8, потом его задать при создании)
14. залить базу из дампа
15. выполнить шаги 13 и 14 для остальных баз InnoDB
16. запустить ядро биллинга (и радиус, если есть)

Простое изменение параметров приведет к отказу запуска MySQL из-за несоответствия хранилища InnoDB параметрам, заданным в конфиге.

Очень важно сделать бэкап всего каталога данных MySQL (шаг 3), предварительно его остановив. Если что-то пойдет не так, будет к чему откатиться. Откат делается опять-таки при остановленном MySQL стиранием рабочего каталога данных и возвращением сохраненной копии на его место. Также нужно вернуть старый my.cnf на место.

После успешного запуска посмотрите, есть ли какие-нибудь записи в таблице archives. Это можно сделать запросом

Код: Выделить всё

SELECT COUNT(*) FROM archives
Если результат будет нулевым, значит архивация никогда не делалась.

Инструкция по настройке архивации

После такой настройки и запуска архивации наблюдайте за размером таблиц discount_transactions_all, discount_transactions_iptraffic_all, как самых толстых, на сколько они будут за месяц вырастать, и подкручивайте размер буфера innodb_buffer_pool_size так, чтобы по возможности туда влезала самая большая табличка, а innodb_additional_mem_pool_size так, чтобы сохранилось соотношение первоначальных цифр. Изменение этих параметров можно производить без пересоздания хранилища данных MySQL.

Закрыто