🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Cómo crear una base de datos MySQL desde SSH (DirectAdmin)

Actualizado el 29 de noviembre de 2025

¿Por qué crear una base de datos MySQL desde SSH?

Cuando gestionas un servidor con DirectAdmin, la forma más común de crear bases de datos es a través del panel de control. Sin embargo, hay situaciones donde necesitas más control o rapidez: automatizar procesos, trabajar con scripts, o simplemente prefieres la línea de comandos.

Crear una base de datos MySQL desde SSH te da acceso directo al motor de base de datos, sin intermediarios. Es una habilidad esencial para cualquier administrador de sistemas o desarrollador que quiera optimizar su flujo de trabajo.

Además, si alguna vez tienes problemas con el panel (por ejemplo, si DirectAdmin no responde), saber hacerlo por SSH te sacará de apuros. En esta guía te explicaré paso a paso, como si estuvieras sentado a mi lado, cómo crear tu base de datos, usuario y asignar permisos, todo desde la terminal.


Requisitos previos antes de empezar

Antes de lanzarnos a escribir comandos, asegurémonos de que tienes todo lo necesario. No queremos frustraciones a mitad del proceso.

Acceso SSH al servidor

Necesitas acceso SSH a tu servidor. Esto normalmente significa que tienes las credenciales de root o un usuario con permisos de superusuario. Si no sabes cómo conectarte, aquí tienes un recordatorio rápido:

  • En Linux o macOS, abre la terminal y escribe: ssh usuario@tu-servidor.com
  • En Windows, puedes usar PuTTY o la terminal integrada de Windows 10/11.

[INFO] Si tu hosting con DirectAdmin es compartido, es posible que el acceso SSH esté restringido. Pregunta a tu proveedor. En servidores VPS o dedicados, suele estar habilitado por defecto.

Credenciales de MySQL root

Necesitarás el usuario y contraseña de root de MySQL. En DirectAdmin, normalmente esta información está en el archivo /usr/local/directadmin/conf/mysql.conf. Si no la tienes, puedes pedirla a tu proveedor o buscarla en la configuración de DirectAdmin.

Conocimientos básicos de comandos

No necesitas ser un gurú de Linux, pero sí saber moverte por el sistema: cd, ls, y entender que los comandos se escriben en la terminal. Si has llegado hasta aquí, seguro que ya sabes lo suficiente.


Paso 1: Conectarse al servidor por SSH

Lo primero es abrir tu terminal y conectarte al servidor. Una vez conectado, verás un prompt como root@servidor:~#. Este símbolo # indica que tienes privilegios de administrador, lo cual es necesario para gestionar MySQL.

Si te conectas con un usuario sin privilegios, tendrás que usar sudo delante de cada comando. Por ejemplo, sudo mysql. Te recomiendo que, para esta tarea, uses root directamente para evitar problemas de permisos.


Paso 2: Acceder al cliente MySQL

Una vez dentro del servidor, el siguiente paso es entrar en el cliente de MySQL. Escribe el siguiente comando y pulsa Enter:

mysql -u root -p

El sistema te pedirá la contraseña de root de MySQL. Escríbela (no verás los caracteres mientras escribes, es normal) y pulsa Enter.

Verás algo como esto:

Welcome to the MySQL monitor.  Commands end with ; or \g.
mysql>

Este prompt mysql> indica que ya estás dentro del motor de base de datos. Todo lo que escribas a partir de ahora serán comandos MySQL, no comandos de Linux.

[TIP] Si prefieres no usar la contraseña en la línea de comandos (por seguridad), puedes usar mysql -u root -p y luego escribirla. Nunca pongas la contraseña directamente en el comando, ya que quedará registrada en el historial de la terminal.


Paso 3: Crear la base de datos

Ahora viene la parte principal. Para crear una base de datos, usa el comando CREATE DATABASE. La sintaxis básica es:

CREATE DATABASE nombre_base_datos;

Por ejemplo, si quieres crear una base de datos llamada mi_web, escribirías:

CREATE DATABASE mi_web;

Pulsa Enter y verás el mensaje Query OK, 1 row affected. Con esto, la base de datos ya está creada.

Buenas prácticas al nombrar bases de datos

  • Usa minúsculas y guiones bajos en lugar de espacios.
  • Evita nombres genéricos como test o prueba.
  • Si es para un proyecto específico, incluye un prefijo, por ejemplo: miweb_produccion.

[WARNING] En algunos servidores compartidos, DirectAdmin te obliga a usar un prefijo con el nombre de usuario (por ejemplo, usuario_mi_web). Si el comando da error, prueba con ese formato. También puedes verificar las políticas de tu servidor.


Paso 4: Crear un usuario para la base de datos

Una base de datos sin un usuario asignado es como una casa sin llave. Necesitamos crear un usuario que pueda acceder a ella. El comando es:

CREATE USER 'nombre_usuario'@'localhost' IDENTIFIED BY 'contraseña_segura';

Desglosemos:

  • nombre_usuario: El nombre que quieras, por ejemplo usuario_web.
  • localhost: Indica que el usuario solo podrá conectarse desde el mismo servidor. Es lo más seguro y lo habitual en hosting.
  • contraseña_segura: Una contraseña robusta. Debe tener al menos 8 caracteres, combinando letras, números y símbolos.

Un ejemplo completo sería:

CREATE USER 'usuario_web'@'localhost' IDENTIFIED BY 'MiClave#2024!Segura';

Verás el mensaje Query OK, 0 rows affected. El usuario está creado.

[INFO] Si necesitas que el usuario se conecte desde cualquier host (por ejemplo, para acceder de forma remota), cambia localhost por %. Sin embargo, esto es menos seguro y no lo recomiendo a menos que sea imprescindible.


Paso 5: Asignar permisos al usuario sobre la base de datos

Ahora que tenemos la base de datos y el usuario, toca unirlos. Le daremos al usuario todos los permisos sobre la base de datos que acabamos de crear. El comando es:

GRANT ALL PRIVILEGES ON nombre_base_datos.* TO 'nombre_usuario'@'localhost';

Siguiendo nuestro ejemplo:

GRANT ALL PRIVILEGES ON mi_web.* TO 'usuario_web'@'localhost';

Este comando le otorga al usuario todos los privilegios (SELECT, INSERT, UPDATE, DELETE, etc.) sobre todas las tablas de la base de datos mi_web. El .* indica que aplica a todas las tablas de esa base de datos.

Verás Query OK, 0 rows affected.

¿Y si necesito permisos específicos?

Puedes ser más granular. Por ejemplo, si solo quieres que el usuario pueda leer datos (SELECT) y no modificarlos, usarías:

GRANT SELECT ON mi_web.* TO 'usuario_web'@'localhost';

Los permisos más comunes son:

  • SELECT: Solo lectura.
  • INSERT: Añadir datos.
  • UPDATE: Modificar datos existentes.
  • DELETE: Eliminar datos.
  • ALL PRIVILEGES: Todos los anteriores y más (CREATE, DROP, ALTER, etc.).

Paso 6: Aplicar los cambios (FLUSH PRIVILEGES)

Este paso es crucial y a menudo se olvida. Después de modificar permisos, hay que indicarle a MySQL que actualice sus tablas internas de privilegios. El comando es:

FLUSH PRIVILEGES;

Pulsa Enter y verás Query OK, 0 rows affected. Esto asegura que los permisos se apliquen de inmediato, sin necesidad de reiniciar el servicio.

[TIP] Aunque en versiones recientes de MySQL el FLUSH PRIVILEGES no siempre es necesario tras un GRANT (porque se aplica automáticamente), es una buena práctica incluirlo. No hace daño y te asegura de que todo esté en orden.


Paso 7: Verificar que todo funciona correctamente

Antes de salir de MySQL, hagamos una comprobación rápida para asegurarnos de que todo está bien. Ejecuta:

SHOW DATABASES;

Deberías ver tu base de datos en la lista. Para ver los usuarios, puedes usar:

SELECT user, host FROM mysql.user;

Y para ver los permisos de tu usuario específico:

SHOW GRANTS FOR 'usuario_web'@'localhost';

Verás una salida con los privilegios que le asignaste. Si todo coincide, ¡perfecto!


Paso 8: Salir de MySQL y probar la conexión

Escribe EXIT; y pulsa Enter para salir del cliente MySQL. Verás el prompt de Linux de nuevo.

Para probar que la conexión funciona, intenta conectarte directamente con el nuevo usuario:

mysql -u usuario_web -p mi_web

Te pedirá la contraseña que creaste. Si todo va bien, entrarás directamente a la base de datos mi_web. Verás el prompt mysql> de nuevo. Escribe EXIT; para salir.

[WARNING] Si no puedes conectarte, revisa que la contraseña sea correcta y que el usuario tenga permisos. También verifica que no haya un firewall bloqueando la conexión local (aunque es raro).


Comandos útiles adicionales para gestión de bases de datos

Ya has creado tu base de datos, pero seguro que más adelante necesitarás hacer otras operaciones. Aquí tienes una lista de comandos MySQL que te serán muy útiles:

Eliminar una base de datos

DROP DATABASE nombre_base_datos;

[WARNING] Este comando es irreversible. Elimina la base de datos y todos sus datos. Úsalo con mucha precaución.

Eliminar un usuario

DROP USER 'nombre_usuario'@'localhost';

Cambiar la contraseña de un usuario

ALTER USER 'nombre_usuario'@'localhost' IDENTIFIED BY 'nueva_contraseña';

Ver todas las bases de datos

SHOW DATABASES;

Seleccionar una base de datos para trabajar

USE nombre_base_datos;

Ver las tablas de la base de datos seleccionada

SHOW TABLES;

Importar una base de datos desde un archivo SQL

Esto se hace desde la terminal de Linux, no desde el cliente MySQL:

mysql -u usuario_web -p nombre_base_datos < archivo.sql

Exportar una base de datos a un archivo SQL

mysqldump -u usuario_web -p nombre_base_datos > archivo.sql

Errores comunes y cómo solucionarlos

Aunque el proceso es sencillo, es normal encontrarse con algún error. Aquí te dejo los más comunes y sus soluciones.

Error: ERROR 1044 (42000): Access denied for user

Este error significa que el usuario con el que te has conectado a MySQL no tiene permisos para crear bases de datos. Asegúrate de estar usando el usuario root o uno con privilegios globales.

Error: ERROR 1007 (HY000): Can't create database; database exists

La base de datos ya existe. Usa SHOW DATABASES; para verificar el nombre exacto y elige otro nombre o elimina la existente.

Error: ERROR 1396 (HY000): Operation CREATE USER failed

Este error suele aparecer si el usuario ya existe. Puedes intentar eliminarlo primero con DROP USER y luego recrearlo, o simplemente usar otro nombre de usuario.

Error: Access denied for user 'usuario'@'localhost'

Al intentar conectarte, esto indica que la contraseña es incorrecta o que el usuario no tiene permisos para esa base de datos. Verifica la contraseña y los permisos con SHOW GRANTS.


Automatización: Script para crear bases de datos

Si creas bases de datos con frecuencia, puedes automatizar el proceso con un pequeño script en bash. Aquí te dejo un ejemplo básico:

#!/bin/bash
# Script para crear base de datos y usuario en MySQL

read -p "Nombre de la base de datos: " DB_NAME
read -p "Nombre del usuario: " DB_USER
read -sp "Contraseña del usuario: " DB_PASS
echo

mysql -u root -p <<MYSQL_SCRIPT
CREATE DATABASE $DB_NAME;
CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';
GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost';
FLUSH PRIVILEGES;
MYSQL_SCRIPT

echo "Base de datos $DB_NAME y usuario $DB_USER creados correctamente."

Guarda el archivo, dale permisos de ejecución (chmod +x script.sh) y ejecútalo. Te pedirá los datos y hará el trabajo por ti.


Seguridad: Buenas prácticas al trabajar con MySQL por SSH

Trabajar con la base de datos directamente desde la terminal implica una gran responsabilidad. Aquí tienes algunas recomendaciones de seguridad:

Usa contraseñas fuertes

Nunca uses contraseñas como 123456 o admin. Genera contraseñas aleatorias con herramientas como openssl rand -base64 12 en la terminal.

Limita los permisos al mínimo necesario

Si un usuario solo necesita leer datos, no le des permisos de escritura. Menos privilegios significan menos riesgo si la cuenta se ve comprometida.

No uses root para aplicaciones web

Crea usuarios específicos para cada aplicación. Si una aplicación es vulnerada, el atacante solo tendrá acceso a esa base de datos, no a todo el sistema.

Mantén MySQL actualizado

Las actualizaciones suelen incluir parches de seguridad. Mantén tu servidor al día.

Realiza copias de seguridad periódicas

Aunque no es parte de la creación de bases de datos, es fundamental. Programa copias de seguridad automáticas con mysqldump o herramientas como cron.


Preguntas frecuentes (FAQ)

¿Puedo crear una base de datos MySQL desde SSH en un hosting compartido con DirectAdmin?

Depende de tu proveedor. Algunos hosting compartidos bloquean el acceso SSH por seguridad. Si tienes acceso, el proceso es el mismo, pero es posible que necesites usar un prefijo en el nombre de la base de datos.

¿Cuál es la diferencia entre localhost y % en el host del usuario?

localhost significa que el usuario solo puede conectarse desde el mismo servidor donde está MySQL. % permite conexiones desde cualquier dirección IP. Para hosting web, localhost es lo más seguro y lo más común.

¿Qué hago si olvido la contraseña de root de MySQL?

Si tienes acceso root al servidor, puedes restablecerla. Detén el servicio MySQL, inícialo en modo seguro sin contraseña y cámbiala. Este proceso es un poco más avanzado, pero hay muchos tutoriales disponibles.

¿Es necesario usar FLUSH PRIVILEGES después de crear un usuario?

En versiones modernas de MySQL (5.7+), no es estrictamente necesario, pero es una buena práctica. No hace daño y asegura que los cambios se apliquen de inmediato.

¿Puedo usar estos comandos en otros paneles como cPanel o Syspanel?

Los comandos MySQL son universales, así que funcionan en cualquier servidor con MySQL. La diferencia está en el acceso y los permisos. En Syspanel (antes HestiaCP), el acceso se realiza por el puerto 2106 y el proceso es similar, aunque la interfaz gráfica es diferente.

¿Cómo importo una base de datos existente desde SSH?

Usa el comando mysql -u usuario -p nombre_base_datos < archivo.sql. Asegúrate de que la base de datos ya exista o créala primero.


Conclusión y siguientes pasos

Crear una base de datos MySQL desde SSH con DirectAdmin es un proceso directo una vez que conoces los comandos. Hemos cubierto desde la creación de la base de datos hasta la asignación de usuarios y permisos, pasando por la verificación y la seguridad.

Ahora tienes el conocimiento para hacerlo por tu cuenta. Te recomiendo practicar en un entorno de prueba antes de hacerlo en producción. Una vez que domines esto, puedes explorar otras tareas avanzadas como la replicación, la optimización de consultas o la gestión de usuarios con permisos más granulares.

Si te ha quedado alguna duda, repasa los pasos o consulta la documentación oficial de MySQL. Y recuerda: la práctica hace al maestro. ¡Anímate a probar!

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel