Собираем три mysql-пакета - client, server, tests: # cd /usr/ports/databases/mysql # make package Для проверки работоспособности можно выполнить набор прилагаемых тестов: # make do-regress Устанавливаем прекомпилированный пакет клиентской части MySQL: # pkg_add /usr/ports/packages/i386/all/mysql-client-4.0.24.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-4.0.24p1.tgz При необходимости создаем директорию /var/mysql: # mkdir -p /var/mysql # chown _mysql:_mysql /var/mysql Запускаем скрипт для создания типовых баз mysql и test: # /usr/local/bin/mysql_install_db Воспользуемся рекомендованной разработчиками версией my.cnf: # cp /usr/local/share/mysql/my-medium.cnf /etc/my.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 skip-networking #log-bin #server-id = 1 [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash [isamchk] key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M [myisamchk] key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout #[mysqld-safe] #open-files = 2048 Подготавливаем директорию для сокета MySQL: # 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 Устанавливаем PHP со специальными расширениями: # pkg_add php4-core-4.4.1p0.tgz # pkg_add php4-mysql-4.4.1p0.tgz # pkg_add php4-pear-4.4.1p0.tgz Активируем модуль libphp4.so: # /usr/local/sbin/phpxs -s Воспользуемся рекомендованной разработчиками версией php.ini: # cp /usr/local/share/examples/php4/php.ini-recommended /var/www/conf/php.ini Выставляем корректные права доступа для php.ini: # chown root:www /var/www/conf/php.ini # chmod 640 /var/www/conf/php.ini Следующие строки в главном конфигурационном файле Apache должны быть раскомментированы: # vi /var/www/conf/httpd.conf LoadModule php4_module modules/libphp4.so DirectoryIndex index.html index.php AddType application/x-httpd-php .php .inc Необязательный шаг: в конфиге php.ini указываем абсолютный путь до сокета MySQL: # vi /var/www/conf/php.ini mysql.default_socket = /var/run/mysql/mysql.sock Активируем mysql-модуль: # /usr/local/sbin/phpxs -a mysql С помощью специального враппера запускаем mysqld: # /usr/local/bin/mysqld_safe & Проверяем, готов ли mysqld принимать входящие подключения: # fstat | grep mysql Создаем символическую ссылку: # ln -sf /var/www/var/run/mysql/mysql.sock /var/run/mysql/mysql.sock Задаем пароль суперпользователя БД: # /usr/local/bin/mysqladmin -u root password 'noidea' Для проверки "локально" подключаемся к серверу MySQL: % /usr/local/bin/mysql -u root -p Enter password: noidea Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 to server version: 4.0.24-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> В качестве дополнительной меры защиты можно удалить вспомогательную базу данных test, созданную скриптом mysql_install_db, все SQL'ые учетные записи, кроме root, а затем изменить имя главной учетной записи: % /usr/local/bin/mysql -u root -p mysql> drop database test; mysql> use mysql; mysql> delete from db; mysql> delete from user where not (host="localhost" and user="root"); mysql> flush privileges; mysql> update user set user="andrey" where user="root"; mysql> flush privileges; mysql> quit Для корректной работы электронной почты в Apache chroot необходимо установить статически слинкованную версию mini_sendmail: # cd /usr/port/mail/mini_sendmail # env SUBPACKAGE=-chroot make install # cp -p /bin/sh /var/www/bin # mkdir -p /var/www/etc # cp /etc/{hosts,resolv.conf} /var/www/etc И в php.ini указать абсолютный путь до mini_sendmail относительно /var/www: # vi /var/www/conf/php.ini sendmail_path = "/bin/mini_sendmail -fwww@domain.ru -t" Выполняем останов и повторный запуск httpd(8) # apachectl stop # apachectl start Чтобы проверить работу PHP, создаем файл test1.php: # vi /var/www/htdocs/test1.php <?php phpinfo() ?> Чтобы проверить работу PHP и MySQL в Apache chroot, создаем файл test2.php: # vi /var/www/htdocs/test2.php <html> <body> <?php mysql_connect("localhost", "andrey", "noidea") or die("failed"); print "ok"; mysql_close(); ?> </body> </html> Вот так можно получить информацию о совместной работе Apache, PHP и MySQL: % lynx http://localhost/test1.php % lynx http://localhost/test2.php Пример запуска mysqld из стартового rc-скрипта: # vi /etc/rc.local if [ -x /usr/local/bin/mysqld_safe ]; then echo -n ' mysqld'; /usr/local/bin/mysqld_safe > /dev/null 2>&1 & fi |