Конфига мускула зависят от размера базы, размера оперативы, характера нагрузки и тд.
Но для сервака порядка Xeon 5150 / 2GB и средней нагрузки можно для начала так:
[mysqld]
bind-address = 127.0.0.1
datadir=/home/mysql/myisam
port = 3306
socket = /tmp/mysql.sock
skip-locking
Для выявление тормозных запросов можно использовать slow log, mytop.
Посмотреть эффективность кэширование:
mysqladmin extended-status | egrep Qcache
Qcache_free_blocks показывает сколько свободных блоков есть в кеше;
Qcache_total_blocks – количество занятых блоков;
Qcache_free_memory говорит о том, сколько свободной памяти осталось в кеше;
Qcache_hits – количество запросов, результаты которых были взяты из кеша;
Qcache_inserts – количество запросов, которые были добавлены в кеш;
Qcache_lowmem_prunes – количество запросов, которые были удалены из кеша из-за нехватки памяти;
Qcache_not_cached – количество запросов, которые не были записаны в кеш из-за использования функций работы со временем и т.п.;
Qcache_queries_in_cache – количество запросов, которые находятся в кеше.
После начала эксплуатации еще хорошо посмотреть что о настройках скажет
Важный момент (FreeBSD):
Необходимо следить, чтобы размер процесса mysqld не превысил максимального размера памяти доступного для одного процесса. Если используется FreeBSD c архитектурой i386, то по умолчанию этот размер равен 512MB. Если произойдет превышение, то в логе мускуля будут такие сообщения: “/usr/local/libexec/mysqld: Out of memory (Needed 2375270 bytes)”. Чтобы увеличить это значение необходимо сделать kern.maxdsiz=1073741824 в /boot/loader.conf
Посчитать объем памяти, который займет mysqld можно по этой формуле: key_buffer_size + (read_buffer_size + sort_buffer_size)*max_connections
то пункт “server_names” надо убрать из valid_referers
Естественно если уже сделана прямая отдача статики, то надо конструкцию valid_referes … писать внутри того Location
Если надо заблокировать трафик с определенных рефереров, то в nginx делаем так:
варианты:
1. патч на бсд, sendfile on, переформатить разделы под размер блока в 64К http://www.lexa.ru/nginx-ru/msg19477.html
2. sendfile off, output_buffers 1 1m; http://www.lexa.ru/nginx-ru/msg20623.html
создать файл с правилами, проверить что в них нам будет доступ по ssh. Например такой:
#!/bin/sh
ipfw -q -f flush
cmd="ipfw -q add "
sshport="222"
# remote control
$cmd 150 allow tcp from 1.2.3.1 to me dst-port $sshport
# services
$cmd 1000 allow icmp from any to any
$cmd 1020 allow tcp from any to me dst-port 21,25,80
$cmd 1021 allow udp from any 53 to me
$cmd 1022 allow udp from any to me 53
$cmd 1023 allow udp from any to me 161
# general
$cmd 1035 allow ip from any to any via lo0
$cmd 1040 allow ip from me to any
$cmd 1050 allow ip from any to any established
# all traffic for some hosts
$cmd 1070 allow ip from 1.2.3.1 to me
/etc/rc.d/ipfw forcestart &
система сама подгрузит модуль ядра. Необходимо отметить, что в данном случае последним будет добавлено правило запрещающее весь трафик, поэтому нужно убедиться, что мы не отключим доступ для нас самих.
Перед включением рекомендуется поставить задачу в кронтаб, на всякий случай, чтобы сработала через пару минут:
25 22 * * * root ipfw -q add 10 allow all from any to any
# если активно используется sendfile в nginx то стандартного количества буферов может не хватать. см netstat -m
kern.ipc.nsfbufs=30240
### только если планируется десятки тысяч соединений. для i386 надо в ядро options KVA_PAGES=512
### vm.kmem_size=1073741824
при любой системе (надо ли? вроде как повышает вероятность ддоса)