Рано или поздно изучая unix вы столкнетесь с сервером apache. Обычно он уже стоит в системе, если вы только при инсталляции ОС не выбрали минимальную установку. Скорей всего с apache у вас также будет стоять и php c mysql. Если это так, то данная статья вряд ли поможет разобраться с проблемой что там у вас не работает 🙂
Я всегда предпочитаю ставить эту связку сам и по возможности пересобираю все пакеты под свою систему. Т.к. у меня сайт про общий unix, то в данной статье я расскажу метод установки из исходников, который будет работать в любой unix like системе. Вам только останется разобраться куда прописать в стартовые скрипты запуск mysql и apache.
Итак поехали..
Установка mysql
Первым делом качаем исходные тексты с официального сайта mysql.com или с русскоязычного mysql.ru. На сегодняшний момент пока рекомендуют версию 5.0.xx. Компилируем со следующими параметрами
#./configure --prefix=/usr/local/mysql --with-mysqld-user=mysql
затем
#make
#make install
Создаем пользователя и группу mysql, используя команду adduser.
Переходим в каталог /usr/local/mysql и выставляем права на запись пользователю mysql на директорию баз ./var. Также для директории баз выставим маску 700, чтобы никто кроме данного пользователя (ну и root) не смог попасть в эту директорию.
#cd /usr/local/mysql
#chown -R mysql:mysql ./var
#chmod 700 ./var
Устанавливаем тестовую базу mysql. Для этого запускаем от пользователя root бинарник
#/usr/local/mysql/bin/mysql_install_db
Внутри директории баз должен появиться каталог тестовой базы mysql. Также внимательно посмотрите на вывод команды mysql_install_db, там будет сказано как запускать mysql и как выставить админский пароль. В принципе все, можно пробовать запускать mysql.
Проверить запущена или нет
#ps aux | grep mysql
Должна показать, что процессы mysql запущены. Теперь можно пробовать соединиться, но перед этим обязательно задайте пароль root для баз mysql. Выход из mysql – \q.
#/usr/local/mysql/bin/mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 61
Server version: 5.0.91-log Source distribution
mysql> \q
Bye
Важные моменты если что-то не работает.
Смотреть лог mysql – /usr/local/mysql/var/имя_хоста.err
Посмотреть права на каталог /var/run/mysql, этот каталог должен принадлежать пользователю mysql. Внутри каталога есть файл mysql.sock, файл должен принадлежать пользователю и группе mysql:mysql и иметь маску файла 777. Я бы еще рекомендовал сделать симлинк на этот файл из каталога /tmp
#cd /tmp
#ln -s /var/run/mysql/mysql.sock mysql.sock
Возможно сервер будет ругаться на отсутсвие файла my.cnf. Для примера можете взять мой и положить в корень каталога /usr/local/mysql. Права файла поставьте mysql:mysql 660. Это файл общих и тонких настроек сервера mysql.
Т.к. мы создали собственный каталог для mysql, то пропишите пути до бинарных файлов mysql (/usr/local/mysql/bin) в переменную PATH, чтобы не набирать полностью /usr/local/mysql/bin/команда. Обычно переменная PATH уже прописана в файле /etc/profile или можно задавать ее для каждого пользователя системы в файле /home/user/.bash_profile.
Также сделайте символические ссылки, это надо в дальнейшем, чтобы конфигуратор php нашел наш mysql сервер.
ln -s /usr/local/mysql/include/mysql /usr/include/mysql
ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
Установка apache
Скачиваем последнюю версию apache2. Я предпочитаю стабильную ветку 2.2.xx. Конфигурируем и устанваливаем
#./configure --enable-so --enable-cgi --enable-rewrite --prefix=/usr/local/apache2
#make
#make install
Дополнительные параметры вы всегда можете посмотреть и выбрать из ./configure –help.
Чтобы упростить себе жизнь скачиваем этот файл конфигурации http.conf и кладем его в каталог /usr/local/apache2/conf, предварительно сохранив оригинальный файл под другим названием.
По желанию изменяем в httpd.conf ваш email, вашу дефолтную кодировку сервера ну и другие параметры. Пока не надо раскомментировать загрузку модуля php.
Перед первым запуском обязательно меняем владельца каталога /usr/local/apache2/logs на пользователя от которого будут стартовать процессы apache сервера. В нашем случае пользователь apache (имейте ввиду, что данный пользователь должен уже быть создан в системе).
#chown -R apache:apache /usr/local/apache2/logs
Старт apache
#/usr/local/apache2/bin/apachectl start
#/usr/local/apache2/bin/apachectl stop - остановить сервер
В логах должна появиться запись, что apache стартовал. Пробуем открыть в браузере, http://ip_host_apache.
Установка php
На самом деле, нам весь php ставить совсем не надо, мы только установим модуль php для apache. Т.е. у нас в конечном итоге не будет в системе полностью установленного php.
Скачиваем последний php 5 версии. Конфигурируем со множественными опциями, чтобы на нашем apache работали всевозможные графические модули и библиотеки используемые в php. Обратите внимание, что в конфигураторе мы указываем уже на пути по которым у нас установлен apache и mysql.sock файл.
./configure --with-apxs2=/usr/local/apache2/bin/apxs \
--with-readline \
--with-mysql=/usr/local/mysql \
--with-mysql-sock=/var/run/mysql/mysql.sock \
--disable-ipv6 \
--with-gettext=/usr/bin \
--with-gd \
--with-jpeg-dir=/usr/local/bin/ \
--with-zlib-dir=/usr/lib/ \
--with-openssl \
--with-db4
Возможно, что конфигуратор не сможет найти часть пакетов или библиотек, которые понадобятся при компиляции. Будет возникать ошибка на не найденном пакете. Просто устанавливаете необходимый пакет и запускаете конфигуратор по новой. Если все прошло без ошибок, можно выполнить команду makе.
После успешной компиляции make install делать не надо (конечно, если вы не хотите полностью установить php в систему), достаточно скопировать один модуль php libphp5.so из каталога ./libs исходников php. Модуль копируется в каталог /usr/local/apache2/modules. Перед копированием я рекомендую сделать обрезание данного модуля командой strip – это существенно уменьшит размер модуля.
#cd /путь_до_libphp5.so
#strip ./libphp5.so
После копирования можно раскомментировать строку в файле apache.conf
LoadModule php5_module modules/libphp5.so
Можно перезапускать/запускать apache. Ниже команда перезапуска сервера.
#/usr/local/apache2/bin/apachectl restart
Проверить как работает php модуль очень просто. Создайте файл test.php в корне вашего сайта /usr/local/apache2/htdocs с таким содержимым
<?php phpinfo() ?>
Теперь в браузере наберите http://ip_host_apache/test.php должна открыться страничка с данными о сборке php
Если вы это не видите, значит что-то не так и скорей всего не так в файле http.conf. Попробуйте первым делом почитать логи apache.
За дополнительными настройками сервера apache советую прочитать статью Полезности при конфигурировании apache сервера.
Теперь осталось только прописать старт mysql и apache в стартовые скрипты вашей ОС.
mik
после того как задаю пароль пользователю выдает ошибку из за чего такое может происходить?
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
проверьте есть ли файл /tmp/mysql.sock. По умолчанию его может и не быть. Если его нет прочтите раздел насчет ошибок mysql 🙂 там сказано что делать.
вроде нет такого файла, пробовал сам создавать но он удалился а поповоду ошибок mysql это нужно в INSTALL-SOURCE читать?
не понял как это он удалился? создайте файл убедитесь что он есть и запускайте команду которую хотели.
Я имел ввиду раздел моей статьи “Важные моменты если что-то не работает” в подразделе про mysql. Команда
ps aux | grep mysql
что возвращает?mysql.sock создаю но все равно та же ошибка.
grep вот что возвращает
Sergey 22126 0.0 0.0 7568 872 pts/0 S+ 01:01 0:00 grep mysql
вот сам лог
110927 01:04:41 mysqld started
nohup: ввод игнорируется
110927 1:04:41 [Warning] No argument was provided to –log-bin, and –log-bin-index was not used; so replication may break when this MySQL server acts as a master and has his hostname changed!! Please use ‘–log-bin=sergey-bin’ to avoid this problem.
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
110927 1:04:41 InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files…
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer…
110927 1:04:41 InnoDB: Started; log sequence number 0 43655
110927 1:04:41 [Note] /usr/local/mysql/libexec/mysqld: ready for connections.
Version: ‘5.0.92-log’ socket: ‘/var/run/mysql/mysql.sock’ port: 3306 Source distribution
root@sergey:/usr/local/mysql/var#
судя по grep у вас просто не стартует демон mysqld, поэтому дальше ничего и не получается..
В логах советуют запускать с ключами “–log-bin=sergey-bin”
А вы точно сделали тестовую базу? (команда mysql_install_db)
Кстати почитайте лог в каталоге баз (по моим путям это /usr/local/mysql/var/имя_хоста.err) Может там будет более понятно почему не запускается корректно демон.
Хотя вроде в конце у вас пишет что “mysqld: ready for connections”, а через grep его нет. Непонятно…
вот лог из /usr/local/mysql/var
110927 01:04:41 mysqld started
nohup: ввод игнорируется
110927 1:04:41 [Warning] No argument was provided to –log-bin, and –log-bin-index was not used; so replication may break when this MySQL server acts as a master and has his hostname changed!! Please use ‘–log-bin=sergey-bin’ to avoid this problem.
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
110927 1:04:41 InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files…
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer…
110927 1:04:41 InnoDB: Started; log sequence number 0 43655
110927 1:04:41 [Note] /usr/local/mysql/libexec/mysqld: ready for connections.
Version: ‘5.0.92-log’ socket: ‘/var/run/mysql/mysql.sock’ port: 3306 Source distribution
запустил еще раз
Installing MySQL system tables…
OK
Filling help tables…
OK
вроде все прошло успешно
пробовал запускать
./mysql.server start выдает
Starting MySQL
..Manager of pid-file quit without updating file. … failed!
Давайте так. Очистите файл ошибок в /usr/local/mysql/var.
Попробуем запустить не скриптом, а через бинарник с опциями.
Проанализировав ваши пути я думаю вам подойдет такая строка запуска:
Предварительно проверьте чтобы был удален mysql.pid файл. Скорее всего он находится в папке /var/run/mysql/ .
/usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/var --pid-file=/var/run/mysql/mysql.pid --skip-networking --log-bin=sergey-bin
Ну и теперь что в логе ошибок появилось?
1.пробовал через терминал вашу строкувыполнить вот что выдает
nohup: ввод игнорируется, поток ошибок перенаправляются на стандартный вывод
Starting mysqld daemon with databases from /usr/local/mysql/var
2.по пути /var/run/mysql mysql.pid отсутствует также попробовал locate путей не выдал похоже его просто нет
3.вроде все тоже самое лог из usr/local/mysql/var
110928 23:46:50 mysqld started
nohup: ввод игнорируется
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
110928 23:46:50 InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files…
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer…
110928 23:46:50 InnoDB: Started; log sequence number 0 43655
110928 23:46:51 [Note] Recovering after a crash using dorban-bin
110928 23:46:51 [Note] Starting crash recovery…
110928 23:46:51 [Note] Crash recovery finished.
110928 23:46:51 [Note] /usr/local/mysql/libexec/mysqld: ready for connections.
Version: ‘5.0.92-log’ socket: ‘/var/run/mysql/mysql.sock’ port: 0 Source distribution
По 1 пункту. После ввода строки терминал должен как бы зависнуть и не возвращать строку ввода. Можно понажимать ввод чтобы убедиться что строка ввода команд не появляется. Такое происходит?
Если да, то значит mysql запустился и результаты ошибок или сообщений будут вываливаться на эту консоль. В этом случае открываем другую консоль и проверяем командой grep что сервер запущен.
Также можно проверить наличие pid файла запуска и файла сокета mysql.sock.
Остановить сервер можно запустить скрипт с параметром stop
По 2 пункту. Значит сервер не запущен.
А по последнему – сервер сначала говорит что был некорректно завершен, (что мы уже видели в прошлых логах), а потом якобы запускается.. Заметьте, что уже нет в логе строки насчет “–log-bin=sergey-bin”, т.к. мы с ней запускали.
Я только могу предположить что сервер запускается, а потом через какое то время “падает”.. А вот почему это происходит я не вижу по логам. Может через некоторое время еще раз в лог заглянуть мало ли что добавится туда?
Еще можно глянуть общесистемные логи типа /var/log/messages, /var/log/system
А какая система? ставили из пакета или по моей статье собирали сами?