Настройка MySQL

Материал из Chesser Wiki
Перейти к: навигация, поиск

Поговорим о конфиг файле 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

Другие ресурсы по настройке mysql