Un error que sigue apareciendo aunque pasen versiones y versiones de Plesk Panel ( desde la 7.4 a la 9.2 ) es la perdida de integridad referencial en algunas tablas. Esto provoca que a la hora de ejectuar algunas herramientas y falten datos se generen errores. En ese caso al borrar el dominio ‘delete.me’ nos aparece este mensaje :
0: class.MailManager.php:242 MailManager::execWithException(string 'smart_exec', string 'mailmng', array, array, string 'lst') 1: class.MailManager.php:274 MailManager->callMailManager(string 'remove-mailname', array) 2: class.MailManager.php:354 MailManager->removeMailname(string 'sharoj.com', string 'delete') 3: cmd_mail.php3:1357 mn_del(string '490') 4: class.DSMail.php:211 DSMail->delete(boolean false) 5: class.PhDomain.php:358 PhDomain->reset(integer '0', boolean true, boolean false) 6: class.BsDomain.php:330 BsDomain->reset(integer '0') 7: class.BsDomain.php:302 BsDomain->delete(integer '0') 8: class.BsDomain.php:536 mdeleteDomains(array) 9: removeDomains.php3:42 require(string '/opt/psa/admin/htdocs/domains/removeDomains.php3') 10: plesk.php:51
Tendremos que buscar manualmente donde está el problema y repararlo , directamente a la base de datos de Plesk (generalmente llamada psa).
Comenzamos a buscar relaciones rotas entre objetos:
# mysql -uadmin -p`cat /etc/psa/.psa.shadow` psa Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 152938 Server version: 5.0.32-Debian_7etch10-log Debian etch distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> select id, name from domains where name = "delete.me"; +------+------------+ | id | name | +------+------------+ | 1241 | delete.me | +------+------------+ 1 row in set (0.00 sec)
Ya tenemos el ID del dominio, nos centramos en las cuentas de correo ya que el error se genera al borrar cuentas de correo. Vamos a ver que tablas hay en esta version de Plesk ( 9.2.3 )
mysql> show tables like '%mail%' ; +------------------------+ | Tables_in_psa (%mail%) | +------------------------+ | Webmails | | badmailfrom | | mail | | mail_aliases | | mail_redir | | mail_resp | | mass_mail | | mass_mail_clients | | mass_mail_domains | +------------------------+ 9 rows in set (0.00 sec)
La tabla que nos interesa es mail vamos a ver que esctructura tiene y vamos sacando datos:
mysql> desc mail ; +---------------+------------------------------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+------------------------------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | mail_name | varchar(245) | NO | | | | | perm_id | int(10) unsigned | NO | MUL | | | | postbox | enum('false','true') | NO | | false | | | account_id | int(10) unsigned | NO | MUL | | | | redirect | enum('false','true') | NO | | false | | | redir_addr | varchar(255) | YES | | NULL | | | mail_group | enum('false','true') | NO | | false | | | autoresponder | enum('false','true') | NO | | false | | | spamfilter | enum('false','true') | NO | | true | | | virusfilter | enum('none','incoming','outgoing','any') | NO | | none | | | mbox_quota | bigint(20) | NO | | -1 | | | dom_id | int(10) unsigned | NO | MUL | | | +---------------+------------------------------------------+------+-----+---------+----------------+ 13 rows in set (0.01 sec)
mysql> select * from mail where dom_id = 1241; +-----+-----------+---------+---------+------------+----------+------------+------------+---------------+------------+-------------+------------+--------+ | id | mail_name | perm_id | postbox | account_id | redirect | redir_addr | mail_group | autoresponder | spamfilter | virusfilter | mbox_quota | dom_id | +-----+-----------+---------+---------+------------+----------+------------+------------+---------------+------------+-------------+------------+--------+ | 490 | delete.me | 2202 | true | 2204 | false | | false | false | false | incoming | -1 | 1241 | +-----+-----------+---------+---------+------------+----------+------------+------------+---------------+------------+-------------+------------+--------+ 1 row in set (0.00 sec)
Vemos que tiene al menos una cuenta de correo para el usuario 2204, vamos a buscar este usuario en la tabla accounts, ya que el id es accounts_id
mysql> show tables like '%acco%' -> ; +------------------------+ | Tables_in_psa (%acco%) | +------------------------+ | accounts | +------------------------+ 1 row in set (0.00 sec)
mysql> select * from accounts where id = 2204 ; Empty set (0.01 sec)
Pues no está, aquí tenemos el problema, no existe la información del usuario pero sí el buzón.
lo más comodo es borar la entrada en la base de datos de la cuenta de correo. Dado que vamos a borrar el dominio nos es indiferente conservarlo.
mysql> delete from mail where id =490 limit 1 ; Query OK, 1 row affected (0.03 sec)
De otra forma , habíamos dado de alta una fila en accounts con el id 2204 .
Tengo que darte las gracias por el esfuerzo de la explicación.
Sólo indicar que, para dominios con cuentas «dentro y fuera» de la tabla accounts (ignoro por qué ha pasado esto), no basta con eliminar a mano de la tabla mail las cuentas problemáticas. Hay que eliminar TODAS. Sino, Plesk arroja el mismo error, pero en cambio con una cuenta que SI está en accounts.
los id existentes en accounts los he dejado, pues creo que es una tabla incremental, y antes que joderlo entero, prefiero dejar 16bytes en mysql just in case.
Bravo!
Ok gracias por avisar, no puedo cntstar a todos los comentarios, stooi de vacaciones
Ok gracias por avisar, no puedo cntstar a todos los comentarios, stooi de vacaciones