Domain cannot be open in Parallels Plesk Panel: SysUser: unable to select: no such row in the table

The following error is shown when try to open domain in Parallels Plesk Panel 8.x through Domains -> domain.tld:

Unable to create SysUser object: SysUser: unable to select: no such row in the table

0: /usr/local/psa/admin/plib/class.DomainControlForm.php:168
DomainControlForm->assign(object of type BsDomain)
1: /usr/local/psa/admin/htdocs/domains/dom_ctrl.php3:149

In Parallels Plesk Panel 9.x through Domains -> domain.tld:

Unable to create PHostingManager object:An error occured during SysUser class creation: SysUser: unable to select: no such row in the table

0: common_func.php3:108
psaerror(string ‘Unable to create PHostingManager object:An error occured during SysUser class creation: SysUser: unable to select: no such row in the table’)
1: client.domain.hosting.anonymous-ftp.php:19
plesk__client__domain__hosting__anonymous_ftp->validateHosting(object of type BsDomain)
2: client.domain.hosting.anonymous-ftp.php:47
plesk__client__domain__hosting__anonymous_ftp->validateItem(object of type UserAdmin)
3: UIPointer.php:1123
UIPointer->validate()

Cause
Physical hosting is configured on the domain, however appropriate system user is missing:

mysql> select * from (select A.id, A.name as domain, A.htype as 'hosting type', sys_users.login as 'system user' from (select id, concat('/var/www/vhosts/', name) as home, htype, name from domains) A left join sys_users on (A.home=sys_users.home)) B where `hosting type` = 'vrt_hst' and `system user` is NULL;
+-----+------------+--------------+-------------+
| id | domain | hosting type | system user |
+-----+------------+--------------+-------------+
| 15 | domain.tld | vrt_hst | NULL |
+-----+------------+--------------+-------------+
1 row in set (0.00 sec)

mysql>

Where domain.tld is your domain that experiences the problem. /var/www/vhosts is PRODUCT_ROOT_D, it may be /var/www/vhosts, /usr/local/www/vhosts or /srv/www/vhosts on your server.
Resolution
The following instructions are recommended for problem resolving.

1. Backup old database of Parallels Plesk Panel before any reconfiguration.

~# mysqldump -uadmin -p`cat /etc/psa/.psa.shadow` psa > psa.dump.`date +%F.%s`.sql

2. Further instructions depends on either domain system user exist.
2.1 System user exists:

~# grep domain.tld /etc/passwd
domain_ftp_user:x:10001:2524::/var/www/vhosts/domain.tld:/bin/false
~#

Where /var/www/vhosts is PRODUCT_ROOT_D. domain_ftp_user is old domain’s system user.

3.1 To resolve the problem it is recommended to insert the missing record into database of Parallels Plesk Panel manually.

3.1.1 Get ID of domain’s system user:

mysql> select sys_user_id from hosting where dom_id=15;
+-------------+
| sys_user_id |
+-------------+
| 4 |
+-------------+
1 row in set (0.00 sec)

mysql>

Where 15 is domain’s ID, for details see query in part CAUSE.

3.1.2 Insert account record:

mysql> insert into accounts(type,password) values ('plain','');
Query OK, 1 row affected (0.09 sec)

mysql>

Where is new password for new system user for the domain. This is password for domain’s FTP user also.

3.1.3 Find ID of created record:

mysql> select * from accounts order by id desc limit 1;
+-----+-------+------------------+
| id | type | password |
+-----+-------+------------------+
| 186 | plain | |
+-----+-------+------------------+
1 row in set (0.00 sec)

mysql>

3.1.4 Insert record into table sys_users:
mysql> insert into sys_users values (4,'sb4',186,'/var/www/vhosts/domain.tld','/bin/false',0);
Query OK, 1 row affected (0.08 sec)

mysql>

Where is login of new system user for domain domain.tld, it is also domain’s FTP user. And 4 is domain’s sys_user_id, 186 is ID of new password.

2.2 System user does not exist.

~# grep domain.tld /etc/passwd
~#

3.2 It is recommended to re-enable physical hosting for the domain anew. However note that whole virtual hosting directory is overwritten and domain content is lost.

3.2.1 Disable hosting for domain:

mysql> update domains set htype='none' where name='domain.tld';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> delete from hosting where dom_id=15;
Query OK, 1 row affected (0.00 sec)

mysql>

Where 15 is domain’s ID, for details see query in part CAUSE.

3.3.3 Login to Parallels Plesk Panel and configure physical hosting for the domain anew through Domains -> domain.tld -> Setup. Choose Physical hosting, insert new user login and password. Click OK to finish configuration.
Additional information
Use the following command to connect to database of Parallels Plesk Panel:

~# mysql -uadmin -p`cat /etc/psa/.psa.shadow` psa

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.