Оптимизация myisam таблицы при помощи myisamchk

26 Декабрь 2012 Comments off

Для оптимизации myisam таблицы можно использовать команду optimize table или утилиту myisamchk:

myisamchk -r table_name

если при этом выдается ошибка myisamchk: error: myisam_sort_buffer_size is too small, то увеличиваем размер буфера:

myisamchk --sort_buffer_size=2G -r table_name

Categories: mysql

планировщик для дисковых устройств в Linux

19 Ноябрь 2012 Comments off

Поменять планировщик для дискового устройства /dev/sdc можно командой:
echo noop > /sys/block/sdc/queue/scheduler
В данном случае мы установили noop-планировщик, который может быть полезен при работы по iscsi с дисковым хранилищем.

Categories: linux

Исследование причин ошибки Segmentation fault в Apache

15 Октябрь 2012 Comments off

Бывают ситуации, когда процесс апача падает, а в логе остается лишь запись типа «[Thu Oct 11 17:30:03 2012] [notice] child pid 1266 exit signal Segmentation fault (11)«. Чтобы разобраться в причинах, можно использовать файл coredump. Для того, чтобы этот файл создавался при падении апача, нужно сделать следующее:
выполнить команду

echo «/tmp/httpd-core.%p» > /proc/sys/kernel/core_pattern

добавить в скрипт старта апача

ulimit -c unlimited

прописать в конфиг апача (/etc/apache2/apache2.conf)

CoreDumpDirectory /tmp

Установить gdb из backports:

echo «deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free» > /etc/apt/sources.list
apt-get update && apt-get install -t squeeze-backports gdb

Анализировать полученные core-файлы нужно при помощи gdb:

gdb /usr/sbin/apache2 core_файл

Посмотреть список фреймов:

backtrace

Посмотреть фрейм (в данном случае 3-й) и переменные:

frame 3

info local

По мотивам https://bugs.php.net/bugs-generating-backtrace.php и http://habrahabr.ru/company/bitrix/blog/153001/?#habracut

Categories: apache

регистронезависимый Location в Nginx

4 Октябрь 2012 Comments off

Для решения задачи, аналогичной http://dmnd.ru/handbook/apache/34 но для nginx, можно использовать следующие директивы:

location ~* ^/someurl {

allow 192.168.0.1;
deny all;

}

 

Categories: nginx

Дампим данные из mysql на другой сервер через ssh

28 Сентябрь 2012 Comments off

Есть типичная задача: сдампить таблицу и перенести ее на другой сервер (например, для бэкапа). Сделать это просто — сначала дампим данные в файл, потом архивируем его (если файл большой), копируем на целевой серврер при помощи scp и там разархивируем. Но это все занимает время. Можно сделать все в одну команду:

 mysqldump -ppass db table  | gzip -c | ssh user@target_server «gunzip -c — > /data/backup/table.sql»

здесь мы дампим таблицу table базы db, передаем ее на сервер  target_server и разархивируем в файл  /data/backup/table.sql. Если разархивировать не нужно, то команда немного изменится:

 mysqldump -ppass db table | gzip -c | ssh user@target_server «cat — > /data/backup/table.sql.gz»

Categories: mysql

Редирект с исключением в Apache

24 Сентябрь 2012 Comments off

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

 

 RedirectMatch permanent ^/(?!server-status) https://site.ext/

в данном случае все запросы кроме /server-status будут редиректиться на https://site.ext/

 

Categories: apache

Исключения в LocationMatch правиле в Apache

21 Сентябрь 2012 Comments off

Для ограничения доступа к адресам вида example.site/page/edit/11 с определенных ip-адресов и разрешения доступа для всех к остальным (example.site/page/edit/12) можно использовать следующие правила:

  <LocationMatch (?i:/page/edit/11)>
Order deny,allow
Deny from all
Allow from 192.168.0.1
</LocationMatch>

<LocationMatch (?i:/page/edit/(?!11))>
Order allow,deny
Allow from All
</LocationMatch>

Categories: apache

Статика с кешированием у клиента через nginx

18 Сентябрь 2012 Comments off

Для отдачи статики через nginx с кешированием у клиента достаточно добавить секцию для location:

location /themes {
root /var/www/site/; # Путь к корню вашего сайта
access_log off; # не пишем логи
expires 30d; # кешируем у клиента на 30 дней
}

В данном случае, при обращении к урлу http://yoursite.ext/themes/img/pic.jpg, nginx будет искать pic.jpg в папке  /var/www/site/themes/img/.

Categories: nginx

Первый день месяца на mysql

3 Сентябрь 2012 Comments off

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

 

 select DATE_SUB(curdate(),INTERVAL DAYOFMONTH(curdate())-1 DAY)

 

 

Categories: mysql

Размер таблицы в БД Mysql (данные и индексы)

15 Август 2012 Comments off

Узнать размер таблицы (в байтах, данные+индексы) table в базе db можно в таблице TABLES базы INFORMATION_SCHEMA:

select data_length+index_length from information_schema.tables where table_name=’table’ and table_schema=’db’

Чтобы отсортировать таблицы по размеру, можно использовать следующий запрос:

select table_name,data_length+index_length as len from information_schema.tables order by len desc

если таблицы большие, то удобнее размер выводить в гигабайтах (возьмем первые 20 таблиц):

select table_name,round((data_length+index_length)/1024/1024/1024,2) as len from information_schema.tables order by len desc limit 20

Categories: mysql