Login Form  

   

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

Для кого предназначена статья?

Эта статья расчитана для начинающих администраторов, у которых возникла необходимость настроить сервер баз данных. Вероятнее всего необходимость возникла в связи с установкой какого-либо веб-движка сайта.

Какие вопросы будут рассматриваться?

Главным образом будут рассматриваться вопросы отношения производительности и стабильности. А так же экономии ресурсов в облачных системах.

Установка

На самом деле в интернете существуют тысячи инструкций по установке. В том числе и на официальном сайте. Разработчик MySQL позаботился о качественном и несложном процессе инсталляции на ваш сервер.

MS-Windows

Скачайте дистрибутив с сайта MySQL и установите, следуя инструкциям установщика.

Ubuntu

$ sudo apt-get install mysql-server

FreeBSD

# whereis mysql55-server
mysql55-server: /usr/ports/databases/mysql55-server

# cd /usr/ports/databases/mysql55-server

# make install clean

...и так далее. Суть одна: при установке MySQL вам не потребуются особые знания, навыки и/или усилия.

Предварительный обзор

После установки вы можете попробовать запустить сервер. Скорей всего он запустится без проблем. При установке по умолчанию у вас так же будет установлен mysql-client для того, что бы вы могли с этой базой работать.

Конфигурационный файл

Файл конфигурации my.cnf будет расположен в зависимости от ОС. Стоит помнить, что вообще может существовать файл глобальной конфигурации и файл конфигурации для пользователя.

В MS Windows конфигурационный файл скорей всего располагается в папке, в которую был установлен сервер; во FreeBSD файл находится в директории /usr/local/etc; в Linux скорей всего он будет расположен в /etc/mysql

Файлы баз MySQL

Сама база данных (по умолчанию) будет располагаться в зависимости от ОС.

MS-Windows - в папке установленного MySQL;

FreeBSD - /var/db/mysql

Linux - /var/lib/mysql

Вы сможете изменить ее расположение, изменив файл настройки my.cnf и переместив папку с базой (так же можно просто инициализировать новую базу в новом месте).

Потребление памяти

При установке по умолчанию, сервер MySQL может занимать от 50-200 МБ оперативной памяти. На этом мы сделаем акцент т.к. потребление ресурсов очень острая проблема в облачных серверах, которых важен каждый мегабайт потребляемой памяти.

Оптимизация сервера

Как правило глобальная конфигурация располагается в файле my.cnf. Поэтому начнем править его.

Не забываем сделать резервную копию исходного файла!

После резервирования, открываем и смотрим:

Как правило в файле присутствуют три глобальные секции: [client], [mysqld_safe] и [mysqld]. В штатном режиме сервер пользуется настройками из секции [mysqld]. Остальные секции предназначены для работы с клиентом и сервером в защищеном режиме. Секция [mysql_safe] как правило используется сервером когда возникают проблемы с базой данных. Для этого режима необходимо применять особые функции.

Настройка секции [mysqld]

Отключаем InnoDB:

skip-innodb
default-storage-engine=MyISAM

Предупреждение: Эти параметры отключат целый тип таблиц InnoDB и сделают по умолчанию тип MyISAM. В результате вы получите резкое снижение утилизации оперативной памяти. Однако, стоит отметить, что эта функция подходит для вновь настроенного сервера. Иначе вы рискуете потерять доступ к уже созданым таблицам т.к. по умолчанию всегда используется InnoDB.

Стоит или не стоит переходить на MyISAM? - Для этого необходимо ознакомиться со сравнением характеристик этих типов:

Преимущества InnoDB

InnoDB должно использоваться там, где упор идет на внесение данных. Этот тип поддерживает транзакции.
Наиболее быстрое выполнение операций записи (insert, update).

Недостатки InnoDB

Более сложная структура, требующая больших знаний работы с базами данных.
Большее потребление системных ресурсов.
Нет полнотекстовой индексации.

Преимущества MyISAM

Более простой дезайн.
Общая производительность выше, чем InnoDB (учитывая остальные параметры)
Полнотекстовая индексация
Отлично подходит для задач в большим количеством операций чтения.

Недостатки MyISAM

Нет проверок целостности данных, что может вызвать существенные трудности.
Не поддерживает транзакции
Медленней, чем в InnoDB операции записи (но это не значит, что операции записи производятся очень медленно).

Итак

В целом вы ничего не потеряете, если будете использовать MyISAM. Да, это менее надежный тип таблиц. Но это (возможно) будет при высоких нагрузках (а может и нет). В любом случае многое будет зависеть от дизайна базы. Кроме того стоит акцентировать то, что MyISAM наиболее подходит для масштабируемых (облачных) web-серверов, в которых как раз более востребована скорость чтения данных.

InnoDB необходима скорей для технологических задач. Таких, как многочисленные банковские операции или бухгалтерские расчеты.

После того как вы отключите InnoDB, у вас потребление оперативной памяти снизится в два-три раза (на вновь установленном сервере).

Отключаем преобразование DNS имен:

 skip-name-resolve

Эта функция отключит преобразование имени при обращении к клиентам. При использовании этого параметра убедитесь, что в таблице доступов присутствуют только IP адреса или 'localhost'. Полезность этого параметра конечно относительна т.к. она требует записи IP в таблице доступов, что подразумевает неиспользование имен DNS. Однако это может уберечь от ошибок администрирования.

Для чего это вообще необходимо? При обращении клиентов могут возникать задержки разрешения имен, что снизит время отклика сервера.

Отключаем работу с сетью:

skip-networking

Эта функция расчитана на то, что ваш сервер приложений находится на том же сервере, что и сервер баз данных. Это типичная схема работы серверов в сети интернет. Обращение к базе будет осуществляться только локально. Сам сервер не будет слушать порт 3306. Это даст вам некоторую защиту. К серверу MySQL попросту невозможно будет подключиться удаленно. Стоит заметить, что при этом параметре отпадает необходимость каких либо сетевых настроек для сервера MySQL, (таких как предыдущий параметр skip-name-resolve)

Логи:

В MySQL существует такая штука, как бинарный журнал. Там хранится информация о действиях, совершаемых с базой. Как правило с пустой базой проблем нет. Зато через некотрое время вы с удивлением для себя можете обнаружить, что место на диске закончилось, при том что сама база занимает незначительное пространство.

max_binlog_size = 100M
max_binlog_cache_size = 100M
max_binlog_stmt_cache_size = 100M
expire_logs_days = 10

Эти параметры ограничивают занимаемое журналами пространство на диске и время их хранения на диске.

log_bin

Этим вы могли бы отключить бинарные логи. Но увы это read-only переменная.

Другое:

Помимо всех предыдущих действий стоит ознакомиться со списком текущих настроек переменных сервера. Сделать это можно командой на сервере:

mysql -u root -p -e "SHOW VARIABLES;"

Эта команда выведет список всех действующих переменных.

Послесловие:

Этих параметров достаточно, чтобы нагрузка на сервер снизилась. Все остальные настройки лучше оставить по умолчанию. В сети интернет существует множество статей с рекомендациями уменьшить размеры буферов и кэша, однако эти настройки снизят производительность вашего сервера. Как правило эти параметры вам в дальнейшем понадобится только увеличивать вместе с растущей нагрузкой на ваш сервер.

Литература:

http://dev.mysql.com/doc/

skip-name-resolve
   
© it-answer.ru