Introduction
This guide explains how to fix “The phpMyAdmin configuration storage is not completely configured, some extended features have been deactivated” — a message you’ll often see right after installing phpMyAdmin, along with a long list of disabled features (bookmarks, SQL history, the Designer, tracking, and more).
Implementation
I. Prerequisites
- phpMyAdmin already installed on a Linux server
- Access to the MySQL root account
- SSH or terminal access to edit files
II. Why This Happens
A default phpMyAdmin installation doesn’t include configuration storage — a set of special database tables phpMyAdmin uses internally to support its extended features. Without them, phpMyAdmin has nowhere to store bookmarks, history, tracking data, and similar features, which is exactly what triggers this message.

This is also the key detail a lot of quick fixes get wrong: editing the config file alone doesn’t fix this. The config file only tells phpMyAdmin where to look for these tables — if the tables were never created in the database, pointing to them changes nothing.
III. Create the Configuration Storage Tables
phpMyAdmin ships with a ready-made SQL script for this, typically at:
/usr/share/phpmyadmin/sql/create_tables.sql
Import it:
mysql -u root -p < /usr/share/phpmyadmin/sql/create_tables.sql
This creates a phpmyadmin database along with all the pma__* tables the extended features depend on.
If your installation doesn’t include this file, download the version matching your phpMyAdmin release from the official phpMyAdmin repository.
IV. Create a Dedicated Control User
phpMyAdmin uses a separate “control user” — not your regular login — to access these tables:
CREATE USER 'pma'@'localhost' IDENTIFIED BY 'strong_password_here'; GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'pma'@'localhost'; FLUSH PRIVILEGES;
V. Update the Configuration File
Open the config file (default location, adjust if yours differs):
vi /etc/phpmyadmin/config.inc.php
Add the control user credentials along with the table mappings:
$cfg['Servers'][$i]['controluser'] = 'pma'; $cfg['Servers'][$i]['controlpass'] = 'strong_password_here'; $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark'; $cfg['Servers'][$i]['relation'] = 'pma__relation'; $cfg['Servers'][$i]['table_info'] = 'pma__table_info'; $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords'; $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages'; $cfg['Servers'][$i]['column_info'] = 'pma__column_info'; $cfg['Servers'][$i]['history'] = 'pma__history'; $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs'; $cfg['Servers'][$i]['tracking'] = 'pma__tracking'; $cfg['Servers'][$i]['designer_coords'] = 'pma__designer_coords'; $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig'; $cfg['Servers'][$i]['recent'] = 'pma__recent'; $cfg['Servers'][$i]['favorite'] = 'pma__favorite'; $cfg['Servers'][$i]['users'] = 'pma__users'; $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups'; $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding'; $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches'; $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns'; $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings'; $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
Note there are two underscores (
__) afterpmain each table name — a single underscore will cause phpMyAdmin to fail to find the tables even though they exist.
VI. Restart the Web Server
/etc/init.d/apache2 restart
Log back in to phpMyAdmin — the warning should be gone.
VII. Conclusion
The fix isn’t just editing the config file — it’s two steps: import create_tables.sql to actually create the missing tables, then point the config file at them with a dedicated control user. Skipping the table import is the most common reason this “fix” doesn’t work.
Frequently Asked Questions
Why isn’t editing the config file alone enough? It only tells phpMyAdmin where to look — if the tables don’t exist yet, there’s nothing to find.
Can I use my regular MySQL account instead of a separate control user? You can, but a dedicated control user scoped only to the phpmyadmin database is safer and follows least-privilege practice.
What if create_tables.sql doesn’t exist on my system? It’s usually under /usr/share/phpmyadmin/sql/ on Debian/Ubuntu installs. For manual installs, download the matching version from phpMyAdmin’s official GitHub repository.
Related Articles
How to add Proxy pass rule to access PHPMyAdmin without port number in URL -Plesk
How to Install phpMyAdmin on Ubuntu
Talk to our experts.
Looking for the right technology solution for your business? Our team of experts can help you with development, cloud, DevOps, design, and a wide range of other technology needs. Get in touch with our team here.
$cfg[‘Servers’][$i][‘designer_coords’] = ‘pma__designer_coords’; is not being used by phpMyAdmin any longer.