phpMyAdmin
phpMyAdmin is a web-based tool to help manage MySQL databases using an Apache/PHP frontend.
Contents
Installation
Install the phpmyadmin package.
Running
PHP
Make sure the PHP mysql extension(s) have been enabled.
Optionally you can enable extension=bz2
and extension=zip
for compression support.
open_basedir
has been set, make sure to include /etc/webapps
to open_basedir
in /etc/php/php.ini
.Apache
Set up Apache to use PHP as outlined in the Apache HTTP Server#PHP article.
Create the Apache configuration file:
/etc/httpd/conf/extra/phpmyadmin.conf
Alias /phpmyadmin "/usr/share/webapps/phpMyAdmin" <Directory "/usr/share/webapps/phpMyAdmin"> DirectoryIndex index.php AllowOverride All Options FollowSymlinks Require all granted </Directory>
And include it in /etc/httpd/conf/httpd.conf
:
# phpMyAdmin configuration Include conf/extra/phpmyadmin.conf
/etc/httpd/conf/extra/phpmyadmin.conf
to your liking. For example, if you only want to be able to access it from the same machine, replace Require all granted
by Require local
. Beware that this will disallow connecting to PhpMyAdmin on a remote server. If you still want to access PhpMyAdmin on a remote server securely, you might want to consider setting up a Secure Shell#Encrypted SOCKS tunnel.After making changes to the Apache configuration file, restart httpd.service
.
Lighttpd
Configuring Lighttpd, make sure it is able to serve PHP files and mod_alias
has been enabled.
Add the following alias for PhpMyAdmin to the config:
alias.url = ( "/phpmyadmin" => "/usr/share/webapps/phpMyAdmin/")
Nginx
Make sure to set up nginx#FastCGI.
Subdomain
Set up a separate configuration file for PHP as shown in nginx#PHP configuration file and use a server block such as:
server { server_name phpmyadmin.<domain.tld>; root /usr/share/webapps/phpMyAdmin; index index.php; include php.conf; }
Subdirectory using location
This will allow access to PhpMyAdmin as in https://domain.tld/phpMyAdmin
:
/etc/nginx/sites-available/domain.tld
location /phpMyAdmin { server_name domain.tld; listen 443 ssl http2; root /srv/http/domain.tld; index index.php; location / { try_files $uri $uri/ =404; } # Deny static files location ~ ^/phpMyAdmin/(README|LICENSE|ChangeLog|DCO)$ { deny all; } # Deny .md files location ~ ^/phpMyAdmin/(.+\.md)$ { deny all; } # Deny setup directories location ~ ^/phpMyAdmin/(doc|sql|setup)/ { deny all; } #FastCGI config for phpMyAdmin location ~ /phpMyAdmin/(.+\.php)$ { fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/run/php-fpm/php-fpm.sock; fastcgi_index index.php; include fastcgi.conf; } }
Configuration
The main configuration file is located at /etc/webapps/phpmyadmin/config.inc.php
.
If the MySQL server is not on localhost, append the following line:
$cfg['Servers'][$i]['host'] = 'localhost';
Using setup script
To allow the usage of the phpMyAdmin setup script (e.g. http://localhost/phpmyadmin/setup), make sure /usr/share/webapps/phpMyAdmin
is writable for the http
user:
# mkdir /usr/share/webapps/phpMyAdmin/config # chown http:http /usr/share/webapps/phpMyAdmin/config # chmod 750 /usr/share/webapps/phpMyAdmin/config
Add blowfish_secret passphrase
It is required to enter an unique 32 characters long string to fully use the blowfish algorithm used by PhpMyAdmin, thus preventing the message ERROR: The configuration file now needs a secret passphrase (blowfish_secret):
/etc/webapps/phpmyadmin/config.inc.php
$cfg['blowfish_secret'] = '...';
Enabling Configuration Storage
Extra options such as table linking, change tracking, PDF creation, and bookmarking queries are disabled by default, displaying The phpMyAdmin configuration storage is not completely configured, some extended features have been deactivated. on the homepage.
controluser
, and pmapass as the controlpass
.In /etc/webapps/phpmyadmin/config.inc.php
, uncomment (remove the leading "//"s), and change them to your desired credentials if needed:
/etc/webapps/phpmyadmin/config.inc.php
/* User used to manipulate with storage */ // $cfg['Servers'][$i]['controlhost'] = 'my-host'; // $cfg['Servers'][$i]['controlport'] = '3306'; $cfg['Servers'][$i]['controluser'] = 'pma'; $cfg['Servers'][$i]['controlpass'] = 'pmapass'; /* Storage database and tables */ $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]['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';
Setup database
Two options are available to create the required tables:
- Import
/usr/share/webapps/phpMyAdmin/sql/create_tables.sql
by using PhpMyAdmin. - Execute
mysql -u root -p < /usr/share/webapps/phpMyAdmin/sql/create_tables.sql
in the command line.
Setup database user
To apply the required permissions for controluser
, execute the following query:
pma
and pmapass
to the values set in config.inc.php
. If you are setting this up for a remote database, then you must also change localhost
to the proper host.GRANT USAGE ON mysql.* TO 'pma'@'localhost' IDENTIFIED BY 'pmapass'; GRANT SELECT ( Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv ) ON mysql.user TO 'pma'@'localhost'; GRANT SELECT ON mysql.db TO 'pma'@'localhost'; GRANT SELECT ON mysql.host TO 'pma'@'localhost'; GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv) ON mysql.tables_priv TO 'pma'@'localhost';
In order use the bookmark and relation features, set the following permissions:
GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost';
Re-login to ensure the new features are activated.
Enabling templates catching
Edit /etc/webapps/phpmyadmin/config.inc.php
to add the line:
$cfg['TempDir'] = '/tmp/phpmyadmin';