Contenidos
Introducción a MySQL
Desde sus orígenes la computación ha servido procesar, calcular y ordenar datos que tanto antes como después de trabajar con ellos se tienen almacenar de alguna forma.
Esto trajo aparejado un problema enorme de cómo almacenarl de forma estructurada, ordenada, segura y confiable grandes volúmenes de datos.
Así fue como surgieron las bases de datos a principios de los 60s con el fin de facilitar el manejo de los datos.
Una base de datos no es más que un agrupamiento de datos relacionados y almacenados de una forma ordenada y estructurada.
Las primeras soluciones fueron simples archivos de texto sin embargo esto es ineficientes con volúmenes muy grandes de datos por ser lentos de manejar, tanto por la cantidad de datos como por limitaciones físicas de hardware, además fácilmente corruptibles y no garantizan la integridad de los datos.
Una evolución son las base de datos relacionales que le proporcionan una forma predefinida de cómo almacenar los datos organizados en tablas mediante filas y columnas, además preservando al relaciones entre las tablas para garantizar la integridad de los datos.
Estos sistemas se denominan Sistema de gestión de bases de datos relacionales (RDBMS) y son los que se encargan de manejar la estructura de la base de datos, la integridad de los datos almacenados, de controlar el acceso a los mismos y proporciona la capacidad de ejecutar operaciones sobre la base de datos habitualmente a través de Structured Query Language (SQL). Además controla que el resultado siga las reglas ACID es decir que sean atómicas, coherentes, aisladas y duraderas.
En el mercado existen muchos tipos de base de datos relacional algunos gratuitos, algunos de pago, algunos destinados a ciertos nichos de mercado o tipo de aplicaciones.
Sin embargo la base de datos que se ha mantenido en la cima los último veinte años es sin duda MySQL, un sistema que no solo es gratuito sino que es de los más sencillos de instalar y mantener, por esa razón se ha transformado en la favorita de los desarrolladores.
Historia de MySQL
Fue creado por en 1995 en Suecia por una empresa llamada MySQL AB y sus principales desarrolladores fueron Michael Widenius, David Axmark y Allan Larsson que buscaban desarrollar una solución tan eficiente y sencilla como económica para usuarios domésticos y profesionales frente a complicados y/o costos soluciones existentes.
Si bien MySQL se lo conoce como la base de datos open source de mayor trayectoria no siempre fue open source, recién en el año 2000 fue publicado como software libre bajo licencia GPL, antes de eso el código era cerrado, en un principio esto representó una apuesta arriesgada y obtuvo pérdida de ingresos aunque con el tiempo recuperó y la condición de código abierto de MySQL hizo que terceros colaboren con el proyecto.
La compañía continuó en un amplio crecimiento tanto de usuarios com de ingresos hasta que en 2008 fue vendida a Sun Microsystems en mil millones de dólares para un año más tarde ser comprada (Sun) por parte de Oracle y donde el proyecto de MySQL quedó un poco la la deriva debido a disputas y litigios legales que demoraron un par de años en resolverse.
Por otro lado Oracle ya tenía su propio motor de base de datos por lo que la continuidad de MySQL interesó poco a la compañía, antes desacuerdos e incertidumbre sobre el futuro del proyecto hizo que parte de los desarrolladores iniciales dejaran Sun y crearán un Fork llamado MariaDB que ganó adeptos rápidamente en la comunidad del software libre.
Durante varios años el proyecto MySQL quedó semiabandonado y sin rumbo mientras que MariaDB continuó evolucionando, recién en los últimos años MySQL retomo el ritmo, si bien tanto MySQL como MariaDB parten mismo código una de las grandes desventajas de MySQL frente a MariaDB son las restricciones impuestas por Oracle en la versión Community que reserva ciertas funciones para su versión Enterprise, mientras que MariaDB quita estas restricciones aunque su rendimiento ha sido cuestionado.
Características
Veamos ahora cuáles son las características de MySQL.
Compatibilidad con SQL
Es el lenguaje más utilizado para obtener, insertar, actualizar y eliminar datos de una base de datos relacional, si bien cada motor de base de datos adopta una sintaxis de SQL ligeramente diferente al resto suele ser bastante familiar asi que adaptarse al SQL estándar de MySQL es sumamente sencillo.
Vistas
Las vistas son tablas virtuales creadas a partir de una consulta utilizando datos de otras tablas, los datos no existen físicamente en esa tabla sino en las originales y los cambios efectuados en ella se refleja en la vista, es una característica importante de las base de datos que tienen que gestionar grandes cantidades de datos y es algo que se le criticaba a MySQL sin embargo desde la versión 5 ya es capaz de soportar dicha característica.
Procedimientos almacenados
Permite agregar funciones directamente en la base de datos para ser utilizados en lugar de manipular los datos directamente en las tablas, tienen la ventaja de mejorar el rendimiento por ejecutar ese código compilado y disponiendo de un cache.
Es especialmente útil por ejemplo en los casos hay que iterar los resultados realizando alguna tarea, en lugar de hacerlo directamente desde el cliente se ejecuta directamente en el servidor ahorrando transferir los datos e integrarlos del lado del cliente, aprovechando cache y recursos del servidor.
Disparadores (o trigger)
Permite automatizar algunas tareas dentro de la base de datos, por ejemplo que se ejecute cierta acción antes o después que ocurra un evento sobre una tabla determinada, existen tres eventos que pueden disparar un trigger, estos son una operación de inserción (INSERT), de borrado (DELETE) o actualización (UPDATE).
Transacciones
Las transacción son una colección de operaciones varias que pueden ser de diferente tipo (INSERT, UPDATE, DELETE entre otras) y que solo modifican la base de datos si todas ellas son correctas, en caso de fallar una o de no llegar al final en la base de datos no se producen cambios, permite mantener la integridad de la base de datos ante fallos de software, de hardware, agotamiento de recursos, fallo eléctrico, caída del servidor y cualquier interrupción de las operaciones.
Ventajas y desventajas de MySQL
Gratuito
La principal ventaja es que es gratuito, si bien gran parte del código es propiedad exclusiva de Oracle la versión básica se distribuye bajo la Licencia pública general de GNU y permite que cualquier persona lo utilice, solo se debe pagar una licencia cuando se intenta incorporar a otro producto privativo o cuando se desea recibir soporte y tener acceso a las herramientas adicionales tales como herramientas de monitorización.
Fácil de instalar
Es una base de datos muy sencilla de instalar, no se requieren grandes conocimientos técnicos ya que requiere muy poca configuración para funcionar y está disponible para una gran cantidad de sistemas operativos, es la base de datos más común en la web y soportada casi la totalidad de los hosting.
Popular entre los desarrolladores
Gracias a su popularidad para proyecto en la web aplicaciones de pequeña y mediana extensión es muy fácil encontrar desarrolladores familiarizados con MySQL ademas existen librerías para poder utilizarlo en casi todos los lenguajes de programación modernos como puede ser PHP, Python, Ruby, JavaScript (Node), C/C++,Java,Go, ASP, la familia .Net entre muchísimos otros.
Rápido con pocos datos
Es un motor de base de datos liviano, requiere menos recursos de hardware que otras base de datos, sin embargo no es tan eficiente con grandes volúmenes de datos, si bien se puede optimizar muchísimo su configuración para mejorar el rendimiento cuando una tabla tiene varios millones de datos las consultas pueden demorar bastante tiempo y en proyectos con muchos trafico puede ser un problema.
Requerimientos
Hablar de requerimientos es difícil, si bien existe una lista de requerimientos mínimos y recomendados lo cierto es que con menos recursos puede funcionar igual, de hecho la gran mayor de los servicios Cloud VPS tienen menos recursos de mínimo recomendado y MySQL funciona igual, todo depende del uso que le demos.
Características mínimas
- CPU con 2 núcleos
- 2 GB RAM
- Sub-sistema de E / S de disco aplicable a una base de datos de escritura intensiva
Características recomendados
- CPU con 4 núcleos
- 8 GB RAM o más
- Arreglo de discos en RAID 10 o RAID 0+1
Sistema Operativo
- Linux/Unix
- Microsoft Windows
- MacOS
Instalación de MySQL Server en CentOS/RHEL
Desde hace algún tiempo MySQL fue reemplazado por MariaDB en los repositorios de CentOS, igualmente aun así podemos agregar el repositorio oficial de MySQL de la siguiente manera, primero descargamos el instalador para CentOS/RHEL:
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
Procedemos a instalarlo:
rpm -ivh mysql-community-release-el7-5.noarch.rpm
Se actualiza el sistema:
yum update
Por último instalamos el servidor MySQL:
yum install mysql-server
Instalación de MySQL Server en Ubuntu/Debian
En el caso de Ubuntu, MySQL aún se encuentra en los repositorios sin embargo en Debian fue sustituido por MariaDB por lo que para instalar MySQL demos primero agregar los repositorios:
Debian
Primero actualizamos los repositorios:
apt-get update
Nos aseguramos que los siguientes paquetes se encuentren instalados ya que son dependencias necesarias:
apt-get -y install gnupg wget lsb-release
Descargamos e instalamos el siguiente instalador de Debian:
wget http://repo.mysql.com/mysql-apt-config_0.8.13-1_all.deb dpkg -i mysql-apt-config_0.8.13-1_all.deb
En el menú podemos entre las versiones mysql-8.0 (por defecto) o mysql-5.7, una vez que se seleccionaron las opciones que se quiera se confirma con 4
root@7c1aec40220a:/# dpkg -i mysql-apt-config_0.8.13-1_all.deb Selecting previously unselected package mysql-apt-config. (Reading database ... 8257 files and directories currently installed.) Preparing to unpack mysql-apt-config_0.8.13-1_all.deb ... Unpacking mysql-apt-config (0.8.13-1) ... Setting up mysql-apt-config (0.8.13-1) ... debconf: unable to initialize frontend: Dialog debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.28.1 /usr/local/share/perl/5.28.1 /usr/lib/x86_64-linux-gnu/perl5/5.28 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.28 /usr/share/perl/5.28 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.) debconf: falling back to frontend: Teletype Configuring mysql-apt-config ---------------------------- MySQL APT Repo features MySQL Server along with a variety of MySQL components. You may select the appropriate product to choose the version that you wish to receive. Once you are satisfied with the configuration then select last option 'Ok' to save the configuration, then run 'apt-get update' to load package list. Advanced users can always change the configurations later, depending on their own needs. 1. MySQL Server & Cluster (Currently selected: mysql-8.0) 2. MySQL Tools & Connectors (Currently selected: Enabled) 3. MySQL Preview Packages (Currently selected: Disabled) 4. Ok Which MySQL product do you wish to configure? 4 Warning: apt-key should not be used in scripts (called from postinst maintainerscript of the package mysql-apt-config) OK
Ubuntu y Debian
Una vez ya agregado en Debian el repositorio la parte final es igual para ambos sistemas
apt-get update
apt-get install mysql-server mysql-client
En el caso de Debian el instalador solicitará que se asigne una contraseña al usuario root de la base de datos, y si se esta instalando la version 8.0 consultara el método de authentication donde se puede seleccionar el nuevo método con Use Strong Password Encryption o el antiguo con Use Legacy Authentication Method
Configuring mysql-community-server ---------------------------------- Please provide a strong password that will be set for the root account of your MySQL database. Leave it blank to enable password less login using UNIX socket based authentication. Enter root password: MySQL 8 uses a new authentication based on improved SHA256-based password methods. It is recommended that all new MySQL Server installations use this method going forward. This new authentication plugin requires new versions of connectors and clients, with support for this new authentication method (caching_sha2_password). Currently MySQL 8 Connectors and community drivers built with libmysqlclient21 support this new method. Clients built with older versions of libmysqlclient may not be able to connect to the new server. To retain compatibility with older client software, the default authentication plugin can be set to the legacy value (mysql_native_password) This should only be done if required third-party software has not been updated to work with the new authentication method. The change will be written to the file /etc/mysql/mysql.conf.d/default-auth-override.cnf After installation, the default can be changed by setting the default_authentication_plugin server setting. 1. Use Strong Password Encryption (RECOMMENDED) 2. Use Legacy Authentication Method (Retain MySQL 5.x Compatibility) Select default authentication plugin 1 update-alternatives: using /etc/mysql/mysql.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode Setting up mysql-server (8.0.19-1debian10) ... Processing triggers for libc-bin (2.28-10) ...
Luego podemos personalizar la configuración que creamos necesaria desde los respectivos archivos de configuración.
Instalación de MySQL en Windows Server
Para instalarlo en Microsoft Windows primero debemos asegurarnos de cumplir con varios de sus requerimientos, entre ellos tener instalado Microsoft Visual C++ 2019 Redistributable Package y luego podemos descargar el instalador de MySQL desde aquí , una vez descargado el zip lo descomprimimos y ejecutamos el archivo: mysql-installer-community-X.XX.XX
La instalación es la típica de cualquier aplicación windows y casi todas podemos pasar sin necesidad de configurar nada salvo la siguiente, donde debemos elegir el tipo de instalación, en nuestro caso solo seleccionamos Server only:
A partir de allí el resto de las pantallas es Next,Next y Next hasta llegar al momento que solicite la contraseña, colocamos una contraseña para usuario root y luego Next
El resto de las pantallas dara la opcion de modificar otros parámetros aunque los que están seleccionados por defecto son adecuados, igualmente luego podremos ajustarlos si hace falta.
Conclusión
Más allá de los vaivenes que ha sufrido el proyecto MySQL a lo largo de los años es uno de los motores de base de datos más populares.
Si bien no es perfecto sobre todo en sistemas con una alta concurrencia es de los motores más sencillos con los que trabajar, está disponible para una gran cantidad de plataformas, y al ser open-source es más económico que otras soluciones similares.
Esto último es lo que ha hecho se transformara en el motor de base de datos por defecto en la web y el gran favorito de millones de programadores alrededor del mundo.