Поиск медленных запросов MySQL

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

Настройка логирования

Открываем конфигурацию для MySQL 5.5:

$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Внимание. В других версиях mysql файл с настройками возможно находится в другом месте. Например в /etc/my.cnf

В блоке [mysqld] дописываем следующие строки:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 30

Где:
slow_query_log — включаем отслеживание медленных запросов
slow_query_log_file — путь к лог файлу, куда будем записывать запросы
long_query_time — макс. время выполнения запроса в секундах, более — записываем в лог

Создаем лог файл

$ touch /var/log/mysql/slow-query.log

Даем права на запись:

$ chown mysql:mysql /var/log/mysql/slow-query.log

Перезагружаем mysql

$ sudo /etc/init.d/mysql restart

Просмотр лога запросов

Просмотр 10 последних запросов

$ tail /var/log/mysql/slow-query.log

В онлайн режиме смотрим самые долгие запросы

$ tail -f /var/log/mysql/slow-query.log

Просмотр 10 самых медленных

$ mysqldumpslow -t 10 /var/log/mysql/slow-query.log

Как включить mod_rewrite Ubuntu 14.04

mod_rewrite_logo

Самый простой способ включить mod_rewrite заключается в следующем.

  1. Активируем модуль:
    $ sudo a2enmod rewrite
  2. Перезагружаем апач
    $ sudo service apache2 restart
  3. Включите поддержку .htaccess, в виртуальном хосте
    $ sudo nano /etc/apache2/sites-available/000-default.conf

    И добавьте следующий текст между Directory «/var/www/html»> и /Directory>

    AllowOverride All

Ошибка при старте apache2

Хотел установить на сервере apache mod_proxy. После установки модуля, перестал стартовать апач.
Получал ошибку :

* Restarting web server apache2 (98)Address already in use: AH00072: make_sock: could not bind to address [::]:443
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:8081
no listening sockets available, shutting down
AH00015: Unable to open logs
Action ‘start’ failed.
The Apache error log may have more information.

Проблема решилась, путем редактирования файла ports.conf

$ sudo nano /etc/apache2/ports.conf

Нужно убрать дубликаты записей

Listen 80 или Listen 443
В моем случае, я закоментировал дубликат записи Listen 443

ports.conf

ports.conf

Git установка и настройка на примере bitbucket.

В этой статье, я хочу рассказать Вам, как устанавливается и настраиваться git на Ubuntu 14.04, и как подключить его к аккаунту на  bitbucket.

Bitbucket, я выбрал потому, что там можно бесплатно, использовать приватные репозитории.

git_logo-1024x480

Шаг 1. Установка Git.

Выполняем в терминале (Ctrl+Alt+T)

$ sudo apt-get install git

Настроим имя пользователя

$ git config --global user.name "FIRST_NAME LAST_NAME"

Укажем email

$ git config --global user.email "MY_NAME@example.com"

Шаг 2. Настройка SSH

Генерируем ключ

$ ssh-keygen

На все вопросы отвечаем нажатием Enter

Запустите ssh-agent

$ ps -e | grep [s]sh-agent

Добавляем ключ в ssh-agent

$ ssh-add ~/.ssh/id_rsa

Шаг 3. Установка ключа на Bitbucket

  1. Заходим на сайт bitbucket.org
  2. Кликаем по своей аватарке
  3. Выбираем «Управление аккаунтом» —> «SSH-ключи»
  4. В терминале выполняем
    $ cat ~/.ssh/id_rsa.pub
  5. Копируем результат команды, и вставляем в окно в браузере.
  6. Жмем добавить ключ

На этом все, осталось разве что клонировать ваш проект с Bitbucket, для этого нужно перейти в директорию где у вас должен лежать сайт, и выполнить в терминале :

$ git clone git@bitbucket.org:Your_login/your_repo.git

Более подробнее о том как работать с git, на сайтах: githowto.com и git-scm.com

Установка и настройка Apache, PHP, MySQL, phpMyAdmin на Ubuntu 14.04 LTS + 16.04 LTS

UPD. Статья обновлена до актуальной версии 24.08.2016
Однажды я уже писал статью, о том как установить  Lamp  на убунту, но с тех пор многие компоненты изменились, и соответственно, их установка изменилась.

Большинство команд выполняем в терминале (Ctrl+Alt+T)

Шаг 1. Установка Apache.

$ sudo apt-get install apache2

Далее перейдите по адресу http://localhost и вы должны увидеть стартовую страницу apache.

apache

Apache — стартовая страница.

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

apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1. Set the ‘ServerName’ directive globally to suppress this message

Откройте конфиг апача:

$ sudo nano /etc/apache2/apache2.conf

В конце файла добавьте строки:

ServerName 127.0.0.1

 

Шаг 2. Установка MySQL.

$ sudo apt-get install mysql-server mysql-client

В ходе установке, нужно задать пароль администратора баз данных.

mysql config

Установка пароля

Проверьте, установку:

$ sudo service mysql status

в ответ должны увидеть что-то типа если у вас Ubuntu 14.04:

$ mysql start/running, process 3470

Или если у вас Ubuntu 16.04:

1471984511297

Шаг 3. Установка PHP

Для Ubuntu 16.04

Внимание! Если у вас Ubuntu 16.04 и выше тогда перейдите СЮДА

Для Ubuntu 14.04

$ sudo apt-get install php5 php5-mysql libapache2-mod-php5

Шаг 3.1 Проверка работы PHP

Создадим файл test.php

$ sudo nano /var/www/html/test.php

Добавим следующее содержание

<?php
phpinfo();
?>

И откроем в браузере ссылку: http://localhost/test.php

Вы должны увидеть информацию о установленном php, его версию, модули, и т.д.

phpinfo

Информация о PHP

Шаг 3.2 Настройка php.ini

Откроем php.ini для редактирования.
Для Ubuntu 14.04

$ sudo nano /etc/php5/apache2/php.ini

Для Ubuntu 16.04 PHP 5.6

$ sudo nano /etc/php/5.6/apache2/php.ini

Для Ubuntu 16.04 PHP 7.0

$ sudo nano /etc/php/7.0/apache2/php.ini

Находим директиву short_open_tag , и включаем ее, заменяем off на on

Этим мы включили  возможность использования коротких тегов php: <? ?>

P.S Из-за этой настройки, я два вечера не мог разобраться, почему у меня не работал скрипт, и выдавал ошибку:

Parse error: syntax error, unexpected ‘}’ in …

Раньше данная директива по-умолчанию была включена

Шаг 4. Установка phpMyAdmin.

$ sudo apt-get install phpmyadmin

Отвечаем на все вопросы, заданные при установке.
Проверим установку, перейдя по адресу http://localhost/phpmyadmin/

Вы увидите страничку авторизации.

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

phpmyadmin

phpMyAdmin — авторизация

Шаг 5. Настройка виртуальных хостов.

Для удобства я размещаю свои сайты в домашней директории.

Создадим каталог в котором будет размещены наши сайты.

$ mkdir www

Далее каталог нашего сайта.

$ mkdir www/site.com

Создадим тестовый файл

$ nano www/site.com/index.php

И напишем что-то для проверки:

<?php echo '<h1>Hello world</h1>'; ?>

Создаем новый виртуальных хост.

Копируем файл шаблона.

$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/site.com.conf

Открываем его для редактирования.

$ sudo nano /etc/apache2/sites-available/site.com.conf

Вставляем следующие строки:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName site.com
DocumentRoot /home/gansik/www/site.com
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /home/gansik/www/site.com/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Обратите внимание, не забудьте подставить свои данные.
gansik — имя моего пользователя

site.com — адрес моего сайта.

Включаем наш сайт

$ sudo a2ensite site.com

Перезагружаем apache

$ sudo service apache2 restart

Редактируем hosts, для того, чтобы мы могли зайти на сайт, по нашему адресу.

$ sudo nano /etc/hosts

В первой строке, после localhost, добавим адрес нашего сайта site.com 

hosts

Hosts

Сохраняем, закрываем, и переходим по адресу нашего локального сайта site.com  , в ответ мы должны увидеть Hello world.

На этом вся настройка завершена

Пара ошибок веб-сервера, после обновления до Ubuntu 13.10

На днях обновился до очередной новой версии Ubuntu 13.10 Saucy salamander. Все прошло без проблем и достаточно быстро (около 30 мин.).

Ubuntu-13-10-Saucy-Salamander-Has-Officially-Started

Ubuntu 13.10 Saucy Salamander

Не запускается apache

Перегрузился,  и попытался запустить свой локальный сайт.

Опа, а сайт то не открылся, веб-сервер не доступен.

Попытался запустить его вручную:

$ sudo /etc/init.d/apache2 start

В ответ ошибка:

$ sudo service apache2 restart
* Restarting web server apache2 [fail]
* The apache2 configtest failed.
Output of config test was:
AH00526: Syntax error on line 84 of /etc/apache2/apache2.conf:
Invalid command 'LockFile', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
The Apache error log may have more information.

Решение

Открываем для редактирования конфиг апача, например через gedit:

$ sudo gedit /etc/apache2/apache2.conf

находим строку:

LockFile ${APACHE_LOCK_DIR}/accept.lock

И заменяем ее на :

Mutex file:${APACHE_LOCK_DIR} default

И снова запускаем апач. Сервер должен запустится.

$ sudo /etc/init.d/apache2 start

Не работает функция strtotime()

После удачно запуска веб-сервера снова попытался открыть свой сайт. Сайт открывался, но посыпались ошибки php функции strtotime:

Warning: strtotime() [function.strtotime]: It is not safe to rely on the system’s timezone settings. You are required to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier…

Решение

Как видно из текста ошибки нам нужно установить значение date.timezone в конфигурации php.
Открываем для редактирования php.ini

$ sudo gedit /etc/php5/apache2/php.ini

Находим строку:

date.timezone

Раскомментируем ее, убрав точку с запятой (;) перед ней.
И подставляем значение своей временной зоны.
Например для Украины это «Europe/Kiev», для России — «Europe/Moscow», Беларусь — «Europe/Minsk»,
с полным списком можно ознакомится здесь: http://php.net/date.timezone
В итоге строка должна выглядеть вот так:

date.timezone = «Europe/Kiev»

Сохраняем и перезапускаем наш апач:

$ sudo /etc/init.d/apache2 restart

На этом и все. Теперь функция strtotime() должна корректно работать.

Установка и настройка LAMP (Apache, MySQL, PHP)

Решил написать статью как заметку для самого себя, ведь не возможно все запомнить, заодно и кому то будет полезно.

LAMP — набор серверного программного обеспечения, для работы и разработки веб-приложений (Linux, Apache, MySQL, PHP)

И так начнем с установки самого основного. Apache, MySQL, PHP

sudo apt-get install apache2 php5 php5-mysql mysql-server

Отвечаем на все вопросы походу установки (задаем пароль для root-пользователя mysql)

Установки phpMyAdmin

sudo apt-get install phpmyadmin

Отвечаем на вопросы.

На первый выбираем apache (вы бор делаем нажатием на пробел).

Настроить базу данных для phpmyadmin с помощью dbconfig-common?

Выбираем — Да.

Вводим пароль рута mysql, и задаем пароль для пользователя phpmyadmin

После установки, переходим  по адресу http://localhost/  и вы должны увидеть надпись вида:

It works!

This is the default web page for this server.

Если надпись вы увидели, значит все хорошо. Первый шаг готов.

PhpMyAdmin должен открыться по адресу: http://localhost/phpmyadmin/

Настройка

Для начала пропишем в hosts домен нашего будущего сайта.
sudo nano /etc/hosts

в  первой строке, после 127.0.0.1       localhost через пробел прописываем свои домены по которым будет доступен сайт.

например у меня выглядит это вот так:

что бы сохранить нажимаем Ctrl-O, Enter, Ctrl+X

Чтоб апач на ругался на  отсутствие название сервера настроим его.

sudo nano /etc/apache2/apache2.conf

В конце файла напишем

ServerName 127.0.0.1

Настройка виртуальных хостов

Далее настроим возможность работы нескольких сайтов.

Переходим в папку с хостами

cd /etc/apache2/sites-available/

Копируем настройки в новый файл (будущего сайта)

sudo cp ./default ./auto.dev

Вместо auto.dev — домен вашего сайта.

откроем наш новый файл настройки хоста.

sudo nano auto.dev

Вставим следующую запись:

[spoiler]

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName auto.dev
DocumentRoot /home/gansik/www/auto.dev
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /home/gansik/www/auto.dev>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory «/usr/lib/cgi-bin»>
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ «/usr/share/doc/»
<Directory «/usr/share/doc/»>
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>

[/spoiler]

Не буду объяснять значение  всех директив, их описание вы легко сможете найти в гугле. Прокомментирую лишь самые важные, которые вы должны изменить под себя.

ServerAdmin webmaster@localhost — почта админа

ServerName auto.dev — название сервера

DocumentRoot /home/gansik/www/auto.dev — путь к папке с сайтом для удобства я размещаю его в домашней директории

<Directory /home/gansik/www/auto.dev>  — путь к папке с сайтом.

AllowOverride All — включаем возможность использование .htaccess

Далее включаем наш сайт

sudo a2ensite auto.dev

Вместо auto.dev — домен вашего сайта.

Перезагрузим апач.

sudo service apache2 reload

В корневой директории сайта создайте файл index.php c содержанием:

<?php

phpinfo();

?>

Откройте ваш сайт в браузере. Вы должны увидеть информацию о текущем статусе php. Если вы эту надпись увидели — поздравляем. Все прошло отлично. И теперь вы полноценно можете заниматься разработкой веб-приложений:)

Дополнительная информация.

Меняем пользователя от которого работает апач.

sudo nano /etc/apache2/envvars

Найдите строки:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Изменяем www-data на тот который нужен

 

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