Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте.
Система FreeBsd 8.0 i386, mysql 5.1.47 RAM 3Gb
таблицы InnoDB
Служит он слейвом. Сейчас слейв остановился
110315 14:26:30 [ERROR] /usr/local/libexec/mysqld: Out of memory (Needed 870552 bytes)
110315 14:26:30 [ERROR] Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space
110315 14:26:30 [ERROR] Slave SQL: Error 'Out of memory (Needed 870552 bytes)' on query. Default database: 'api'. Query: 'DELETE FROM `product-popularity-index` WHERE `region-id`=2 AND NOT ( `product-id`=116
00 ) AND NOT ( `product-id`=816544 ) AND NOT ( `product-id`=814085 ) AND NOT ( `product-id`=813023 ) AND NOT ( `product-id`=811980 ) AND NOT ( `product-id`=819824 ) AND NOT ( `product-id`=820237 ) AND NOT (
`product-id`=9403 ) AND NOT ( `product-id`=820791 ) AND NOT ( `product-id`=815594 ) AND NOT ( `product-id`=205 ) AND NOT ( `product-id`=811977 ) AND NOT ( `product-id`=818985 ) AND NOT ( `product-id`=7116 )
AND NOT ( `product-id`=813236 ) AND NOT ( `product-id`=11804 ) AND NOT ( `product-id`=10738 ) AND NOT ( `product-id`=813541 ) AND NOT ( `product-id`=821581 ) AND NOT ( `product-id`=812676 ) AND NOT ( `produc
t-id`=11852 ) AND NOT ( `product-id`=812258 ) AND NOT ( `product-id`=822626 ) AND NOT ( `product-id`=811803 ) AND NOT ( `product-id`=822938 ) AND NOT ( `product-id`=8597 ) AND NOT ( `product-id`=811130 ) AND
NOT ( `prod
110315 14:26:30 [Warning] Slave: Out of memory (Needed 870552 bytes) Error_code: 5
В интернете рекомендации - увеличить память которая выделяется для процесса
kern.maxdsiz="1073741824" # 1GB
kern.dfldsiz="1073741824" # 1GB
kern.maxssiz="134217728" # 128MB
по шагам увеличивал эти параметры и довел их до
kern.maxdsiz="2G"
kern.dfldsiz="2G"
kern.maxssiz="1G"
не помогает.
максимум что могу выставить innodb_buffer_pool_size = 1152M
больше не знаю что поправить.
Есть решение без перехода на amd64 и увеличения памяти больше 4 Гб?
Спасибо.
Отредактированно _Сергей (15.03.2011 15:52:00)
Неактивен
Вот нашел в интернете интересую мысль
perror 5
Input/output error
На диске действительно не очень много места. Причем когда я зашел на сервер места не было вообще, я осовбодил 4 гига, сейчас из них свободно 2.4 гига.
Уж не с этим ли связано?
Неактивен
с этим не связано. на другом слейве. места много а ошибка таже.
Неактивен
Меня пугают слова FreeBSD и i386. Если первое — это потенциальные проблемы
(и если сборка не из портов, то, вроде, проблемы исчезают), то второе — это силь-
ные ограничения по памяти, причем связаны с объективной реальностью — Вы
не можете выделить более 3 гигабайт на процесс на 32-битных системах (а на
некоторых системах и более 2 гигабайт).
Ощущение, что Вы упираетесь именно в это ограничение. Ну и решение — умень-
шить innodb_buffer_pool_size, key_buffer, etc так, чтобы не вылезать за разумные
пределы, ну и впоследствии менять битность ОС.
Неактивен
paulus написал:
Меня пугают слова FreeBSD и i386.
Да ладно! БСД нормальная штука.
Но я о другом.
Ну вы просто монстр! Все зарабтало после уменьшения key_buffer. Снимаю шляпу. Спасибо.
Неактивен
Подскажите пожалуйста еще вот по какому вопросу. Пока я устранял эту ошибку, с вашей помощью, видимо накопилось много информации. Диск в 53 гига забыт. На этом диске только база мускуля и больне ничего. Основное места занимают relay логи. сейчас позиция
Relay_Log_File: relay_rep_slave2.001555
Relay_Log_Pos: 316701878
но почему-то старные логи не удаляются, а новые добавляются постоянно. Так как на этом диске только база, я не знаю как почистить
relay логи я так понимаю удалить я не могу - там информация от мастера?
Неактивен
А что говорит SHOW SLAVE STATUS? Может, просто репликация остановилась?
Да, в любом случае сделайте пока STOP SLAVE IO_THREAD — так не будут
приезжать новые логи, пока не решите проблему (но и репликация работать
не будет, разумеется).
Неактивен
paulus написал:
Может, просто репликация остановилась?
Да репликация остановилась места на диске нет вообще.
На всякий случай.
есть мастер, у него два слейва.
вот с одним слейвом все эти проблемы.
так вот я не знаю что делать. место на диске забили рилей логи. может есть какой-то способ разрулить это без добавления дискового пространства?
Спасибо.
Неактивен
Ну, если Вы не хотите написать подробности, то единственное решение, которое
я могу предложить — почините репликацию (а что Вы ожидали?).
Неактивен
paulus написал:
Ну, если Вы не хотите написать подробности
Какие подробности в такой ситуации нужны? Проблема в дисковым простанством конфиги в такой ситуации вроде как и не нужны. Ошибка в логе....ну дык места нет. Схему вроде обрисовал мастер и два слейва. Намекните какие подробности нужны
Неактивен
перечитал еще раз доку по репликации
там написано
The relay log consists of the events read from the binary log of the master and written by the slave I/O thread.
Слово выделил не зря. Получается что в релай логах уже обработанные запросы и их можно удалить. Ну само-собой поправить индекс файл, или через change master передвинуть позицию, или reset slave
Неактивен
Ну, например, Вы не написали, почему остановилась репликация. Это можно пос-
мотреть, например, в SHOW SLAVE STATUS (сообщение №7).
Relay log стереть можно, но тогда репликация гарантированно сломается. Туда
пишутся еще не выполненные события.
Неактивен
вот сообщение из лога мускуля
110318 17:49:14 [ERROR] /usr/local/libexec/mysqld: Disk is full writing '/v1/db/mysql/relay_rep_slave2.001776' (Errcode: 28). Waiting for someone to free space... (Expect up to 60 secs delay for server to co
ntinue after freeing disk space)
вот show slave status
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Queueing master event to the relay log
Master_Host: 174.120.210.74
Master_User: rep_api
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000511
Read_Master_Log_Pos: 129548576
Relay_Log_File: relay_rep_slave2.001555
Relay_Log_Pos: 316701878
Relay_Master_Log_File: mysql-bin.000456
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB: api
Replicate_Ignore_DB: mysql,test
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 5
Last_Error: Error 'Out of memory (Needed 1582452 bytes)' on query. Default database: 'api'. Query: 'DELETE FROM `product-popularity-index` WHERE `region-id`=2 AND NOT ( `product-id`=11600 ) AND NOT ( `product-id`=816544 ) AND NOT ( `product-id`=814085 ) AND NOT ( `product-id`=813023 ) AND NOT ( `product-id`=811980 ) AND NOT ( `product-id`=819824 ) AND NOT ( `product-id`=820237 ) AND NOT ( `product-id`=9403 ) AND NOT ( `product-id`=820791 ) AND NOT ( `product-id`=815594 ) AND NOT ( `product-id`=205 ) AND NOT ( `product-id`=811977 ) AND NOT ( `product-id`=818985 ) AND NOT ( `product-id`=7116 ) AND NOT ( `product-id`=813236 ) AND NOT ( `product-id`=11804 ) AND NOT ( `product-id`=10738 ) AND NOT ( `product-id`=813541 ) AND NOT ( `product-id`=821581 ) AND NOT ( `product-id`=812676 ) AND NOT ( `product-id`=11852 ) AND NOT ( `product-id`=812258 ) AND NOT ( `product-id`=822626 ) AND NOT ( `product-id`=811803 ) AND NOT ( `product-id`=822938 ) AND NOT ( `product-id`=8597 ) AND NOT ( `product-id`=811130 ) AND NOT ( `product-id`=81
Skip_Counter: 0
Exec_Master_Log_Pos: 316701733
Relay_Log_Space: 54202959407
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 5
Last_SQL_Error: Error 'Out of memory (Needed 1582452 bytes)' on query. Default database: 'api'. Query: 'DELETE FROM `product-popularity-index` WHERE `region-id`=2 AND NOT ( `product-id`=11600 ) AND NOT ( `product-id`=816544 ) AND NOT ( `product-id`=814085 ) AND NOT ( `product-id`=813023 ) AND NOT ( `product-id`=811980 ) AND NOT ( `product-id`=819824 ) AND NOT ( `product-id`=820237 ) AND NOT ( `product-id`=9403 ) AND NOT ( `product-id`=820791 ) AND NOT ( `product-id`=815594 ) AND NOT ( `product-id`=205 ) AND NOT ( `product-id`=811977 ) AND NOT ( `product-id`=818985 ) AND NOT ( `product-id`=7116 ) AND NOT ( `product-id`=813236 ) AND NOT ( `product-id`=11804 ) AND NOT ( `product-id`=10738 ) AND NOT ( `product-id`=813541 ) AND NOT ( `product-id`=821581 ) AND NOT ( `product-id`=812676 ) AND NOT ( `product-id`=11852 ) AND NOT ( `product-id`=812258 ) AND NOT ( `product-id`=822626 ) AND NOT ( `product-id`=811803 ) AND NOT ( `product-id`=822938 ) AND NOT ( `product-id`=8597 ) AND NOT ( `product-id`=811130 ) AND NOT ( `product-id`=81
1 row in set (0.00 sec)
mysql>
Неактивен
Ну, вот видите: реплика остановилась, потому что не хватило памяти.
Та же проблема с 32 битами?
Неактивен
paulus написал:
Ну, вот видите: реплика остановилась
ну как бороться с памятью мы уже выяснили с вашей помощью.
вопрос как освободить место на диске безболезненно
Неактивен
Волшебной пилюли нет — у Вас есть данные и у Вас есть двоичные журналы,
которые предстоит накатить. Если Вы сотрете данные — Вы потеряете данные.
Если Вы сотрете двоичные журналы — Вы не сможете их накатить, а значит —
потеряете данные.
Если есть возможность утащить какой-то из файликов на другой раздел — мож-
но остановить mysql, утащить файлик, поставить в обратное место символичес-
кую ссылку, запустить mysql со --skip-slave-start, запустить только SQL-поток
репликации вручную (START SLAVE SQL_THREAD): так Вы будете накатывать (и
со временем — удалять) уже записанные двоичные журналы. Как только запус-
тите IO_THREAD — поедут новые журналы с мастера на тот же самый диск.
Ну или просто перелить реплику при большом отставании бывает часто проще.
Неактивен