Установка и настройка MySQL в FreeBSD

Содержание

  • Что нового в MySQL 5.6
  • Установка MySQL 5.6 в FreeBSD
  • Обновление MySQL
  • MySQL в FreeBSD - база знаний
  • Ошибки MySQL и их решения
  • Полезные ссылки

Что нового в MySQL 5.6

В феврале 2013 года Oracle анонсировала новый релиз MySQL 5.6, в котором содержатся весьма интересные обновления, в основном коснувшиеся таблиц InnoDB, такие как поддержка средств полнотекстового поиска в таблицах InnoDB, повышенная производительность при интенсивной записи данных, доступ к данным через memcached API и другое. С полным списком изменений можно ознакомиться тут: Официальный пресс-релиз Oracle (eng), Описание новшеств MySQL 5.6.

Установка MySQL 5.6 в FreeBSD, обычно, проходит гладко, а вот обновление, наоборот, таит в себе множество скрытых проблем (MySQL - установка и настройка в Windows). Все описанные в статье примеры протестированы на FreeBSD 8.4.

Установка MySQL 5.6 в FreeBSD

Обычно MySQL в FreeBSD устанавливают из портов, но если на сервере используется DirectAdmin, то при помощи скриптов обновления программ custombuild (/usr/local/directadmin/custombuild). Перед установкой, желательно обновить дерево портов, как это сделать описано тут: работа с портами в FreeBSD, при использовании DA, нужно перенастроить /usr/local/directadmin/custombuild/options.conf и обновить скрипты установки MySQL командой ./build update.

Предварительно можно настроить параметры устанавливаемой базы данных в файле /etc/make.conf, но это не обязательно. Об обновлении более старых версий БД до MySQL 5.6 написано ниже.

В DirectAdmin MySQL устанавливается при установке панели DA и требуется не установка с нуля, а обновление, процесс которого описан в разделе "Обновление MySQL".

Уствновка MySQL 5.6 из портов FreeBSD
Переход в директорию с портами баз данных
# cd /usr/ports/databases/

Выбрать версию MySQL из доступных
# find . -name 'mysql*-server'
./mysql56-server
./mysql50-server
./mysql51-server
./mysql55-server
./mysql41-server

Переход в директорию с портом MySQL srver 5.6
# cd /usr/ports/databases/mysql56-server

Установить mysql56-server
# make install clean

Обновление путей
#rehash

Скопировать главный конфигурационный файл MySQL
# cp /usr/local/share/mysql/my-small.cnf /etc/my.cnf

Создать фалы баз данных по умолчанию (необходимы для работы сервера MySQL)
# cp /usr/local/mysql/scripts/mysql_install_db /usr/local/mysql/mysql_install_db
# /usr/local/mysql/mysql_install_db

Установить права доступа к каталогу баз данных MySQL
# chown -R mysql:mysql /var/db/mysql

Добавить автоматический запуск MySQL в FreeBSD
# echo 'mysql_enable="YES"' >> /etc/rc.conf

Запуск MySQL сервера
# /usr/local/etc/rc.d/mysql-server start

Установка пароля для root в MySQL
# mysqladmin -u root password 'НОВЫЙ ПАРОЛЬ для root'

Подключение в БД
# mysql -u root -p
Enter password:НОВЫЙ ПАРОЛЬ для root

Переход в конфигурационную БД MySQL
mysql>use mysql

Удаление всех лишних пользователей, чтобы остался только 1 root с новым, только что установленным паролем
mysql>DELETE FROM user WHERE user != 'root';

На этом первичная настройка и установка MySQL 5.6 завершена. Если в процессе установки появились ошибки или сервер MySQL не запустился, смотрите раздел "Полезные сведения по MySQL", который размещен в этой статье ниже.

Обновление MySQL

Перед обновлением до версии MySQL 5.6 в FreeBSD нужно обязательно создать резервную копию всех баз данных. Это можно сделать множеством способов, например просто переместив директорию с базами (пути указаны в разделе "Полезные сведения по MySQL" ниже) в свой домашний каталог, предварительно остановив сервер базы данных. В DirectAdmin есть способ настроить обновление так, чтобы перед ним автоматически сохранялась резервная копия БД - за это отвечают две директивы в /usr/local/directadmin/custombuild/option.conf: mysql_backup=yes, mysql_backup_dir=/usr/local/directadmin/custombuild/mysql_backups.

Сам процесс обновления сводится к удалению порта старой версии MySQL и установкой новой. Процесс установки подробно описан в разделе этой статьи "Установка MySQL 5.6 в FreeBSD".

Удаление старой версии MySQL, установленной из портов
# cd /usr/ports/databases/mysql50-server/
# make deinstall
# cd /usr/ports/databases/mysql50-client/
# make deinstall

После успешной установки новой версии, в случае необходимости, нужно вернуть директории, содержащие данные таблиц MySQL из старой версии (сервер MySQL на это время нужно остановить). Ни в коем случае, не стоит возвращать в директорию с файлами новой версии MySQL файлы из корневой директории, такие как: ib_logfile0, ib_logfile1 и др. После возврата таблиц нужно запустить утилиту mysql_upgrade, которая приведет системную таблицу "mysql" в соответствие с новой версией сервера MySQL (например в версии 5.5 добавлены новые колонки в системных таблицах, по отношению к версии 5.1, структуры таблиц 5.5 и 5.6 также, отличаются) и запустить MySQL-сервер.

Если не запустить mysql_upgrade, то например при обновлении версии 5.1 до 5.5 сервер базы данных работать будет, но запрос GRANT ALL PRIVILEGES ON *.* TO 'superuser'@'localhost' WITH GRANT OPTION; завершится ошибкой Access denied for user 'root'@'localhost' (using password: YES) из-за того, что служебные таблицы MySQL не содержат необходимых колонок. Также, возможны и другие не заметные на первый взгляд ошибки при работе с БД.

При использовании DA обновление проводится командой /usr/local/directadmin/custombuild/build mysql d. При этом также, как и при обновлении из портов, нужно сначала очистить или перенести каталог /home/mysql/, запустить новую версию и убедиться, что она работает, а уже после этого возвращать данные в БД.

После обновления MySQL нужно обновить скрипты, используемые для подключения к БД в PHP. Пользователям DA можно просто обновить php в целом: /usr/local/directadmin/custombuild/build php d.

MySQL в FreeBSD - база знаний

Скрипты запуска/останова MySQL:

# /usr/local/etc/rc.d/mysql-server start
# /usr/local/etc/rc.d/mysql-server stop

В DA названия скриптов запуска и останова MySQL отличаются:
/usr/local/etc/rc.d/mysqld start
/usr/local/etc/rc.d/mysqld stop

Посмотреть, запущен ли mysqd: # ps ax | grep mysql

Лог-файл MySQL-сервера по умолчанию располагается тут: /var/db/mysql/HOSTNAME.err, DirectAdmin изменяет путь к логу на /home/mysql/HOSTNAME.err. HOSTNAME - hostname сервера, на котором установлен MySQL.

Настроить место хранения лога запросов и лога медленных запросов можно при помощи директивы log-output в my.cnf. Если указать log-output=TABLE, тогда эти логи будут храниться в БД с именем "mysql" и соответствующих таблицах: general_log и slow_log.

Включить и отключить главный лог MySQL, в который будут записываться абсолютно все запросы к БД можно не перезагружая сервер:

SET GLOBAL general_log = 'ON';
SET GLOBAL general_log = 'OFF';

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

Путь к базам данных: /var/db/mysql/ (DirectAdmin - /home/mysql/).

Путь к конфигурационному файлу MySQL my.cnf: /etc/my.cnf.

Добавить пользователя с полным доступом:

CREATE USER 'superuser'@'localhost' IDENTIFIED BY 'PASS';
GRANT ALL PRIVILEGES ON *.* TO 'superuser'@'localhost' WITH GRANT OPTION;
# PASS - нужно заменить на пароль для пользователя superuser
# Доступ у пользователя superuser будет только с локального компьютера
# Чтобы открыть доступ для superuser из сети, нужно добавить нового пользователя
# и заменить localhost на %

Изменить/восстановить пароль root в MySQL не имея ученой записи с ALL PRIVILEGES:

# mysqladmin -u root password 'Новый пароль'

Для смены root пароля можно использовать и другой способ: запустить MySQL с опцией, запрещающей проверку прав доступа, зайти под root без пароля и сменить пароль SQL запросом (пример для БД установленной Директадмином, но его легко можно изменить, используя материалы этого раздела и для MySQL установленного из портов):

# /usr/local/etc/rc.d/mysqld stop
# cd /usr/local/mysql/bin/
# ./mysqld_safe --skip-grant-tables &
# mysql -uroot
use mysql
UPDATE user SET password=PASSWORD('НОВЫЙ ПАРОЛЬ') WHERE user='root';
FLUSH PRIVILEGES;
quit
Теперь находим номера PID процессов MySQL
#  ps ax | grep mysql
69349   1  I      0:00.01 /bin/sh ./mysqld_safe --skip-grant-tables
69583   1  I      0:00.09 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local
69787   1  S+     0:00.00 grep mysql

Далее первым нужно остановить процесс ./mysqld_safe --skip-grant-tables, потом /usr/local/mysql/bin/mysqld
# kill -9 69349
# kill -9 69583
Номера процессов в Вашей системе будут отличаться!

Если остановить вначале не тот процесс - /usr/local/mysql/bin/mysqld, то он не остановится, а просто перезапустится, и так будет до бесконечности, пока не будет остановлен процесс ./mysqld_safe --skip-grant-tables.

Директория с установленным MySQL: /usr/local/mysql/. Если база данных была установлена при помощи DirectAdmin, то /usr/local/mysql будет символической ссылкой на директорию в /usr/local/, например для MySQL 5.6 это может быть ссылка на /usr/local/mysql-5.6.10-freebsd8.4-x86_64.

Ошибки MySQL и их решения

Can't start server : Bind on unix socket: Permission denied

MySQL запускается, работает несколько секунд и останавливается. В логе MySQL обнаружены строки с такими ошибками:

[ERROR] Can't start server : Bind on unix socket: Permission denied
[ERROR] Do you already have another mysqld server running on socket: /tmp/mysql.sock ?
[ERROR] Aborting

Сообщения об ошибке сообщают, что доступ сокету MySQL запрещен. Чтобы открыть доступ, необходимо сменить права на каталог /tmp:

# chmod chmod 1777 /tmp
Посмотреть изменения
# ls -ld /tmp
drwxrwxrwt  root  wheel  512 /tmp

Такая ошибка может возникнуть после переноса FreeBSD с одного HDD на другой. Обычно, при таком переносе, директория /tmp не копируется, и при монтировании ее в новой системе забывают настроить права доступа.

Как остановить mysqld_safe?

Чтобы остановить mysqld_safe нужно найти PID скрипта, запустившего mysql, а уже потом остановить процесс MySQL, иначе по команде kill -9 PID процесс будет не остановлен, а перезагружен, и так до бесконечности. Описание процесса останова mysqld_safe находится в разделе "Полезные сведения по MySQL" и подразделе "Изменить/восстановить пароль root в MySQL".

Опубликовано: 2013/07/18
HTML-код ссылки на эту страницу:
<a href="https://petrenco.com/freebsd.php?txt=175" target="_blank">Установка и настройка MySQL в FreeBSD</a>
24688
Добавить комментарий
Ваш e-mail: (не виден посетителям сайта)
Ваше имя:
Комментарий:
Символы с картинки:
Только выделенные поля формы добавления комментариев обязательны к заполнению.