Administración del servidor

MySQL en Linux (Tutorial para Principiantes)

En este post, cubriremos muchos aspectos del MySQL en Linux. Primero que todo, como instalarlo, como realizar una operación CRUD básica, como importar & exportar datos, juega con el motor MySQL como establecer la contraseña de usuario raíz y mucho más.

MySQL es uno de los motores más populares de bases de datos relacionales en el mundo. Se ha ganado su fama por ser de código abierto y bastante estable.

También es compatible con la mayoría de los lenguajes de programación conocidos. Por supuesto, es posible instalarlo y utilizarlo en la mayoría de las distribuciones Linux que existen, por ejemplo, Ubuntu y CentOS. Vamos a comenzar.

 

 

Instalar MyQSL en Linux Ubuntu y CentOS

El primer paso para utilizar MySQL en Linux es obviamente instalarlo en nuestros sistemas.

Ubuntu y CentOS son dos de las distribuciones de Linux más utilizadas. En caso de Ubuntu, es más popular entre los novatos que vienen de otros sistemas operativos como Windows.

Recientemente, Canonical; la empresa detrás del desarrollo de Ubuntu ha estado perfilando Ubuntu para ser utilizado en servidores.

On the other hand, CentOS was born as a clone of Red Hat Enterprise Linux and it has always been used in the servers area as its main objective.

So if you use Ubuntu, you can install MySQL by typing this command in a terminal session:

$ sudo apt install mysql-server

Instalar MyQSL en Linux Ubuntu

Luego, después de tipear la contraseña del usuario, comenzara la descarga y subsecuentemente la instalación.

Por otra parte, CentOS no incluye MySQL por defecto en sus archivos. Sin embargo, es sencillo agregar el archivo MySQL para instalarlo. Primero, cambia al usuario raíz y luego agrega el archivo.

$ su

$ yum install https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm

Agregar el repositorio para instalar MySQL

Tipea Y para comenzar el proceso.

Ahora, puede instalar MySQL en CentOS. Solo tipee el siguiente comando:

$ yum install mysql-community-server

Instalar MySQL en CentOS

 

Verificar si MySQL está instalado

Es posible que durante la instalación en ambos sistemas algo vaya mal. Por lo que es buena idea verificar si MySQL está instalado o no.

En ambos sistemas (Ubuntu & CentOS), si usted quiere verificar si MySQL esta correctamente instalado, puede mostrar la versión utilizando el siguiente comando:

$ mysql --version

MySQL correctamente instalado en Linux

Al mostrar la versión actual de MySQL, significa que MySQL esta correctamente instalado y listo para usar.

 

¿Dónde está instalado MySQL en Linux?

Generalmente, cada distribución tiene su propia forma de desempacar cada programa que instalamos. Sin embargo, Linux tiene algunas convenciones.

Normalmente, MySQL binaries, una vez instalados, son almacenados en la siguiente ubicación:

/usr/bin

Por otra parte, es bueno conocer donde están almacenadas las bases de datos en el sistema. Normalmente la ubicación es como sigue:

/var/lib/mysql/

Finalmente, si quiere conocer donde están localizados todos los archivos instalados de MySQL, puede correr el siguiente comando:

Para Ubuntu:

$ dpkg -L mysql-server

Archivos MySQL en Linux

 

¿Dónde está el archivo de configuración de MySQL (my.cnf)?

MySQL corre como un servicio del sistema. En Unix family systems, los servicios son configurados a través de archivos de texto. El archivo my.cnf es el archivo donde toda la configuración está definida.

Si usted utiliza Ubuntu, puede encontrar el archivo de configuración de MySQL en el siguiente camino:

/etc/mysql/my.cnf

Por otra parte, si usted utiliza CentOS, el camino es el siguiente:

/etc/my.cnf

Algo para tener en mente es que el archivo de configuración puede incluir otros archivos de configuración. Esto es para separar las configuraciones y hacerlas más entendibles.

Si quiere ver su contenido puede utilizar el comando cat:

$ cat /etc/mysql/my.cnf

Archivo Mycnf

Puede editar su contenido utilizando un editor de texto como nano o vim. En el cado de Ubuntu, la mayoría de las configuraciones están en

/etc/mysql/conf.d/

Recuerde que, si va a editarlo, es recomendable crear un archivo de respaldo primero.

 

Iniciar MySQL y habilitar el inicio

Ahora MySQL está instalado, pero todavía no corre. Así que, ¿cómo Iniciar MySQL?

Desde las primeras versiones de Linux, systemd está en cargo de gestionar los servicios del sistema. Como ya lo sabíamos, MySQL es un servicio del sistema.

Para iniciar a correr el servicio de MySQL, tipee el siguiente comando en la terminal:

$ sudo systemctl start mysql

Si está utilizando CentOS, use este comando como el usuario raíz:

$ systemctl start mysqld

Inicie el servicio MySQL

Como podemos ver, no hay salida. Esto significa que el servicio inicio exitosamente.

Si reinicia el sistema, notara que MySQL no está corriendo. Por lo que necesitamos habilitarlo para correr en el inicio del sistema.

Para hacer esto, utilice el comando systemctl, pero agregue la opción de habilitar:

$ sudo systemctl enable mysql

En caso de que esté utilizando CentOS:

$ systemctl enable mysqld

Iniciar MySQL y habilitar el inicio

Ahora si usted reinicia el sistema, notara que MySQL está corriendo. Veamos como asegurar eso.

 

Verifique si MySQL está ejecutandose

Usted puede verificar si MySQL está ejecutandose o no utilizando el comando systemctl, pero agregue la opción de estatus:

$ sudo systemctl status mysql

Para CentOS, el comando debe correr como usuario raíz como sigue:

$ systemctl status mysqld

El servicio MySQL se ejecuta en Linux

El comando genera una pantalla de salida con una seal verde indicando que los servicios están corriendo.

De igual forma, aparece un indicador gris indicando que esta inactivo o detenido.

Servicio inactivo MySQL

 

Revise en cual puerto MySQL está ejecutandose

Una parte importante de gestionar los servicios MySQL es conocer cual puerto está corriendo la instancia. Por defecto, el puerto utilizado por MySQL es 3306, sin embargo, siempre es aconsejable verificar antes de comenzar a trabajar.

Para verificar cual puerto es utilizado por MySQL en Linux, usted puede utilizar uno de estos dos comandos:

$ lsof -n | grep 'mysql.*TCP'

O, también puede utilizar este también:

$ netstat -tlpn | grep mysql

Puerto MySQL en Linux

De cualquier forma, es bastante útil conocer cual puerto es utilizado por MySQL para así abrir ese puerto en caso de que esté utilizando un corta fuegos como iptables o CSF firewall.

 

Reiniciar MySQL

Si usted realiza cualquier cambio en la configuración de MySQL, este no se hará efectivo hasta que reinicie MySQL o reinicie los servicios de MySQL.

Para Reiniciar MySQL solo utilice los siguientes comandos:

$ sudo systemctl restart mysql

Para CentOS use este comando como usuario raíz:

$ systemctl restart mysqld

Reinicie el servicio MySQL en Linux

Si el comando no genera ninguna pantalla de salida, esto significa que el servicio fue reiniciado exitosamente.

Establezca la contraseña de raíz para MySQL

El usuario MySQL es uno de los que tiene todos los privilegios sobre todas las bases de datos. Por lo que es necesario para definir una contraseña muy fuerte para este usuario.

Algunas de las operaciones que el usuario raíz puede hacer es crear nuevos usuarios. Así como gestionar los permisos de estos.

Para hacer esto, utilizaremos el script mysql_secure_installation donde podemos no solo definimos la contraseña del usuario raíz, pero podemos también agregar otras configuraciones.

Así que, en Ubuntu corre el siguiente comando para utilizar el script mysql_secure_installation.

$  sudo mysql_secure_installation

En CentOS, el comando es el mismo, pero córrelo como usuario raíz.

$ mysql_secure_installation

Allí, la primera pregunta será sobre la activación del plugin de la contraseña validada. Es una buena idea habilitarlo. Entonces, elija el nivel de una política de validación de contraseña.

Validar el complemento de contraseña activo

Luego, podemos definir la contraseña del usuario raíz:

Establecer la contraseña de root en MySQL

Posteriormente, el plugin evaluara la fuerza de la contraseña. Tipee Y para continuar.

Luego, se le formularan otras preguntas de configuración que debe responder. Las respuestas dependen de cada caso en particular.

Asegure la instalación de MySQL

¡Felicitaciones! La contraseña de raíz ha sido definida correctamente.

 

Verificar la versión de MySQL

MySQL es una aplicación con un desarrollo bien activo. A parte de esto, las grandes distribuciones de Linux constantemente envían parches de seguridad. Por lo que es bueno conocer que versión del MySQL está instalada.

Por otra parte, en internet, algunas veces se hacen publicaciones sobre descubrimientos de vulnerabilidades de seguridad y que versiones son aceptadas.

Al conocer que versión tenemos, seremos capaces de conocer si tenemos vulnerabilidades y tomar precauciones.

Para hacer esto, simplemente corre el siguiente comando:

$ mysql --version

Obtenga la versión de MySQL

Allí puede observar la versión que está instalada actualmente. Así podrá actualizarla y mantenerla acorde a tus necesidades.

 

Crear un usuario en MySQL

Trabajar con MySQL es un asunto delicado, no por la complejidad del servicio en sí mismo, si no por las políticas de seguridad, que tenemos que implementar para proteger los datos.

Una política de seguridad básica es crear un usuario específico para cada aplicación o base de datos.

Para hacer esto, primero tiene que acceder al MySQL Shell como usuario raíz:

$ sudo mysql -u root -p

En CentOS:

$ mysql -u root -p

El shell de MySQL

Cuando corre el comando, se le preguntara su contraseña de usuario raíz para el MySQL. Luego será capaz de utilizar los comandos MySQL.

Para crear un nuevo usuario corra la siguiente oración:

> CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';

Crear un nuevo usuario

Reemplace ‘user’ con el nombre de usuario de su preferencia. ‘localhost’ es el host donde usted creara el usuario. Y en ‘password’ introduzca la contraseña para este nuevo usuario. Similarmente, es recomendada que esta contraseña sea robusta.

 

Conceda todos los privilegios

El usuario recién creado no tiene todos los privilegios en ninguna base de datos. De hecho, usted tampoco será capaz de acceder al Shell de MySQL. Entonces, el usuario raíz tiene que conceder ciertos privilegios para este nuevo usuario.

Existen varios privilegios y sus asignaciones dependerán del administrador del servidor. Algunos de ellos son:

  • TODOS LOS PRIVILEGIOS: Asigna todos los permisos en la base de datos elegida.
  • CREAR: este privilegio le permite crear nuevas tablas o base de datos.
  • SOLTAR: en este caso, le permite eliminar tablas y base de datos.
  • ELIMINAR: le permite eliminar archivos de las tablas.
  • INSERTAR: con este privilegio, puede crear registros en las tablas.
  • SELECCIONAR: este privilegio es requerido para leer registro de la tabla.
  • ACTUALIZAR: le permite actualizar los registros de una tabla.
  • COCEDER OPCION: con este privilegio, el usuario pude eliminar privilegios de ciertos usuarios.

La sintaxis para conceder un privilegio es la siguiente:

> GRANT [privilege1, privilege2] ON [database].[table] TO '[user]'@'localhost';

Por ejemplo:

> GRANT CREATE ON test.* TO 'user'@'localhost';

Privilegios para un nuevo usuario en MySQL

En este caso, el usuario solo puede crear tablas en la base de datos llamada prueba.

Por el contrario, si quiere conceder todos los permisos en todas las tablas en una sola llamada a la base de datos prueba, la mejor opción es TODOS LOS PRIVILEGIOS. Este es un ejemplo:

> GRANT ALL PRIVILEGES ON test.* TO 'user'@'localhost';

Conceder todos los privilegios a un nuevo usuario

De esta forma, los privilegios son asignados a un usuario en MySQL.

 

Listar todas las bases de datos MySQL

Con el tiempo, nuestra instancia MySQL estará repleta con muchas bases de datos. Entonces, es mejor que en algún punto las enumeremos todas.

Para hacer esto, primero acceda la consola de MySQL, con el siguiente comando como usuario raíz o utilizando sudo:

$ sudo mysql -u root -p

Una vez que entró a la consola de MySQL, solo utilice el siguiente comando para enumerar todas las bases de datos existentes:

> SHOW DATABASES;

Mostrando todas las bases de datos en MySQL

En la salida de pantalla, podemos ver todas las bases de datos.

 

Crear una tabla MySQL

Una de las operaciones más básicas cuando tenemos una instancia recién creada de MySQL es crear una tabla.

Sin embargo, para crear una tabla primero tenemos que crear una basa de datos.

Una vez que entre en la consola de MySQL, crearemos una base de datos con el siguiente comando:

> CREATE DATABASE [database_name];

Luego, necesitamos seleccionar la base de datos creada recientemente.

> USE [database_name];

En este caso, crear la base de dato llamada “Ejemplo”.

Crear una nueva base de datos

Ahora podemos crear la tabla. La sintaxis básica MySQL para crear una tabla es la siguiente:

> CREATE TABLE [table_name] (column1_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT], column2_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] ... );

En el siguiente ejemplo, creare una tabla llamada “Persona” con tres columnas. La primera será “Id” que será un tipo entero de longitud 10 que no puede ser nulo.

Generalmente, la primera columna es una dedicada a la primera llave. Además, las opciones en [] son opcionales.

La segunda columna será “nombre” que será un varchar de longitud 10 y la última columna será llamada “last_name” que también será varchar de longitud 10.

> CREATE TABLE Person (Id int(10) NOT NULL, name varchar(10), last_name varchar(10));

Crear una nueva tabla

¡Asombroso! Acaba de crear una tabla MySQL. Sin embargo, la tabla está vacía ya que solo fue crear y no hay datos ingresados en ella todavía. Ahora vamos a ver como ingresar datos en esa tabla.

 

Operaciones CRUD

Las operaciones CRUD a una tabla de base de datos, son otras operaciones de manipulación de datos muy básicas. Por lo que necesitamos saber cómo realizarlas.

CRUD significa:

C: Crear una tabla.

R: (read)Leer datos de una tabla de datos.

U: (update) Actualizar una base de datos.

D: (delete) Eliminar datos de una base de datos.

 

Crear un nuevo registro (Insert)

Una vez que la tabla es creada, es tiempo de ingresar un registro a ella. Para hacer esto, es necesario conocer exactamente cuáles son los tipos de columnas de la tabla.

Para este ejemplo, utilizaremos la misma tabla que hemos creado anteriormente. La sintaxis básica para crear un registro con la instrucción insert es como la siguiente:

> INSERT INTO table_name (column1, column2, column3,..) VALUES ( value1, value2, value3,..);

Por lo que, será algo como esto:

> INSERT INTO Person (Id, name, last_name) VALUES (1,'Richard','Winters');

agregar un nuevo registro en una tabla

 

Leer datos desde la tabla (Select)

Una vez los datos han sido guardados, es tiempo de leerlos. La instrucción es select. La sintaxis básica es como sigue:

> SELECT column1, column2, ... FROM table_name;

Si quiere leer todos los datos de la tabla, utilice esta:

> SELECT * FROM table_name;

Usando la instrucción select en MySQL

Sin embargo, usualmente es requerido establecer una condición para leer los datos que necesitamos. Puede tener millones o billones de registros y es altamente aconsejable no devolver esta cantidad de datos de una vez.

Para hacer esto, agregue la cláusula donde (Where) junto con la condición.

> SELECT * FROM table_name WHERE [condition]

Por ejemplo, si quisiera leer todos los campos donde la Id es 1, utilizaría la siguiente instrucción:

> SELECT * FROM Person WHERE Id=1;

Conseguir con condicion

 

Actualizar datos

usted puede haber ingresado un dato incorrecto y necesita actualizarlo. Para hacer esto, necesitamos utilizar la instrucción Update.

Primero, necesita conocer cual registro necesita ser actualizado, es necesario agregar una pequeña condición. De lo contrario, todos los registros serán actualizados. Por lo que debe ser cuidadoso.

La sintaxis básica es como sigue:

> UPDATE table_name SET column1 = value1, column2 = value2 WHERE [condition];

Continuando con el ejemplo previo, si quiere actualizar la columna “last_name” de los datos cuya Id es “1”, lo hará de la siguiente manera:

> UPDATE Person SET last_name = 'Clark' WHERE Id=1;

Instrucción Update en MySQL

Ahora, corra nuevamente la instrucción select para ver los cambios:

> SELECT * FROM Person;

Verifique los cambios después de guardar

 

Eliminar un registro

Si quiere borrar registros, puede utilizar la instrucción delete. También, puede utilizar una condición para saber que registro borrar.

La sintaxis básica del comando delete es como sigue:

> DELETE FROM table_name WHERE condition;

Por ejemplo, si quiere borrar un registro cuya id tiene un valor de 1, la instrucción será como sigue:

> DELETE from Person WHERE Id=1;

Eliminar un registro

 

Importar un archivo SQL

MySQL le permite importar bases de datos de respaldo en formato SQL. Es una gran ventaja si queremos mover una base de datos a un nuevo servidor.

El primer requerimiento es crear una base de datos donde el archivo SQL será importado.

> CREATE DATABASE example2;

Luego, podemos salir de la consola utilizando el siguiente comando:

> exit;

Luego de eso, podemos comenzar a importar el archivo con el siguiente comando como usuario raíz:

$ sudo mysql -u username -p [database] < [sql_file_path]

Importar una base de datos

Note que es necesario escribir el camino completo donde el archivo SQL está ubicado. En nuestro caso, el archivo” file.sql” está ubicado en la carpeta local.

 

Exportar base de datos

Si MySQL puede importar base de datos, entonces también puede importar una base de datos a un archivo SQL.

Para hacer esto, sin estar en la consola MySQL, correremos el siguiente comando:

$ sudo mysqldump -u username -p database_to_export > file.sql

Puede revisar los resultados en la comando ls:

Exportar una base de datos

Cuando corre el comando, le será solicitada la contraseña de usuario raíz para la MySQL.

También, recuerde que este comando debe ser ejecutado por el usuario raíz del sistema o utilizar sudo. Finalmente, es posible elegir el camino del archivo de salida.

 

Base de datos de respaldo

MySQL tiene una herramienta llamada mysqldump que le permite hacer respaldos de las bases de datos en una instancia MySQL. Es una herramienta muy útil y ágil.

Hacer un respaldo es similar a exportar una base de datos como lo hemos visto anteriormente. Sin embargo, también es posible hacer un respaldo con esta herramienta de todas las bases de datos existentes.

Para ello, es suficiente con ejecutar el siguiente comando como usuario raíz o con sudo:

$ sudo mysqldump -u root -p --all-databases > alldatabases.sql

Base de datos de respaldo

 

Hacer MySQL insensible a las mayúsculas

Cuando se desarrollan aplicaciones independientes, los nombres de las tablas son usualmente un problema. Por defecto, MySQL es sensible a las mayúsculas en los nombres de las tablas.

Por lo tanto, en algunos casos, es requerido, revertir este comportamiento.

Para hacer este cambio, en algunos casos, es necesario agregar una directiva en la configuración del archivo MySQL. Primero, detenga el servicio de MySQL.

$ sudo systemctl stop mysql

Si utilizamos CentOS, el comando es el siguiente:

$ systemctl stop mysqld

Detenga el servicio MySQL en Linux

Luego de esto, editar el siguiente archivo de configuración especifica. Así que ábralo con los permisos del usuario raíz.

En Ubuntu:

$ sudo nano  /etc/mysql/mysql.conf.d/mysqld.cnf

Si utilizamos CentOS, el camino será diferente. El camino será 

/etc/my.cnf

.

Luego, bajo la sección[mysqld] agregue la siguiente directiva:

lower_case_table_names = 1

Hacer MySQL insensible a las mayúsculas

Luego guarde los cambios y cierre el archivo.

Posteriormente, necesitamos iniciar los servicios MySQL nuevamente.

$ sudo systemctl start mysql

O en CentOS:

$ systemctl start mysqld

Y esto es suficiente. Puede crear tablas con mayúsculas y minúsculas y MySQL las tratara de la misma forma.

 

¿Dónde están los registros de MySQL en Linux?

Los Log files, son registros secuenciales de todos los eventos relacionados con un programa en particular o un servicio del sistema.

Es muy importante revisarlos de vez en cuando para buscar cualquier comportamiento anormal en la ejecución del programa. También, cuando el servicio MySQL falla o no puede iniciar, el error es grabado directamente en el log.

En Ubuntu, el log MySQL es guardado en 

/var/log/mysql/error.log

.

En el caso de CentOS, el archivo está localizado en

/var/log/mysqld.log

.

Para revisar el contenido de los archivos puede utilizar el comando tail. Por ejemplo:

$ tail /var/log/mysql/error.log

Comprobación de los registros de MySQL

O, si utiliza CentOS:

$ tail /var/log/mysqld.log

Al ejecutarlo, será capaz de ver todo lo que ha pasado con el servicio.

También, puede utilizar la opción -f con el tail command para ver continuamente las ultimas actualizaciones de los registros de log.

$ tail -f /var/log/mysqld.log

 

Desinstalar MySQL

En caso de que quiera desinstalar MySQL de Linux, solo invoque el maquete de gestión de cada distribución. Por lo que no es tan complicado.

En el caso de Ubuntu, utilizamos el paquete de gestión APT. Para desinstalarlo, el siguiente comando es suficiente:

$ sudo apt remove mysql

Desinstalar MySQL de Linux

En CentOS, el maquete de gestión es YUM, por lo que, como usuario raíz, utilice el siguiente comando:

$ yum remove mysql-community-server

Desinstalar MySQL de Linux CentOS

 

Conclusión

MySQL es una base de datos relacional muy popular. Su poder y facilidad de uso como vimos la hace el motor favorito de un gran número de desarrolladores. Sin embargo, en este post, hemos cubierto algunos aspectos básicos de MySQL en Linux.

Espero que encuentre util este tutorial. Siga regresando!.

 

Mokhtar Ebrahim
Fundadora de LikeGeeks. Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *