Phpmyadmin, MySQL y Apache2
Warning: This information may be outdated. Please note the date of the post.
Descripción
Instalación de una herramienta de administración web para MySQL y prueba desde un cliente remoto
Requisitos previos
- Una máquina virtual con Debian Buster (paquetería actualizada). En mi caso usaré una máquina alzada con vagrant y virtualbox
- Un servidor MySQL instalado. Instalaremos MariaDB.
- Otra máquina virtual que actuará como cliente remoto con una red compartida con el servidor.
Hemos ejecutado los siguientes comandos para hacer todo lo mencionado
# Actualizamos la máquina
$ sudo apt update && apt upgrade
# Instalamos mariadb desde los repositorios de debian
$ sudo apt install mariadb-server
# Ejecutamos el script de seguridad de mariadb (opcional)
$ sudo mysql_secure_installation
Creación de la base de datos y usuario de prueba
En este post, está la creación de la base de datos, usuario, datos de prueba y además la conexión de un cliente remoto.
Una vez ya hemos comprobado que tenemos los requisitos mencionados en el post podemos continuar con lo siguiente.
Herramienta de administración web. phpMyAdmin.
phpMyAdmin es una herramienta escrita en php con la intención de manejar la administración de MySQL a través un navegador web. Actualmente puede crear y eliminar bases de datos, modificar tablas, añadir registros, hacer consultas, administrar privilegios etc…
Para utilizar esta herramienta necesitaremos un servidor web, en nuestro caso será apache2 y soporte php.
Utilizaremos el mismo servidor en el que se aloja la base de datos para ofrecer también el servicio web. Aunque lo más parecido a la realidad es que en una máquina tengamos el servidor de base de datos y en otro el servidor web.
Instalación del servidor web apache2 y soporte php
sudo apt install apache2 php php-mysql php-zip php-bz2 php-mbstring php-gd libapache2-mod-php
Comprobamos que el servicio está funcionando y que podemos acceder acceder al sitio web por defecto en este caso.
vagrant@servermysql:~$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-03-23 09:07:56 GMT; 24s ago
Docs: https://httpd.apache.org/docs/2.4/
Main PID: 10008 (apache2)
Tasks: 6 (limit: 544)
Memory: 12.9M
CGroup: /system.slice/apache2.service
├─10008 /usr/sbin/apache2 -k start
├─10012 /usr/sbin/apache2 -k start
├─10013 /usr/sbin/apache2 -k start
├─10014 /usr/sbin/apache2 -k start
├─10015 /usr/sbin/apache2 -k start
└─10016 /usr/sbin/apache2 -k start
Mar 23 09:07:56 servermysql systemd[1]: Starting The Apache HTTP Server...
Mar 23 09:07:56 servermysql apachectl[10004]: AH00558: apache2: Could not reliably determine the server's
Mar 23 09:07:56 servermysql systemd[1]: Started The Apache HTTP Server.

Ahora vamos a modificar el fichero de configuracion del virtualhost que viene por defecto. Podriamos crear un fichero de configuración nuevo y agregar la configuración en el mismo pero vamos a usar el que viene para facilitar la configuracion con phpMyAdmin.
sudo nano /etc/apache2/sites-available/000-default.conf
Añadiremos la configuración necesaria así como los alias que necesita phpMyAdmin para que el sitio funcione.
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /phpmyadmin /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin>
Options SymLinksIfOwnerMatch
DirectoryIndex index.php
<IfModule mod_php5.c>
<IfModule mod_mime.c>
AddType application/x-httpd-php .php
</IfModule>
<FilesMatch ".+\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
php_value include_path .
php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
php_admin_value mbstring.func_overload 0
</IfModule>
<IfModule mod_php.c>
<IfModule mod_mime.c>
AddType application/x-httpd-php .php
</IfModule>
<FilesMatch ".+\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
php_value include_path .
php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
php_admin_value mbstring.func_overload 0
</IfModule>
</Directory>
<Directory /usr/share/phpmyadmin/templates>
Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
Require all denied
</Directory>
</VirtualHost>
Instalación de phpmyadmin
Para instalar esta herramienta vamos a ir a su página oficial para encontrar el enlace a la versión mas actual y lo descargaremos en la máquina virtual y lo descomprimimos de la siguiente forma:
# Obtener el paquete
wget https://files.phpmyadmin.net/phpMyAdmin/5.1.0/phpMyAdmin-5.1.0-all-languages.tar.gz
# Lo descomprimimos y lo movemos al directorio /usr/share
sudo tar xzvf phpMyAdmin-5.1.0-all-languages.tar.gz
sudo mv phpMyAdmin-5.1.0-all-languages /usr/share/
Le cambiamos el nombre al directorio para que sea mas legible
root@servermysql:/usr/share# mv phpMyAdmin-5.1.0-all-languages/ phpmyadmin
root@servermysql:/usr/share# cd phpmyadmin/
# Vemos el contenido del directorio
root@servermysql:/usr/share/phpmyadmin# ls -l
total 672
-rw-r--r-- 1 root root 41 Feb 24 06:05 babel.config.json
-rw-r--r-- 1 root root 41123 Feb 24 06:05 ChangeLog
-rw-r--r-- 1 root root 4106 Feb 24 06:05 composer.json
-rw-r--r-- 1 root root 201246 Feb 24 06:05 composer.lock
-rw-r--r-- 1 root root 4474 Feb 24 06:05 config.sample.inc.php
-rw-r--r-- 1 root root 2587 Feb 24 06:05 CONTRIBUTING.md
drwxr-xr-x 3 root root 4096 Feb 24 06:05 doc
drwxr-xr-x 2 root root 4096 Feb 24 06:05 examples
-rw-r--r-- 1 root root 22486 Feb 24 06:05 favicon.ico
-rw-r--r-- 1 root root 413 Feb 24 06:05 index.php
drwxr-xr-x 5 root root 4096 Feb 24 06:05 js
drwxr-xr-x 5 root root 4096 Feb 24 06:05 libraries
-rw-r--r-- 1 root root 18092 Feb 24 06:05 LICENSE
drwxr-xr-x 45 root root 4096 Feb 24 06:05 locale
-rw-r--r-- 1 root root 2285 Feb 24 06:05 package.json
-rw-r--r-- 1 root root 1034 Feb 24 06:05 print.css
-rw-r--r-- 1 root root 1520 Feb 24 06:05 README
-rw-r--r-- 1 root root 29 Feb 24 06:05 RELEASE-DATE-5.1.0
-rw-r--r-- 1 root root 26 Feb 24 06:05 robots.txt
drwxr-xr-x 3 root root 4096 Feb 24 06:05 setup
-rw-r--r-- 1 root root 1354 Feb 24 06:05 show_config_errors.php
drwxr-xr-x 2 root root 4096 Feb 24 06:05 sql
drwxr-xr-x 25 root root 4096 Feb 24 06:05 templates
drwxr-xr-x 5 root root 4096 Feb 24 06:05 themes
-rw-r--r-- 1 root root 1613 Feb 24 06:05 url.php
drwxr-xr-x 17 root root 4096 Feb 24 06:05 vendor
-rw-r--r-- 1 root root 293093 Feb 24 06:05 yarn.lock
Una vez que hemos descomprimido vamos a crear un directorio para alojar los archivos temporales de phpmyadmin.
sudo mkdir -p /var/lib/phpmyadmin/tmp
Ahora vamos a darle permisos para que apache pueda utilizar los directorios.
sudo chown -R www-data:www-data /var/lib/phpmyadmin
sudo chown -R www-data:www-data /usr/share/phpmyadmin
Phpmyadmin tiene un fichero de configuación por defecto que vamos a copiar para usarlo y modificarlo.
cp config.sample.inc.php config.inc.php
Una vez copiado lo vamos a modificar de la siguiente forma
root@mysql:/usr/share/phpmyadmin# nano config.inc.php
Buscaremos la siguiente línea, en la que especificaremos una cadena de texto de 32 caracteres aleatorios que sirve para cifrar las cookies de la sesión. Esta cadena se puede generar a mano o usando cualquier paquete que haga esta función.
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
También buscaremos las siguientes líneas que sirven para habilitar la directiva en la que se da lugar a usar una base de datos de phpmyadmin a un usuario con una contraseña, la dejaremos por defecto, pero es recomendable usar una contraseña más segura.
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = 'pmapass';
También activaremos todas las variables de la sección Storage 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';
Indicaremos el path de los archivos temporales
$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';
Una vez modificado el fichero de configuración vamos a crear la base de datos para phpmyadmin, de modo que vamos al directorio ‘sql’ y ahí ejecutamos el siguiente comando para pasarle los datos a mysql
root@servermysql:/usr/share/phpmyadmin/sql# mariadb < create_tables.sql
Comprobamos que se ha creado la base de datos y las tablas correspondientes.
root@servermysql:/usr/share/phpmyadmin/sql# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 38
Server version: 10.3.27-MariaDB-0+deb10u1 Debian 10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| academia |
| information_schema |
| mysql |
| performance_schema |
| phpmyadmin |
+--------------------+
5 rows in set (0.001 sec)
MariaDB [(none)]> use phpmyadmin
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [phpmyadmin]> show tables;
+------------------------+
| Tables_in_phpmyadmin |
+------------------------+
| pma__bookmark |
| pma__central_columns |
| pma__column_info |
| pma__designer_settings |
| pma__export_templates |
| pma__favorite |
| pma__history |
| pma__navigationhiding |
| pma__pdf_pages |
| pma__recent |
| pma__relation |
| pma__savedsearches |
| pma__table_coords |
| pma__table_info |
| pma__table_uiprefs |
| pma__tracking |
| pma__userconfig |
| pma__usergroups |
| pma__users |
+------------------------+
19 rows in set (0.001 sec)
Ahora crearemos el usuario pma con la correspondiente contraseña, recuerda que puedes ponerle el nombre de usuario y contraseña que quieras pero lo hemos dejado por defecto ya que este es un escenario de prueba para el post.
MariaDB [phpmyadmin]> GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'pmapass';
Query OK, 0 rows affected (0.075 sec)
MariaDB [phpmyadmin]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)
Por último vamos a reiniciar los servicios tanto mariadb como apache2 y comprobamos que están en correcto funcionamiento.
systemctl reload mariadb
systemctl reload apache2
systemctl status mariadb
systemctl status apache2
Ahora sí podemos comenzar con la configuración desde el navegador. Accedemos a la dirección de nuestro servidor con la url.
Nota: Nos ha surgido un error:
Composer detected issues in your platform: Your Composer dependencies require the following PHP extensions to be installed: xml.
Simplemente no teníamos instalada la extensión xml para php, asi que la instalamos y reiniciamos el servicio.
apt install php-xml
systemctl restart apache2
Como podemos ver ya se puede ver en el navegador el formulario para introducir nuestras credenciales.

Introducimos el usuario y la contraseña que anteriormente usamos para la base de datos de prueba ‘academia’ y entramos.

Como podemos ver nos muestra todas las opciones que tenemos para gestionar nuestra base de datos, vamos a hacer click en nuestra base de datos ‘academia’ y veremos las tablas de la misma.

Vamos a pinchar sobre una tabla en concreto y podremos ver los registros de la tabla.

Desde esta herramienta podemos ver que podemos administrar la base de datos de forma gráfica ademas podemos hacer consultas de linea de comando en la pestaña de SQL.

Nota:
La máquina virtual servidor en la que hemos configurado phpmyadmin y mysql está conectada a dos redes, una conectada modo puente con la anfitriona desde la que nos hemos conectado desde el navegador y otra que comparte con el cliente. Desde el cliente si tuviesemos entorno gráfico podriamos entrar con la siguiente url 10.0.1.2/phpmyadmin. Aunque podemos instalar lynx y probar su funcionamiento de esta forma:

Conclusión
Phpmyadmin es una herramienta muy intuitiva y fácil de manejar para gestionar las bases de datos además es muy útil ya que podemos acceder desde un navegador.
Fuentes:
https://chachocool.com/como-instalar-phpmyadmin-en-debian-10-buster/