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 .