Настройка MySQL
Поговорим о конфиг файле MySQL сервера: /etc/my.cnf
Файл разделяется на секции, названия которых пишутся в квадратных скобках, например: [mysqld] - это, кстати, самая важная секция, которую обязательно нужно настраивать под свой проект(ы).
Про настройку кодировки в MySQL я уже писал, рассмотрим другие возможные параметры.
Содержание
Пример конфига Mysql
Вот типичный пример конфига с одного из серверов с 2G Ram:
[mysqld] datadir=/data/your_mysql_dir character-set-server=utf8 collation-server=utf8_general_ci init-connect="SET NAMES utf8" skip-innodb default-storage-engine=myisam local-infile=0 max_connections=200 open_files_limit=10000 key_buffer_size=64M key_cache_division_limit=70 join_buffer_size=500k read_rnd_buffer_size=2M read_buffer_size=500k sort_buffer_size=2M tmp_table_size=64M max_heap_table_size=64M max_tmp_tables=1024 table_cache=1024 query_cache_size=64M query_cache_limit=1M low-priority-updates=1 myisam_sort_buffer_size=200M # ниже логи закоменченные #log_slow_queries=/var/log/mysql_low.log #long_query_time=2 [client] default-character-set=utf8
разбиру каждую строку позже, сейчас лень и времени нет :)
Сколько памяти потребляет mysql?
Суммарная потребляемая память mysql складывается из общей памяти для всех коннектов и отдельной памяти для каждого коннекта, умноженное на кол-во коннектов:
Max_Memory = query_cache_size + innodb_buffer_pool_size + innodb_additional_mem_pool_size + key_buffer_size + innodb_log_buffer_size + max_connections * (max_allowed_packet + sort_buffer_size + net_buffer_length + thread_stack + read_rnd_buffer_size + read_buffer_size + join_buffer_size)
Калькулятор для подсчета потребляемой памяти mysql
http://www.omh.cc/mycnf/ - туда нужно передать содержимое своего /etc/my.conf и на выходе получим расчет памяти mysql http://www.mysqlcalculator.com/ - тоже самое, но без парсера конфига
Ограничение одновременно открытых файлов в системе
При большом количестве БД(и таблиц) и большом количестве коннектов к БД может понадобиться поднять лимит одновременно открытых файлов. При работе с таблицами баз данных mysql держит открытыми несколько файлов для каждой таблицы, поэтому иногда нужно увеличивать этот лимит, особенно когда требуется повышать настройку max_connections
Просмотр настройки open files
bash-3.2# ulimit -n
Изменение настройки лимита open files
Открываем файл /etc/security/limits.conf и приписываем в конце:
mysql soft nofile 8192 mysql hard nofile 63536
либо вместо mysql можно вписать * - тогда это изменение будет работать для всех юзеров.
Чем больше разрешили открывать одновременно файлов, тем больше памяти на это дело нужно, поэтому злоупотреблять этим не следует. Для применения настройки нужен ребут.
Восстановление таблиц InnoDB
http://blackbird.si/mysql-corrupted-innodb-tables-recovery-step-by-step-guide/
my.cnf:
innodb_force_recovery=1 #innodb_purge_threads=0
mysqlcheck -u root -p --all-databases