Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #69, АВГУСТ 2006 г.

Корень зла

ANDREY MATVEEV

Спецвыпуск: Хакер, номер #069, стр. 069-050-2


# cd /usr/ports/databases/mysql

# make package

Для проверки правильности сборки выполняем набор прилагаемых тестов:

# make do-regress

Если все тесты прошли успешно, переходим к установке прекомпилированного пакета клиентской части MySQL:

# pkg_add /usr/ports/packages/i386/all/mysql-client-5.0.22.tgz

Уделяем внимание зависимостям mysql-server'а:

# cd /usr/ports/databases/p5-DBD-mysql

# make install clean CLEANDEPENDS=Yes

И устанавливаем пакадж серверной части MySQL:

# pkg_add /usr/ports/packages/i386/all/mysql-server-5.0.22.tgz

При необходимости создаем директорию /var/mysql:

# mkdir -p /var/mysql

# chown _mysql:_mysql /var/mysql

Настало время проверить работоспособность БД и запустить скрипт для создания типовых баз mysql и test:

# /usr/local/bin/mysql_install_db

Теперь в стартовом сценарии /etc/rc.local указываем опции для mysqld_safe - своего рода обертки, которая запускает mysqld с заданными параметрами, производит мониторинг состояния демона и при необходимости перезапускает главный процесс MySQL.

# vi /etc/rc.local

if [ -x /usr/local/bin/mysqld_safe ]; then

echo -n ' mysqld'

/usr/local/bin/mysqld_safe --user=_mysql \

--open-files=1000 --skip-networking \

--socket=/var/www/var/run/mysql/mysql.sock &

fi

Прокомментирую опции, которые мы указали при старте MySQL:

- --USER=_MYSQL - ЗАПУСК ДЕМОНА ОТ ИМЕНИ НЕПРИВИЛЕГИРОВАННОГО ПОЛЬЗОВАТЕЛЯ _MYSQL;

- --OPEN-FILES=1000 - МАКСИМАЛЬНОЕ ЧИСЛО ОТКРЫТЫХ ФАЙЛОВ;

- --SKIP-NETWORKING - MYSQLD НЕ ДОЛЖЕН БИНДИТЬСЯ НА СЕТЕВЫЕ АДРЕСА;

- --SOCKET=/VAR/WWW/VAR/RUN/MYSQL/MYSQL.SOCK - ТАК КАК НАША БД БУДЕТ ИСПОЛЬЗОВАТЬСЯ ТОЛЬКО ЛОКАЛЬНО УСТАНОВЛЕННЫМИ ПРОГРАММАМИ, РАБОТАЕМ ЧЕРЕЗ СОКЕТ;

- '&' - ВЫПОЛНЯЕМ ПЕРЕВОД MYSQLD_SAFE В ФОНОВЫЙ РЕЖИМ.

Чтобы не изобретать велосипед, давай возьмем предлагаемый разработчиками пример конфига MySQL, назначим ему корректные права доступа и отредактируем применительно к нашим задачам:

# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf

# chmod 644 /etc/my.cnf

# vi /etc/my.cnf

[client]

socket = /var/www/var/run/mysql/mysql.sock

[mysqld]

socket = /var/www/var/run/mysql/mysql.sock

skip-locking

key_buffer = 16M

max_allowed_packet = 1M

table_cache = 64

sort_buffer_size = 512K

net_buffer_length = 8K

myisam_sort_buffer_size = 8M

[mysqldump]

quick

max_allowed_packet = 16M

[mysql]

no-auto-rehash

Как ты мог заметить, главное отличие от дефолтного my-medium.cnf заключается в определении местоположения абсолютного пути до сокета клиента и сервера MySQL. Вместо /var/run/mysql/mysql.sock мы будем использовать /var/www/var/run/mysql/mysql.sock, поэтому своевременно подготавливаем соответствующую поддиректорию:

# mkdir -p /var/www/var/run/mysql

# chown _mysql:_mysql /var/www/var/run/mysql

Для хранения временных файлов необходимо создать каталог /var/www/tmp с либеральными правами доступа:

# mkdir -p -m 777 /var/www/tmp

С установкой и конфигурированием разобрались, переходим к запуску демона на орбиту:

# /usr/local/bin/mysqld_safe --user=_mysql --open-files=1000 \

--skip-networking --socket=/var/www/var/run/mysql/mysql.sock &

Проверяем, готов ли mysqld принимать входящие подключения:

Назад на стр. 069-050-1  Содержание  Вперед на стр. 069-050-3