Установка MySQL 5.6 на FreeBSD 9.1 с учетом SSD

Будем устанавливать веб-сервер, в частности MySQL. Nginx и PHP установка notanony.ru/post/16/ в другой статье. Тут мы рассмотрим особенность установки, настройка конфигурации для лучшей работы на SSD, различная оптимизация.
Теоретически под мои задача запись будет идти не так часто, но все же количество логов, операций записи на диск нужно сократить.
Ну что же, приступим к установке.
Добавляем в файл /etc/make.conf следующие строчки:
# MySQL
DEFAULT_MYSQL_VER=56
.if ${.CURDIR} == /usr/ports/databases/mysql56-server
WITH_CHARSET=utf8
WITH_XCHARSET=all
WITH_COLLATION=utf8_general_ci
BUILD_OPTIMIZED=yes
.endif
.if ${.CURDIR} == /usr/ports/databases/mysql56-client
WITH_CHARSET=utf8
WITH_COLLATION=utf8_general_ci
BUILD_OPTIMIZED=yes
.endif
Кодировку и версию сервера меняем на нужную. У меня это utf8 и версия mysql 5.6

Обновляем дерево портов (notanony.ru/post/11/) и переходим
cd /usr/ports/databases/mysql56-server
Далее установим с нужными нам параметрами make install clean

Дожидаемся окончания установки и переходим к настройки
Создаем файл конфигурации /var/db/mysql/my.cnf и конфигурируем.
В версии 5.6 по умолчанию используется движок innoDB, и конфигурация будет под использование только innoDB. Подробная документации на английском есть на офийиальном сайте dev.mysql.com/doc/
[client]
# Порт к которому подключается mysql клиент.
Port = 3306
# Адрес сокета для mysql клиента.
socket = /tmp/mysql.sock
[mysqld]
# Порт который слушает mysql сервер.
port = 3306
# Путь к сокету.
socket = /tmp/mysql.sock
# IP адрес который слушает сервер, localhost работает в любом случаи. Мне нужно что бы база была доступна в локальной сети.
bind-address = 192.168.0.1
# Максимальное количество параллельный подключений к серверу.
max_connections = 200
# Сколько данных можно передать за один запрос. Увеличить если есть ошибка: "Packet too large".
max_allowed_packet = 4M
# Не определяет домены имен.
skip-name-resolve
# Устанавливается по умолчанию, не использовать внешние блокировки. Когда несколько серверов работает с одними и теми же файлами.
skip-external-locking
# Не использовать сеть (TCP/IP), только сокет. Мне нужна сеть, так как удобно работать с базы с другого компьютера. Но связь идет внутри моей локальной сети, так что больше не кто не подключится к 192.168.0.1. В большинстве случаев хватит сокета.
#skip-networking
# Если запрос выполнялся дольше указного времени в секундах, то он будет записан в лог, как меленый запрос. Поставлю одну секунду, так как в моих скриптах дольше выполняться нечему.
slow_query_log = 1
# Путь к файлу логов медленных запросов. Создаем файл с правами пользователя mysql.
slow_query_log_file = /var/log/mysql_slow_queries
# Поведения поля timestamp по умолчанию
explicit_defaults_for_timestamp
# Размер буфера выделяемого под индексы. Должно быть примерно 30% от оперативной памяти если используете MyISAM. Я использую innoDB, но MyISAM будет использовать для внутренних целей.
key_buffer_size = 64M
# Размер буфера для сортировки MyISAM индексов
myisam_sort_buffer_size = 128M

# innoDB параметры
# Размер памяти под индексы и данные. Советуют ставить 80-90% от оперативной памяти. Я поставил 50%, так как на сервере кроме mysql будут другие программы.
innodb_buffer_pool_size = 4G
# Доступно три значения на выбор: 0, 1, 2. Значение 0 — сбрасывать лог раз в секунду на диск, не зависимо от транзакций. Значение 1 — сбрасывать лог при каждой транзакции.  Значение 2 — лог пишется, но не сбрасывается на диск. Самое надежное 1, но я буду использовать 2, так как SSD. В случае падение операционной системы потеряются данные только за последние 1-3 секунды.
innodb_flush_log_at_trx_commit = 2
# Размер буфера лога. По умолчанию один мегабайт, больше восьми мегабайт не нужно.
innodb_log_buffer_size = 8M
# Максимальный размер одного лог файла. При достижение этого размера будет создавать новый лог файл. Значение устанавливать от 32 до 512 Мегабайт.
innodb_log_file_size = 128M


Добавляем в загрузку MySQL сервер. Для этого добавим строчку в файл /etc/rc.conf
mysql_enable="YES"

Стартует MySQL сервер:
/usr/local/etc/rc.d/mysql-server start

Смотрим содержимое лога mysql (/var/db/mysql/localhost.err) на наличии ошибок запуска и предупреждений. Если есть какие то ошибки или предупреждение их необходимо исправить, mysql сервер подробно опишет в логе в чем проблема.

Теперь добавим возможность подключаться к серверу под пользователем root с IP адреса 192.168.0.2. Так как я привык работать не через phpmyadmin, а сторонними программами. Например под windows очень удобно пользоваться navicat lite.
По умолчания у пользователя root нет пароля, используем консольный клиент mysql и создадим пользователя root c ip 192.168.0.2 со всеми привилегиями:
mysql> CREATE USER 'root'@'192.168.0.2';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0.2' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Теперь можно подключать к серверу с IP адреса 192.168.0.2, попробуем подключиться

Как можно видеть все работает, дальше уже идет настройка привилегий, баз данных. Это уже отходит от темы данный темы.
Статья будет дописываться, так как с конфигурацией my.cnf я сам не разобрался. Если есть вопросы и пожелания с радостью поговорю.
0.10
23.08.2013 15:47