понедельник, 22 апреля 2013 г.

WHM/cPanel: There are no databases associated with your account

Столкнулся с тем, что для некоторых пользователей в cPanel в разделе "MySQL Databases" стало долго думать, а затем выдавать ошибку "There are no databases associated with your account.".

Гугл выдает аналогичные проблемы и много вариантов решений, но мне ни одно не помогло. Базы видны в phpMyAdmin, но в cPanel с ними работать не удается.

Пока дебажил, заметил в процессах такую связку

cpsrvd (SSL) - waiting for c --llu=1366639891 --listen=3,4,5,6,7,8
 \_ cpaneld - serving 117.65.29 --llu=1366639891 --listen=3,4,5,6,7,8
    \_ /usr/local/cpanel/cpanel ./frontend/x3/sql/index.html
       \_ /usr/local/cpanel/bin/cpmysqlwrap
          \_ /usr/local/cpanel/3rdparty/bin/perl /usr/local/cpanel/bin/cpmysqladmin

Если подключиться к последнему процессу через strace, то видно что он ожидает на вызове read. Поскольку название скрипта намекает на связь с mysql, то смотрю список активных запросов

...
select TABLE_SCHEMA as DB,SUM(DATA_LENGTH)+SUM(INDEX_LENGTH) AS SPACEUSED from information_schema.ta
...

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

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

29 
30 $SIG{'ALRM'} = sub { die "Timeout: Alarm"; };
31 
32 alarm 120;
33 

Получается, что скрипт взводит "будильник" на 2 минуты и именно он мешает скрипту выполниться до конца. Меняю в 30 строке alarm 120 на alarm 300.

Теперь показ списка баз работает без ошибок. Правда непонятно, что делать с обновлениями cPanel, но этой проблемой займусь, когда она возникнет.

Комментариев нет:

Отправить комментарий