En algunas ocasiones es necesario la ejecución de comandos MySQL en una BBDD MySQL directamente desde el Shell de GNU/Linux. Por ejemplo, a la hora de programar scripts, donde es posible que queramos realizar consultas tanto de INSERT, UPDATE o incluso DELETE en alguna base de datos.
La forma de hacerlo es sumamente sencilla y os explicaré como se realiza directamente en Bash Shell.
⬇️ Compra en Amazon el hardware que utilizo ⬇️
- 💻 Ordenador Portátil: Descúbrelo aquí
- 🖥️🖥️ Monitores: Mis 2 súper monitores
- ⌨️ Teclado: Mini teclado + Lector DNIe
- 🖱️ Ratón: Mi ratón programable
- 🎧 Auriculares: Súper Auriculares TOP!
- 🖨️ Impresora: Mi fantástica impresora
- 🗄️ NAS Backup: Mi NAS para Backups
- 🔌 HUB USB: Mi HUB para puertos USB
- 📱 Smartphone: Mi Smartphone
- 📲 Tablet: Mi tablet para viajes
- ⌚ Smartwatch: Mi Smartwatch favorito
- 📹 Cámara deportiva: Mi cámara para deportes
1.- REQUISITOS
Para la realización de este tutorial será necesario un equipo con GNU/Linux y un servidor de bases de datos MySQL (en local o en remoto). Para este ejemplo he utilizado los siguientes recursos:
- GNU/Linux Debian 8 64bits
- Servidor MySQL local
- Servidor MySQL remoto
2.- COMANDOS MYSQL DESDE BASH EN UNA LÍNEA
La sintaxis para ejecutar comandos de MySQL directamente desde la consola Bash Shell es la siguiente:
root@server:$ mysql -u [usuario] -p[contraseña] -e "[comandos mysql]"
A modo de ejemplo, podemos listar las bases de datos que hay en nuestro servidor:
root@server:$ mysql -u root -pcontraseña -e "show databases"
+--------------------+
| Database |
+--------------------+
| information_schema |
| cacti |
| mysql |
| performance_schema |
| phpmyadmin |
| rosinfo |
+--------------------+
Si queremos realizar consultas sobre una base de datos determinada, usaremos la siguiente sintaxis:
root@server:$ mysql -u [usuario] -p[contraseña] [base de datos] -e "[comandos mysql]"
En el siguiente ejemplo real, contaremos el numero de elemento en la tabla "hosts" en la base de datos rosinfo:
root@server:$ mysql -u root -pcontraseña rosinfo -e "select count(*) from hosts"
+----------+
| count(*) |
+----------+
| 1 |
+----------+
3.- EJECUTAR COMANDOS MYSQL EN UN EQUIPO REMOTO
Si queremos lanzar la consulta SQL en un servidor remoto, deberemos añadir el parámetro "-h [ip]" donde [ip] es la dirección IP o nombre DNS del servidor:
root@server:$ mysql -h [ip] -u [user] -p[pass] -e "[mysql commands]"
En el siguiente ejemplo lanzaré el comando "describe lln4b_k2_categories" en un servidor remoto "db12345.db.1and1.com" de la base de datos "db12345" y con el usuario "dbuser12345":
root@server:$ mysql -h db12345.db.1and1.com -u dbuser12345 -pcontraseña db12345 -e "describe lln4b_k2_categories"
+------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| alias | varchar(255) | NO | | NULL | |
| description | text | NO | | NULL | |
| parent | int(11) | YES | MUL | 0 | |
| extraFieldsGroup | int(11) | NO | | NULL | |
| published | smallint(6) | NO | MUL | 0 | |
| access | int(11) | NO | MUL | 0 | |
| ordering | int(11) | NO | MUL | 0 | |
| image | varchar(255) | NO | | NULL | |
| params | text | NO | | NULL | |
| trash | smallint(6) | NO | MUL | 0 | |
| plugins | text | NO | | NULL | |
| language | char(7) | NO | MUL | NULL | |
+------------------+------------------+------+-----+---------+----------------+
4.- COMANDOS MYSQL DESDE UN SCRIPT EOF
Podemos incluir en nuestros scripts las consultas que queremos lanzar desde el Shell. Por ejemplo en un script EOF (la forma de hacerlo será la siguiente, aunque podemos hacerlo también sin EOF. En el siguiente ejemplo crearemos un script llamado script.sh con permisos de ejecución (chmod +x script.sh) y lo ejecutaremos de forma normal:
#!/bin/bash
mysql -h localhost -u root -pcontraseña EOF
use rosinfo;
select * from hosts\G;
EOF
Ejecutamos el script y comprobamos el resultado:
root@dns-server:~# ./script.sh
*************************** 1. row ***************************
id: 5
host: 192.168.1.150
ip: 192.168.1.150
description: Prueba Vmware
category: VmWare
snmp: public
httpport: 80
ping: 0.20
pingerror: 0
snmperror: 3
offline: 0
snmp_name: MikroTik
snmp_location: paracom
snmp_contact: raul
snmp_uptime: Timeticks: (97200) 0:16:12.00
ENJOY!