Instalación de un SGBD

per Victor Carceler darrera modificació 2020-03-25T16:28:11+02:00

En lo que a aplicaciones web se refiere los SGBD más utilizados son los relacionales, y de entre ellos el más utilizado con diferencia es MySQL sobre todo cuando se utiliza en conjunción con PHP. Una alternativa puede ser PostgreSQL cuando se requiere soporte para PostGIS u otras características propias.

Evidentemente MySQL se encuentra disponible en el sistema de paquetes de las principales distribuciones de GNU/Linux y su instalación es trivial. Desde que Oracle adquirió a Sun (anterior de MySQL) se especula sobre la posibilidad de que el desarrollo de la misma esté en contradicción con el principal negocio de su nuevo dueño. Por esta razón, y dado que MySQL utiliza un esquema de licencia dual (GPL y licencia privativa), se ha realizado un fork llamado MariaDB que es plenamente compatible y mantiene un modelo de desarrollo libre.

Características

MySQL utiliza una arquitectura cliente/servidor en la que la comunicación se puede establecer de manera local a través de un Socket Unix o bien a través de la red utilizando el puerto TCP 3306. Incluye su propio cliente para la consola, el programa mysql, pero existen muchas aplicaciones para trabajar con el servidor. Así como bibliotecas que permiten conectar con el servidor desde prácticamente cualquier lenguaje de programación.

Una de las características básicas de MySQL es que puede utilizar diferentes motores de almacenamiento para gestionar las tablas, dos de los más utilizados son MyISAM e InnoDB (o su evolución XtraDB disponible en MariaDB). El primero no soporta transacciones ACID ni integridad referencial, su gran ventaja es la velocidad con la que se ejecutan las consultas. Como en las aplicaciones web la carga típica son consultas (es decir se lee mucho más que se inserta/borra o actualiza) se puede utilizar para ganar en rendimiento.

El motor InnoDB sí que soporta transacciones ACID, integridad referencial y un modelo MVCC con el que trabajar.

Directorios de trabajo

Tras una instalación típica de MySQL encontramos los archivos de configuración en /etc/mysql. El fichero principal es my.cnf, allí se detallan:

  • El puerto y el socket a utilizar para que conecten los clientes
  • El directorio en el que se guardarán las tablas. Por defecto: /var/lib/mysql
  • En qué direcciones de red se atenderán conexiones, o con skip-networking si las conexiones por red están deshabilitadas
  • Diferentes parámetros para controlar la cantidad de memoria asignada y hacer tuning con los motores de almacenamiento

Los ficheros de registro se encuentran en /var/log/mysql

Programa cliente mysql, crear BBDD y definir usuarios

La instalación del servidor MySQL incorpora un pequeño cliente para la consola denominado mysql. Este programa permite establecer una conexión con un servidor local, o através de la red, utilizando un usuario/contraseña para acceder a una BBDD.

La sintáxis general es:

mysql -u <usuario> -p<contraseña> -h <host> [BBDD]

Si no se especifica el host intenta conectar con un servidor local, y si se especifica la opción -p sin poner (pegada) la contraseña, la preguntará.

Una vez que se ha establecido la conexión se pueden escribir sentencias SQL terminadas con el carácter ';'.

Durante la instalación de MySQL se ha definido el usuario administrador (de MySQL) 'root' sin contraseña. Es posible utilizarlo para crear una nueva base de datos, definir un usuario con control total sobre la misma y pasar a utilizar dicho usuario de la siguiente manera.

vcarceler@sombragris:~$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 38
Server version: 5.1.41-3ubuntu12.6 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE DATABASE prueba;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON prueba.* TO prueba_user@'localhost' IDENTIFIED BY 'contraseña';
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
vcarceler@sombragris:~$ mysql -u prueba_user -pcontraseña prueba;
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 39
Server version: 5.1.41-3ubuntu12.6 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

Lo normal es utilizar una BBDD con su propio usuario/contraseña para cada aplicación y dejar a root únicamente para la administración de MySQL. En este ejemplo se ha concedido al usuario prueba_user todos los privilegios sobre cualquier tabla de la base de datos prueba, pero es posible utilizar una granularidad mucho más fina mediante las cuentas de usuario de MySQL y el sistema de privilegios.

Copias de seguridad

Cuando se desea preservar la información que hay en una BBDD para realizar una copia de seguridad, o llevarla a otro SGBD, lo habitual es exportar toda la información en formato SQL.

El programa mysqldump permite exportar una base de datos, o varias, a un fichero SQL con todas las sentencias necesarias para recrearla en otro SGBD. También permite exportar los datos a un fichero CSV, XML u otros formatos.

El programa cuenta con muchas opciones, pero un volcado típico se podría realizar así:

mysqldump --opt -u <usuario> -p<contraseña> [BBDD] >fichero.sql

El fichero exportado se podría cargar en otro servidor MySQL de la siguiente forma:

mysql -u <usuario> -p<contraseña> [BBDD] <fichero.sql

Cuando se utilizan tablas MyISAM se puede utilizar la herramienta mysqlhotcopy para realizar copias de seguridad con mayor velocidad. Pero fuera de este caso no es una buena idea copia los archivos de la base de datos como método de backup.

MySQL Workbench

MySQL Workbench es una herramienta gráfica que permite modelar y administrar bases de datos. Una vez instalada es posible definir tablas y relaciones para que la herramienta genere el código SQL necesario para implementar el esquema en MySQL.

También puede conectarse con una BBDD que ya esté en funcionamiento en MySQL para representarla gráficamente, o actuar como cliente para enviar consultas al servidor.

amdb.png

Optimización y monitorizado de MySQL

Optimizar el uso de un SGBD es una tarea específica no trivial, algunos consejos básicos son:

  • Uso de conexiones persistentes y si es necesario un pool de conexiones.
  • Optimización a nivel de sistema de ficheros, opción noatime, y configuración de discos. Si se reparten los datos en varios discos se puede ganar en velocidad de lectura, RAID 0+1 es la opción más rápida.

Para monitorizar la carga de un servidor MySQL es posible utilizar el comando mtop.

Enlaces: