Теоретически под мои задача запись будет идти не так часто, но все же количество логов, операций записи на диск нужно сократить.
Ну что же, приступим к установке.
Добавляем в файл /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 я сам не разобрался. Если есть вопросы и пожелания с радостью поговорю.