Insights de dominios

Cómo instalar MySQL en un VPS Ubuntu y crear su primera base de datos

Un tutorial de MySQL para principiantes para usuarios de Ubuntu VPS: instale MySQL, cree una base de datos y un usuario, pruebe el acceso, haga una copia de seguridad y solucione errores comunes.

VPS y Linux
Cómo instalar MySQL en un VPS Ubuntu y crear su primera base de datos

tiene un nuevo VPS.

Los archivos de su sitio web están listos.

Su solicitud solicita cuatro cosas:

Database host
Database name
Database username
Database password

Y de repente el simple proyecto se ha convertido en un proyecto de base de datos.

La buena noticia es que una configuración básica de MySQL no requiere que usted se convierta en administrador de bases de datos.

Para un sitio web o una aplicación pequeños, es necesario comprender un flujo de trabajo breve:

  1. instalar MySQL;
  2. confirme que está funcionando;
  3. crear una base de datos;
  4. crear un usuario de aplicación independiente;
  5. otorgar a ese usuario acceso solo a la base de datos que necesita;
  6. probar el inicio de sesión;
  7. saber cómo hacer una copia de seguridad;
  8. Sepa dónde buscar cuando algo falla.

Este tutorial utiliza Ubuntu y el paquete MySQL proporcionado a través del sistema de administración de paquetes de Ubuntu.

La versión exacta de MySQL puede variar según la versión de Ubuntu y los repositorios que utilice. Los siguientes comandos se centran en tareas que permanecen consistentes en las instalaciones normales actuales del servidor Ubuntu.

Elija nuestros planes VPS cuando necesite instalar y configurar su propio servicio de base de datos. Si el proyecto necesita principalmente un sitio convencional, compare primero nuestro hosting compartido; nuestra comparación de infraestructura explica las diferencias.

Antes de instalar nada

Conéctese al VPS mediante SSH.

Por ejemplo:

ssh [email protected]

Necesita un usuario que pueda ejecutar comandos administrativos con sudo.

Confirme la versión de Ubuntu:

cat /etc/os-release

Luego verifique el espacio disponible en disco:

df -h

No se debe instalar una base de datos en un servidor que ya esté casi lleno.

Comprueba también la memoria:

free -h

MySQL puede ejecutarse en servidores pequeños, pero la memoria disponible es importante a medida que su base de datos y su tráfico crecen.

Si aún no está familiarizado con SSH, lea SSH para principiantes de VPS: conectarse de forma segura, usar claves, copiar archivos y corregir errores comunes.

Paso 1: actualice la lista de paquetes

Ejecutar:

sudo apt update

Esto actualiza la lista local de paquetes disponibles en los repositorios de Ubuntu configurados.

Es posible que también desees instalar actualizaciones normales del sistema operativo antes de agregar un nuevo servicio:

sudo apt upgrade

Lea la lista de cambios propuestos antes de confirmar en un servidor de producción importante.

Las actualizaciones de paquetes son rutinarias, pero un VPS de producción aún merece control de cambios.

Paso 2: instale el servidor MySQL

La documentación del servidor de Ubuntu utiliza:

sudo apt install mysql-server

Confirme la instalación cuando se le solicite.

Una vez que el paquete termine de instalarse, MySQL normalmente debería iniciarse automáticamente.

Comprobar:

sudo systemctl status mysql

Quieres ver algo similar a:

Active: active (running)

Prensa:

q

para salir de la pantalla de estado si se abre en un buscapersonas.

También puede consultar simplemente:

sudo systemctl is-active mysql

Si la respuesta es:

active

el servicio está funcionando.

Instalar la base de datos, limitar la cuenta de la aplicación y probar una copia externa.
Instalar la base de datos, limitar la cuenta de la aplicación y probar una copia externa.

Paso 3: comprenda la cuenta raíz de MySQL en Ubuntu

En una instalación típica de un paquete de Ubuntu, MySQL crea una cuenta administrativa local root.

Ubuntu documenta el acceso raíz local mediante autenticación de socket.

Eso significa que normalmente puede ingresar a MySQL con:

sudo mysql

Debería ver un mensaje similar a:

mysql>

Esto no es lo mismo que iniciar sesión en su shell de Linux como root.

Ahora estás dentro del cliente de línea de comandos MySQL.

Para salir más tarde, escriba:

exit;

Cada comando SQL en los ejemplos siguientes termina con un punto y coma.

Si olvida el punto y coma, es posible que MySQL simplemente espere el resto del comando.

Paso 4: cree su primera base de datos

Supongamos que su sitio web se llama exampleapp.

Crear una base de datos:

CREATE DATABASE exampleapp;

Confirma que existe:

SHOW DATABASES;

Debería ver exampleapp en la lista.

Para muchas aplicaciones web, usar utf8mb4 es apropiado porque admite el rango completo de caracteres Unicode.

Como alternativa al primer ejemplo de CREATE DATABASE, cree la base de datos explícitamente con el siguiente comando. Ejecute solo uno de los dos comandos de creación para la misma base de datos:

CREATE DATABASE exampleapp
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

Los requisitos de la aplicación varían, así que utilice un conjunto de caracteres específico o una intercalación solicitada por su software cuando corresponda.

Paso 5: cree un usuario de aplicación independiente

No configure un sitio web para conectarse como usuario raíz de MySQL.

Crea una cuenta dedicada.

Por ejemplo:

CREATE USER 'exampleuser'@'localhost'
IDENTIFIED BY 'Use-A-Long-Random-Password-Here';

Reemplace la contraseña de ejemplo con una contraseña única y segura.

No utilice:

password123

No reutilice su contraseña raíz de VPS.

No coloque la contraseña en un repositorio público de Git.

La parte @'localhost' significa que se espera que esta cuenta se conecte desde el mismo servidor.

Esto es apropiado cuando el sitio web y MySQL se ejecutan en el mismo VPS.

ALL PRIVILEGES limitado a una base de datos resulta útil para instalar aplicaciones y migrar el esquema, pero sigue siendo amplio dentro de esa base. Si la aplicación admite cuentas separadas, conceda al usuario de ejecución únicamente las operaciones que necesita y reserve los permisos de migración para otra cuenta.

Paso 6: otorgar acceso solo a la base de datos requerida

Otorgue al usuario privilegios en la base de datos de la aplicación:

GRANT ALL PRIVILEGES ON exampleapp.* TO 'exampleuser'@'localhost';

Luego inspecciona las subvenciones:

SHOW GRANTS FOR 'exampleuser'@'localhost';

Debería ver el acceso a:

exampleapp.*

El asterisco significa todas las tablas dentro de esa base de datos.

No significa todas las bases de datos del servidor MySQL.

Esto es mucho más seguro que otorgar privilegios globales a una cuenta de aplicación.

Para un alojamiento web sencillo, el usuario de la aplicación normalmente necesita acceso a su propia base de datos y nada más.

Paso 7: prueba la cuenta de la aplicación

Salir de MySQL:

exit;

Ahora conéctese como nuevo usuario:

mysql -u exampleuser -p

MySQL solicita la contraseña.

Después de iniciar sesión:

USE exampleapp;

Entonces:

SELECT DATABASE();

Debería devolver:

exampleapp

Esta sencilla prueba es importante.

No configure WordPress, una aplicación personalizada u otra plataforma hasta que sepa que las credenciales de la base de datos realmente funcionan.

Paso 8: crea una tabla de prueba

Para una prueba funcional básica:

CREATE TABLE test_items (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

Insertar una fila:

INSERT INTO test_items (name)
VALUES ('My first MySQL row');

Léelo:

SELECT * FROM test_items;

Debería ver su fila.

Elimine la tabla de prueba luego si la aplicación administrará su propio esquema:

DROP TABLE test_items;

Ahora sabes que el usuario puede crear, escribir y leer objetos dentro de la base de datos deseada.

Los cuatro valores que necesita su aplicación

La configuración de su aplicación comúnmente usará:

Database host: localhost
Database name: exampleapp
Database user: exampleuser
Database password: your strong password

Algunas aplicaciones utilizan:

127.0.0.1

en lugar de:

localhost

Esos valores pueden causar un comportamiento de conexión diferente porque localhost puede usar un socket Unix mientras que 127.0.0.1 usa TCP.

Siga la documentación de la aplicación.

Si el sitio web y la base de datos están en el mismo VPS, normalmente no hay motivo para exponer MySQL públicamente en Internet.

No abra el puerto 3306 a menos que necesite MySQL remoto

MySQL comúnmente usa el puerto TCP:

3306

Un principiante puede suponer:

Mi sitio web usa MySQL, por lo que necesito abrir el puerto 3306 en el firewall.

No cuando el sitio web y MySQL están en el mismo servidor.

Una aplicación local puede conectarse localmente.

Exponer MySQL públicamente añade una superficie de ataque innecesaria.

El acceso remoto a la base de datos es una arquitectura diferente y debe utilizar direcciones de origen restringidas, usuarios de MySQL apropiados, reglas de firewall, redes seguras y TLS cuando sea necesario.

No configure MySQL para que escuche en cada interfaz simplemente para resolver un problema de aplicación local.

Cómo reiniciar MySQL

Después de un cambio de configuración, es posible que necesite:

sudo systemctl restart mysql

Luego verifique:

sudo systemctl status mysql

Si MySQL no regresa a active (running), no siga reiniciándolo.

Lea los registros:

sudo journalctl -u mysql --since "15 minutes ago"

Esto a menudo revela el problema de configuración o recursos.

Para obtener un flujo de trabajo de solución de problemas más amplio, lea Su sitio web no funciona: cómo leer los registros de VPS antes de reiniciar todo.

Nuestra guía de copias de seguridad explica la retención y las pruebas de restauración más allá de un archivo SQL. Si las importaciones agotan la memoria, lea RAM, swap y el OOM killer antes de elegir un VPS mayor o un servidor dedicado.

Cómo crear una copia de seguridad con mysqldump

No se realiza una copia de seguridad segura de una base de datos que existe sólo en un VPS.

Para una copia de seguridad lógica simple:

mysqldump --single-transaction --no-tablespaces -u exampleuser -p exampleapp > exampleapp.sql

Ingrese la contraseña de MySQL cuando se le solicite. Este ejemplo se adapta a una base de datos InnoDB simple: --single-transaction proporciona una lectura consistente de tablas InnoDB, mientras que --no-tablespaces evita requerir el privilegio global PROCESS simplemente para volcar metadatos de espacios de tablas. Evite cambios de esquema durante el volcado; Las tablas no transaccionales, rutinas, eventos y configuraciones de replicación/GTID pueden requerir diferentes opciones o privilegios adicionales.

Revisa el archivo:

ls -lh exampleapp.sql

No asuma que un archivo de cero bytes o inesperadamente pequeño es una copia de seguridad válida.

Para restaurar en una base de datos existente:

mysql -u exampleuser -p exampleapp < exampleapp.sql

Pruebe sus copias de seguridad.

Una estrategia de copia de seguridad está incompleta hasta que haya verificado que la restauración funciona.

Recuerde también que almacenar la única copia de seguridad en el mismo VPS no lo protege de una falla del VPS, un problema de cuenta, una corrupción del almacenamiento o una eliminación accidental.

Copie las copias de seguridad a otra ubicación protegida.

Evite las contraseñas directamente en los comandos de Shell

puede ver ejemplos como:

mysql -u exampleuser -pMyPassword

Evite este estilo.

Una contraseña escrita directamente en un comando puede volverse visible en el historial del shell o en la información del proceso según el entorno.

Prefiero:

mysql -u exampleuser -p

e ingrese la contraseña cuando se le solicite.

Las aplicaciones deben almacenar secretos utilizando el mecanismo apropiado para su plataforma y permisos.

Comandos MySQL útiles para principiantes

Ingrese MySQL:

sudo mysql

Mostrar bases de datos:

SHOW DATABASES;

Seleccione una base de datos:

USE exampleapp;

Mostrar tablas:

SHOW TABLES;

Mostrar usuarios y anfitriones:

SELECT user, host FROM mysql.user;

Mostrar los permisos de un usuario:

SHOW GRANTS FOR 'exampleuser'@'localhost';

Salir:

exit;

Estos comandos son suficientes para muchas tareas básicas de administración.

Error común: acceso denegado al usuario

puede ver:

ERROR 1045 (28000): Access denied for user

Comprobar:

  1. nombre de usuario;
  2. contraseña;
  3. parte del host de la cuenta MySQL;
  4. si se conecta a través de localhost u otro host;
  5. si la aplicación utiliza las credenciales que espera.

Dentro de MySQL:

SELECT user, host FROM mysql.user;

Recuerda que:

'exampleuser'@'localhost'

y:

'exampleuser'@'%'

no son la misma definición de cuenta.

No cree una cuenta % amplia simplemente para silenciar un error.

Comprenda desde dónde se conecta la aplicación.

Error común: base de datos desconocida

Si la aplicación reporta una base de datos desconocida, confirme:

SHOW DATABASES;

La configuración de la aplicación puede contener un error tipográfico.

Los nombres de las bases de datos también pueden diferir según el entorno.

Verifique el valor exacto en lugar de crear otra base de datos con una ortografía ligeramente diferente.

Error común: no se puede conectar al servidor MySQL local

Primer control:

sudo systemctl status mysql

Si MySQL está detenido:

sudo journalctl -u mysql --since "30 minutes ago"

También verifique el espacio en disco:

df -h

Un servicio de base de datos puede fallar cuando el servidor no tiene espacio utilizable en el disco.

Comprobar memoria:

free -h

Si el servicio se eliminó porque el sistema se quedó sin memoria, reiniciar MySQL es solo una recuperación temporal.

Error común: permiso denegado después de que existe la base de datos

La base de datos puede existir mientras el usuario de la aplicación carezca de permisos.

Inspeccionar:

SHOW GRANTS FOR 'exampleuser'@'localhost';

Luego compare el nombre de la base de datos en las subvenciones con el nombre configurado en su aplicación.

Una diferencia de un carácter importa.

¿Debería ejecutar mysql_secure_installation?

Muchas instalaciones de MySQL incluyen:

sudo mysql_secure_installation

La utilidad puede ayudar a revisar la configuración relacionada con la seguridad.

Sus indicaciones y comportamiento exactos pueden variar según el paquete MySQL y la configuración de autenticación.

No sigas mecánicamente un viejo tutorial.

Lea cada mensaje.

En Ubuntu, la autenticación raíz local de MySQL puede utilizar el socket del sistema operativo, por lo que es posible que los consejos de contraseña escritos para otra distribución o una versión anterior de MySQL no coincidan con su servidor.

El objetivo no es presionar Y lo más rápido posible.

El objetivo es comprender la configuración de autenticación resultante.

Mantenga MySQL actualizado

La seguridad normal de Ubuntu y el mantenimiento de paquetes son importantes.

Consulta las actualizaciones disponibles:

sudo apt update
apt list --upgradable

Aplique actualizaciones de acuerdo a su proceso de mantenimiento.

Las actualizaciones de la base de datos merecen copias de seguridad y un plan de reversión.

No ejecute actualizaciones de versiones principales de manera casual en la única copia de los datos de producción.

Para un VPS pequeño, las buenas operaciones suelen ser sencillas:

  • mantener el sistema operativo compatible;
  • aplicar actualizaciones de seguridad;
  • hacer una copia de seguridad de la base de datos;
  • restauraciones de prueba;
  • monitorear el espacio en disco;
  • monitorear la memoria;
  • revise los registros de MySQL cuando cambie el comportamiento.

Una lista de verificación de producción simple

Antes de conectar un sitio web real:

  • MySQL está activo.
  • La base de datos existe.
  • La aplicación tiene su propio usuario.
  • El usuario está restringido a la base de datos requerida.
  • La contraseña es segura y se almacena de forma segura.
  • La aplicación puede conectarse.
  • El puerto 3306 no es innecesariamente público.
  • Las copias de seguridad existen fuera del VPS.
  • Se ha probado una restauración.
  • Se monitorean el disco y la memoria.
  • Sabes cómo leer los registros del servicio MySQL.

Esa es una base mucho mejor que instalar MySQL y esperar que el instalador se encargue de todo para siempre.

Preguntas frecuentes

¿Cómo instalo MySQL en Ubuntu?

Ejecute: sudo apt update; sudo apt install mysql-server Luego verifique el servicio con: sudo systemctl status mysql

¿Cómo abro la línea de comando de MySQL como administrador local en Ubuntu?

Una instalación normal de un paquete de Ubuntu comúnmente admite: sudo mysql

¿Mi sitio web debería utilizar la cuenta raíz de MySQL?

No. Cree un usuario dedicado y concédale acceso solo a la base de datos de la aplicación.

¿Qué host debo usar para MySQL si el sitio web está en el mismo VPS?

Por lo general, localhost es apropiado, pero siga los requisitos de su aplicación.

¿Necesito abrir el puerto TCP 3306?

No cuando la aplicación y la base de datos están en el mismo VPS. El acceso remoto público debe habilitarse sólo cuando sea necesario y protegerse deliberadamente.

¿Cómo hago una copia de seguridad de una base de datos?

Una copia de seguridad lógica básica es: mysqldump -u USER -p DATABASE > backup.sql

¿Cómo veo por qué MySQL falló?

Empezar con: sudo systemctl status mysql; sudo journalctl -u mysql --since "30 minutes ago"

¿Dónde debo almacenar las copias de seguridad?

Mantenga copias protegidas fuera del VPS. Una copia de seguridad almacenada únicamente junto a la base de datos original no le protege de la pérdida de todo el servidor.