Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: оптимальный настройки mysql (my.cnf)
 
 автор: !!!Леха   (22.09.2007 в 14:44)   письмо автору
 
 

Добрый день.
На сайт заходят 12 тыс. хостов, просматривают 200 тыс. страниц.
В онлайн висят более 200 человек
Сайт всегда в "жопе" полной в час пик из за мускуля.
Подскажите что исправить в конфиге -- чтоб сайт летал.
FreeBSD
Pention 3.2 Xeon
4Гб апперативки
Заранее спасибо!


[mysqld]

user=leha
init-connect="SET NAMES cp1251"
datadir=/home/mysql
#log=/var/tmp/mysql.log
#log-slow-queries=/home/www/logs/slow-queries.log
#long_query_time = 3

sql-mode=NO_UNSIGNED_SUBTRACTION
set-variable=query_cache_size=524288
set-variable=bulk_insert_buffer_size=524288
set-variable=key_buffer=16M
set-variable=max_allowed_packet=1M
set-variable=table_cache=64
set-variable=sort_buffer_size=512K
set-variable=net_buffer_length=8K
set-variable=myisam_sort_buffer_size=8M
skip-innodb
port=3306
socket=/tmp/mysql.sock
skip-external-locking
default-character-set=cp1251

set-variable=interactive_timeout=120
set-variable=wait_timeout=120

set-variable=delayed_insert_limit=0
set-variable=delayed_insert_timeout=0
set-variable=delayed_queue_size=5
set-variable=max_delayed_threads=0

max_connections=50


#log-bin
#server-id    = 1
# Point the following paths to different dedicated disks
#tmpdir        = /tmp/        
#log-update     = /path-to-dedicated-directory/hostname
# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /usr/local/var/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /usr/local/var/
#innodb_log_arch_dir = /usr/local/var/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#set-variable = innodb_buffer_pool_size=16M
#set-variable = innodb_additional_mem_pool_size=2M
# Set .._log_file_size to 25 % of buffer pool size
#set-variable = innodb_log_file_size=5M
#set-variable = innodb_log_buffer_size=8M
#innodb_flush_log_at_trx_commit=1
#set-variable = innodb_lock_wait_timeout=50
[mysqldump]
quick
set-variable=max_allowed_packet=16M

[mysql]
default-character-set=cp1251
no-auto-rehash

[isamchk]
set-variable=key_buffer=20M
set-variable=sort_buffer_size=20M
set-variable=read_buffer=2M
set-variable=write_buffer=2M

[myisamchk]
set-variable=key_buffer=20M
set-variable=sort_buffer_size=20M
set-variable=read_buffer=2M
set-variable=write_buffer=2M

[mysqlhotcopy]
interactive-timeout

[mysql.server]
user=tonnel
log-error=/dev/null

   
 
 автор: cheops   (22.09.2007 в 15:20)   письмо автору
 
   для: !!!Леха   (22.09.2007 в 14:44)
 

В секции [mysqld]
>set-variable=query_cache_size=524288
set-variable=query_cache_size=128M
>set-variable=key_buffer=16M
set-variable=key_buffer=1024M
С таким количеством памяти можете смело и больше ставить, но думаю 1Гб вместо 16Мб уже сильно проще будет. Эффект проявится не сразу, но когда ключи переползут с диска в оперативную память - проблемы должны исчезнуть.
>set-variable=max_allowed_packet=1M
Это максимальный размер SQL-запроса - сделайте 128M
>set-variable=sort_buffer_size=512K
set-variable=sort_buffer_size=8M
>max_connections=50
max_connections=200

После этого перегрузите MySQL-сервер

PS С таким количеством памяти и такой нагрузкой - у вас всё летать должно.

   
 
 автор: !!!Леха   (22.09.2007 в 15:40)   письмо автору
 
   для: cheops   (22.09.2007 в 15:20)
 

Спасибо большое.
Исправлю конфиг -- отпишусь летает ли;)

   
 
 автор: !!!Леха   (22.09.2007 в 19:10)   письмо автору
 
   для: !!!Леха   (22.09.2007 в 15:40)
 

Пока результата -- ноль. Говорят что дос аттака идет. но зато часто выдает не удалось подключиться к сервер мускуль.
mysql-server-5.0.33
подлючается через @mysql_pconnect
и нигде не закрывается
В чем может быть проблема?

   
 
 автор: cheops   (23.09.2007 в 10:12)   письмо автору
 
   для: !!!Леха   (22.09.2007 в 19:10)
 

1) mysql_pconnect() лучше не использовать - используйте mysql_connect() - чем быстрее отработает процесс, тем лучше.
2) Если ДОС-атака нужно смотреть логи - вычислять IP-адреса умельцев
3) Таблицы индексированы?

   
 
 автор: !!!Леха   (24.09.2007 в 13:28)   письмо автору
 
   для: cheops   (23.09.2007 в 10:12)
 

Спасибо Вам большое. Сайт летает ;)
Но вот конкуренты досс-атаку травят, тогда тяжело грузится канал, а не сам скрипт.
А где айпи аттакующих собираются? В access_log или в других логах?
И ещё один вопросик, чем отличается pconnect ot connet?
Я читал что pconnect лучше потому что он не закрывает базы, а при выполнение скрипта -- он автоматом все что нужно закрывает.

Заранее ещё раз спасибо.

   
 
 автор: cheops   (24.09.2007 в 14:48)   письмо автору
 
   для: !!!Леха   (24.09.2007 в 13:28)
 

>А где айпи аттакующих собираются? В access_log или в других логах?
Да, следует отпарсить access_log и посмотреть IP-адреса откуда наиболее часто происходят обращения (лучше даже по интервалам времени разбить) - только следует проследить, чтобы не задать роботов поисковых систем.

>Я читал что pconnect лучше потому что он не закрывает базы, а при выполнение скрипта -- он
>автоматом все что нужно закрывает.
В принципе это справедливо, если вы создаёте клиента базы данных, использующего протокол СУБД MySQL. Однако, при обращении из Apache/PHP связь в любом случае рвётся со стороны потока Apache - а будет ли в следующий момент этот поток обращаться к MySQL или займётся выдачей клиенту картинки или статического файла не факт - скорее всего соединение будет просто висеть, а PHP откроет новое (так как обращаться к открытому соединению нужно с того же процесса, что его открыл) - если все 50 (теперь) процессов заняты (да хоть бы и сном) - остальные клиенты будут ждать. В результате накапливается море висящих процессов, которые просто спят, и занимают память - а когда серверу вдруг понадобится море памяти, например, чтобы выстоять в атаке - она оказывается вся занята ожидающими непонятно чего MySQL-процессами. Лучше использовать обычные соединения - процесс отработал за доли секунды и отсоединился - нет процесса - не занята память и ресурсы.

   
 
 автор: !!!Леха   (02.10.2007 в 15:51)   письмо автору
 
   для: cheops   (24.09.2007 в 14:48)
 

Уважаемый, cheops.

Спасибо большое за консультацию.
А что значит распарсить?

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

212.86.246.40 - - [02/Oct/2007:15:34:10 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:34:14 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:34:14 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:34:16 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:34:26 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:34:26 +0400] "-" 400 0 "-" "-"
89.232.124.31 - - [02/Oct/2007:15:37:48 +0400] "-" 400 0 "-" "-"
89.232.124.31 - - [02/Oct/2007:15:37:48 +0400] "-" 400 0 "-" "-"
89.232.124.31 - - [02/Oct/2007:15:37:49 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:39:53 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:39:53 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:39:53 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:39:57 +0400] "-" 400 0 "-" "-"
82.204.248.18 - - [02/Oct/2007:15:26:47 +0400] "-" 400 0 "-" "-"
82.204.248.18 - - [02/Oct/2007:15:26:47 +0400] "-" 400 0 "-" "-"
82.204.248.18 - - [02/Oct/2007:15:26:47 +0400] "-" 400 0 "-" "-"
82.204.248.18 - - [02/Oct/2007:15:26:47 +0400] "-" 400 0 "-" "-"
82.204.248.18 - - [02/Oct/2007:15:26:48 +0400] "-" 400 0 "-" "-"

   
 
 автор: cheops   (03.10.2007 в 09:29)   письмо автору
 
   для: !!!Леха   (02.10.2007 в 15:51)
 

Хм... 400 ошибка - это означает, что сервер просто дёргают по 80 порту ничего практически не передавая и соответственно не слушая ответ. У вас FireWall какой-нибудь используется?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования