MariaDB o MySQL: ¡He ahí el dilema! Según Venenux.

Imagen destacada universal del proyecto Tic Tac

MySQL fue comprado por Oracle y desde ese momento, durante la versión 8 (Jessie) coexistió en Debian con MariaDB, pero hoy en Debian GNU/Linux 10 solo esta MariaDB, para usar MySQL se requiere repositorios extras para Debian GNU/Linux 7, 8, 9, y 10.

Un movimiento similar sucedió con OpenOffice, pero Oracle no pudo prepararse, la comunidad actuó tan rápido, bifurcando el código en LibreOffice que la compañía no sabia que hacer con OpenOffice, este termino olvidado, y el código, sobre el que tanto control tuvo, termino cedido, es decir, no controlaron nada.

Pero, con MySQL estos no se tomaron desprevenidos, y una vez adquirido, empezaron a tomar medidas, con la lección aprendida, cuando vieron que se bifurcó el código a MariaDB empezaron tomar seriamente el desarrollo, esto se nota en la rápida vía que tomaron aumentando de la versión 5.5 a 5.6 y 5.7, y así de forma más agresiva últimamente, cuando saltan de la versión 5.7 a la 8.0.

Pero, también los tomaron por sorpresa, la comunidad Linux, ahora en todas las distribuciones importantes solo proveen MariaDB, y ahora Oracle noto esto y fuertemente usa otros productos para atraer y desviar a MariaDB:

  1. MySQL-Workbench salta repentinamente de 6.3 a 8.0, haciéndose incompatible con MariaDB.
  2. La suite privativa TOAD es ahora compatible con MySQL, pero no con MariaDB.

MySQL vs MariaDB

Es un tema más de compatibilidad que de performance y características. Y depende más de si hay un enfoque puramente empresarial y de soporte “Cero preocupación”:

MySQL al ser de Oracle, establece limitantes si no se compra una licencia, MariaDB tiene un grupo de conexiones grande, más de 200.000 conexiones, mientras que MySQL tiene un grupo de conexiones más pequeño si no es licenciado.

Sin embargo, MariaDB no soporta el enmascaramiento de datos y la columna dinámica mientras que MySQL lo soporta, ademas MariaDB aunque tiene 12 nuevos motores de almacenamiento contra MySQL que tiene menos, estos son muy nuevos y los de MySQL son ampliamente conocidos y probados.

En términos de performance, MariaDB es solo un poco más rápido, que MySQL, esto debido a que MySQL implementa características más empresariales, pero esto solo se nota empleando estas muchas características.

¿Por qué MySQL y no MariaDB? Bueno, con la llegada de MySQL 8 se introdujeron restricciones y verificaciones del tipo de servicio, si no es explícitamente “MySQL” la conexión establece incompatibilidad del protocolo.

¿Entonces debemos usar MariaDB únicamente, será algo seguro? Las instalaciones de MariaDB no permiten conexiones remotas, solo desde la misma Maquina Localhost, para administrarlas gráficamente se puede emplear Adminer. Herramientas avanzadas como las de Oracle no existen para MariaDB, es decir, que sean tan estables o elaboradas.

¿Entonces cual es más óptima? Esto no es claro, por lo general, MySQL debería ser menos, y MariaDB debería ser más rápida, sin embargo, hay una tercera opción, que es Percona, que es el mismo servicio MySQL pero con parches de optimización agresivos especiales para servidores.

¿Qué es MySQL Workbench?

Es la única herramienta en el ámbito de MS-SQL Server Center o Sybase Center, que tiene entre sus ventajas, la edición en caliente de una consulta, vista espacial de tablas, administración gráfica, ingeniería inversa y reversa de las estructuras de base de datos, incluso, en el ámbito del Software Libre y Código Abierto, es la única herramienta que hace todas estas cosas que hacen las privativas.

Lo que la convierte, en una herramienta extremadamente útil para trabajos en bases de datos gigantes, como lo hacen en .NET o en DB2. Los de Oracle encontraran esto, como un equivalente de la suite privativa TOAD. En la tercera parte, se muestran imágenes y como hacer para poder usarlo sin conflictos.

Tabla comparativa

Características entre MariaDB y MySQL

MariaDB

Surgió como repuesta desafiante a la actitud de Oracle al comprar y controlar el MySQL, más un largo conjunto de razones de la comunidad. El juguete de los novatos, desde entonces, fue la base del código de la MySQL 5.1, con la que liberaron a MariaDB 5.3, que es en realidad casi igual al MySQL 5.5. Por ende, desde la versión MariaDB 5.5 que es casi igual al MySQL 5.6, su esquema de versiones comienza en 10, que es en realidad, el protocolo de MySQL.

De esto ultimo, es que se comenzó el problema actual de sus diferencias, ante MariaDB, que solo tomaba lo mejor de MySQL y lo reimplementaba con mejoras, casi siempre a la par de la parte de desarrollo, dando una ilusión de estar muy adelante, cuando en realidad estaban era con la versión inestable de MySQL, ya que, solo sincronizaban las versiones no estables para poder estar adelantados.

Instalar y usar MariaDB en Debian GNU/Linux

MariaDB no esta para Debian GNU/Linux Wheezy, por lo que la mejor opción es seguir y usar MySQL como se indica en la siguiente sección.

apt-get remove --purge --force-yes mysql*

apt-get update

apt-get -y --force-yes install mariadb-server mariadb-client mysql-common

Verificación de alguna instalación previa: por ejemplo una actualización, si no se definió clave de root pulsar “Enter” sino no ingresar el “password”:

mysql_upgrade -u root -p

Esto realizara ajustes a las tablas internas únicamente si usted, tenia previamente el MySQL o si está actualizando el MariaDB a una versión más nueva.

En la siguiente se realiza la configuración de MariaDB lo más cercano posible de un entorno de producción con alta nivel de seguridad, esto sirve tanto para sistemas con Debian GNU/Linux y Systemd, asi como Devuan y Sysvinit:

ski1="";ski1=$(grep skip-name-re /etc/mysql/mariadb.conf.d/50-server.cnf);[[ $ski1 != '' ]] && echo listo || sed -i -e 's|.*skip-external-locking.*|skip-external-locking\nskip-name-resolve|g' /etc/mysql/mariadb.conf.d/50-server.cnf
ski2="";ski2=$(grep local-infile /etc/mysql/mariadb.conf.d/50-server.cnf);[[ $ski2 != '' ]] && echo listo || sed -i -e 's|skip-name-resolve|skip-name-resolve\nlocal-infile=0|g' /etc/mysql/mariadb.conf.d/50-server.cnf
ski3="";ski3=$(grep symbolic-lin /etc/mysql/mariadb.conf.d/50-server.cnf);[[ $ski2 != '' ]] && echo listo || sed -i -e 's|skip-name-resolve|skip-name-resolve\nsymbolic-links=0|g' /etc/mysql/mariadb.conf.d/50-server.cnf
sed -i 's/bind-address.*=.*/bind-address=127.0.0.1/g' /etc/mysql/mariadb.conf.d/50-server.cnf

cat > /etc/security/limits.d/50-mysql.conf << EOF
mysql soft nofile 65535
mysql hard nofile 65535
EOF

mkdir -p /etc/systemd/system/mariadb.service.d/
cat > /etc/systemd/system/mariadb.service.d/limits.conf << EOF
[Service]
LimitNOFILE=infinity
EOF

systemctl daemon-reload
/sbin/service mariadb restart

Autenticación por socket y usar siempre claves

Si desea tener un MariaDB que siempre use conexiones TCP/IP y no socket, se debe forzar el escribir una clave de acceso, dado que hoy en día el MariaDB en Debian GNU/Linux, si el usuario real existe en la BD se conectara solo en la consola, y solo si, este esta logueado. A esto se le llama conexión por socket, y con lo siguiente se puede usar la antigua forma simplemente usando claves:

mysql -u root -e "update mysql.user set plugin 
'mysql_native_password' where user='root';flush privileges;"

MySQL

Es el pilar de todo desarrollo web de código libre o proyectos genéricos, esto porque era simple y sin atomicidad, se usaba mucho, ya que funcionaba rápidamente. Poco a poco, los elementos de los que carecía MySQL se incorporaron, por parte de desarrolladores de Software Libre haciéndolo más complejo y menos rápido.

El tema es, si no se ajusta al GPL y requiere introducir código MySQL en aplicaciones comerciales, está el tema de una versión comercial licenciada.

Esta herramienta de software fue desarrollado por “MySQL AB” como proyecto de empresa, pero con código liberado y abierto, fue adquirida por Sun Microsystems en 2008, y esta después por Oracle en 2010, pero el motor InnoDB ya estaba controlado por Oracle, que compro la empresa Innobase y la que lo desarrollo. Este control permite a Oracle dictaminar el desarrollo de MySQL, y esa la razón de las disputas de hoy y este articulo.

Instalar y usar MySQL Debian

MySQL desde Debian 6 (Squeeze) provee este paquete desde sus repositorios, con excepción de MySQL 8 que solo esta para Debian 9 (stretch) en adelante, mientras que para Devuan debe sustituir el comando lsb_release por el “codename” directo, es decir Jessie para Devuan 1 y Stretch para Devuan 2 y así sucesivamente.

Primero agregamos el repositorio, habilitando según la disponibilidad, esto permitirá tener la versión 5.6, 5.7 y 8.0 todas a la vez, pero el comando instalara la más actual según el Debian GNU/Linux instalado (Squeeze, Jessie, Wheeze, y demás superiores).

cat > /etc/apt/sources.list.d/51-mysql.list << EOF
deb http://repo.mysql.com/apt/debian/ $(lsb_release -s -c)  mysql-apt-config
deb http://repo.mysql.com/apt/debian/ $(lsb_release -s -c)  mysql-5.7
deb http://repo.mysql.com/apt/debian/ $(lsb_release -s -c)  mysql-tools
deb-src http://repo.mysql.com/apt/debian/ $(lsb_release -s -c)  mysql-5.7
EOF

apt-get remove --purge --force-all mariadb* mysql*

apt-get update

apt-get -y --force-yes install mysql-server mysql-client mysql-common mysql-community-server

Verificación de alguna instalación previa: por ejemplo, una actualización, si no se definió clave de root pulsar “Enter” sino no ingresar el “password”.

mysql_upgrade -u root -p

Esto realizara ajustes a las tablas internas únicamente si usted, tenia previamente el MySQL o si está actualizando el MySQL a una versión más nueva.

En la siguiente, se realiza la configuración de MySQL lo más cercano posible de un entorno de producción con alta nivel de seguridad, esto sirve tanto para sistemas con Debian GNU/Linux y Systemd, así como Devuan y Sysvinit:

ski0="";ski0=$(grep skip-name-re /etc/mysql/mysql.conf.d/mysqld.cnf);[[ $ski0 != '' ]] && echo listo || sed -i -e 's|.*bind-address.*=.*|bind-address\t= 127.0.0.1\nskip-external-locking|g' /etc/mysql/mysql.conf.d/mysqld.cnf
ski1="";ski1=$(grep skip-name-re /etc/mysql/mysql.conf.d/mysqld.cnf);[[ $ski1 != '' ]] && echo listo || sed -i -e 's|skip-external-locking|skip-external-locking\nskip-name-resolve|g' /etc/mysql/mysql.conf.d/mysqld.cnf
ski2="";ski2=$(grep local-infile /etc/mysql/mysql.conf.d/mysqld.cnf);[[ $ski2 != '' ]] && echo listo || sed -i -e 's|skip-name-resolve|skip-name-resolve\nlocal-infile=0|g' /etc/mysql/mysql.conf.d/mysqld.cnf
ski3="";ski3=$(grep symbolic-lin /etc/mysql/mysql.conf.d/mysqld.cnf);[[ $ski3 != '' ]] && echo listo || sed -i -e 's|local-infile=0|local-infile=0\nsymbolic-links=0|g' /etc/mysql/mysql.conf.d/mysqld.cnf
sed -i 's/bind-address.*=.*/bind-address=127.0.0.1/g' /etc/mysql/mysql.conf.d/mysqld.cnf

cat > /etc/security/limits.d/50-mysql.conf << EOF
mysql soft nofile 65535
mysql hard nofile 65535
EOF

mkdir -p /etc/systemd/system/mysql.service.d/
cat > /etc/systemd/system/mysql.service.d/limits.conf << EOF
[Service]
LimitNOFILE=infinity
EOF

systemctl daemon-reload
/sbin/service mysql restart

El siguiente script se ejecuta siempre en un entorno de producción:

mysql_secure_installation

Y estas son las preguntas a contestar:

  • enter password for root: <– vacio si es nueva, su clave si estaba antes
  • Would you like to setup VALIDATE PASSWORD plugin? [y/n] <– n
  • Change the root password? [Y/n] <– y
  • New password: <– Enter a new MariaDB root password
  • Re-enter new password: <– Repeat the MariaDB root password
  • Remove anonymous users? [Y/n] <– y
  • Disallow root login remotely? [Y/n] <– y
  • Remove test database and access to it? [Y/n] <– y
  • Reload privilege tables now? [Y/n] <– y

Mysql use only password:

mysql -u root -e "update mysql.user set plugin = 'mysql_native_password' where user='root';flush privileges;"

Notas sobre MariaDB versus MySQL

Debido a las migraciones sucedidas y la mayor cantidad de “Engines” en MariaDB en comparación con MySQL, es bueno optimizar el modo SQL (sql-mode) en el archivo de configuración de my.cnf o 50-server.cnf o mysqld.cnf.

sql-mode="NO_ENGINE_SUBSTITUTION"

MySQL-Workbench

Este es el paquete estrella para trabajar con MySQL, y es lo más recomendado desde su computador para el desarrollo con MySQL e inclusive para otras BD. Simplemente se debe crear un esquema sin usar cosas especificas, así MySQL permitirá que el script generado en “Ingeniería forward” pueda usarse en otros.

Además, integra desarrollo de software, administración de bases de datos, diseño de bases de datos, gestión y mantenimiento para el sistema de base de datos MySQL. Es el sucesor de DBDesigner 4 de fabFORCE.net, y reemplaza el anterior conjunto de software, MySQL GUI Tools. Es la única herramienta software de código abierto que es un IDE especializado en SQL en su totalidad.

La controversia de Oracle en MySQL y Workbench

Evidentemente sabemos que MySQL es controlada por Oracle, y por ende también el MySQL-Workbench, y aquí el detalle.

La situación actual

Desde que salio MariaDB las Distros GNU/Linux no usan MySQL, y como GNU/Linux es el único sistema usado en servidores, MySQL ya no es usado. Esto ya sucedió antes con el software OpenOffice y se repitió con MySQL.

La posibilidad de una jugarreta: Aunque Windows es el sistema más usado en el mundo, no es el más empleado en los servidores, ni de por cerca, por ende, en los desarrollos tampoco, pero si en los pequeños inicios de los novatos usuarios de Windows, lo que hace que el MySQL-Workbench sea muy usado.

Lo que sucedió

Esto significa que Oracle puede forzar el uso de su sistema de BD, a través de la dependencia por otros sistemas, y MySQL-Workbench es uno de los más usados, al forzar el uso de MySQL desde este fuerzan el dejar de usar MariaDB en los servidores.

¿Desde cuándo es esto?

Desde que salio la MySQL 8, nótese que no existe paquete de MySQL-Workbench en los Debian GNU/Linux recientes, esto es porque acaba de presentar una incompatibilidad con la conexión. Las versiones viejas de MySQL-Workbench no compilan en los Debian GNU/Linux nuevos, y las versiones nuevas de MySQL-Workbench no conectan con ninguna MariaDB.

¿Qué sucede con MySQL-Workbench y MariaDB?

Oracle, dado lo explicado anteriormente, salto repentinamente de versión, y paso de MySQL-Workbench 6.2 a MySQL-Workbench 8.0. Con este cambio repentino, vino un cambio fuerte, que se manifiesta en que, si se intenta conectar con una base de datos MariaDB simplemente no conecta porque los protocolos son incompatibles.

El bug del reporte es https://bugs.mysql.com/bug.php?id=98742 donde se menciona y aprecia el error Wrong or unknown protocol, siempre que se intenta conectar usando el MySQL-Workbench, pero las tablas en la sección siguiente indican cuales sirve, y desde donde se puede instalar.

En los foros ya hay temas relacionados, como en https://forums.mysql.com/read.php?152,683935,683935 donde las respuestas de los desarrolladores suelen ser: “incompatibilidad de protocolo”.

Sin embargo, esto de “incompatibilidad de protocolo” es solo una manera política de decir “No te dejare conectar MariaDB, y tú usuario si lo quieres, usa MySQL”.

Debian GNU/Linux introdujo MySQL-Workbench 8.0 pero planificada para Debian GNU/Linux 12, es decir, que no se llegara a probar correctamente con el MariaDB por la mayoría de usuarios.

Matrix de compatibilidad y soluciones de instalación

Por entonces tenemos lo siguiente:

Esto significa que no es tan simple, según el Debian GNU/Linux no se puede usar cualquier versión de MySQL-Workbench. Esto es, porque el mismo, solo compila contra versiones especificas de sus dependencias, en la siguiente tabla se especifica basado en el anterior, como se realiza para poder usar entonces una BD estilo MySQL y el MySQL-Workbench según la versión de Debian/Devuan:

En las secciones de MariaDB y MySQL de este documento, se indica como instalar las respectivas base de datos, en lo siguiente se repetirán pero tomando en cuenta MySQL-Workbench:

1 – Para Debian GNU/Linux Wheeze, Jessie y Stretch

Es fácil, el MySQL o MariaDB así como el MySQL-Workbench que ya está en Debian GNU/Linux, le funciona bien, solo instalar normalmente y listo, este es porque aunque unos tienen MariaDB y otros MySQL, hay un paquete común que permite instalar todo no importa que tenga, este es el mysql-server a secas, así con una sola linea de comando se instala todo y se empieza usar:

cat > /etc/apt/sources.list.d/debianbackports.list << EOF
deb http://ftp.de.debian.org/debian/ $(lsb_release -s -c)-backports main contrib non-free
EOF

apt-get update

apt-get install mysql-server mysql-workbench mysql-utilities python-pyodbc unixodbc ttf-bitstream-vera

Como nota adicional, en las versiones de Debian GNU/Linux 7 (Wheezy), y Debian 8 (Jessie), si se instala MySQL y no MariaDB, se pedirá la clave de root, mientras que en la versión de Debian GNU/Linux 9 (Stretch) no se usa clave de root de MySQL, sino que, el usuario root ya tiene un equivalente en la BD, entonces cada usuario del sistema debe existir en la base de datos, en las secciones especificas de este articulo se especificó esto y se trató como manejarlo.

2 – Para Debian GNU/Linux Buster y Bullseye

Desde MySQL 5.6, se comenzó a fabricar paquetes desde Oracle MySQL, y desde MySQL-Workbench 6 se comenzó fabricar de otros productos, agregando el repo, se puede usar e instalar pero implica también solo usar MySQL desde Oracle, por ende desinstalara todo, agregara un repo externo y quitara MariaDB así:

cat > /etc/apt/sources.list.d/51-mysql.list << EOF
deb http://repo.mysql.com/apt/debian/ $(lsb_release -s -c)  mysql-apt-config
deb http://repo.mysql.com/apt/debian/ $(lsb_release -s -c)  mysql-8.0
deb http://repo.mysql.com/apt/debian/ $(lsb_release -s -c)  mysql-tools
deb-src http://repo.mysql.com/apt/debian/ $(lsb_release -s -c)  mysql-8.0
EOF

apt-get update

apt-get remove --purge --force-all mysql* mariadb*

apt-get install mysql-server-community mysql-utilities python-pyodbc unixodbc ttf-bitstream-vera

apt-get install libpcrecpp* libpng* libsecret* libtinfo* libgtkmm* linglibmm* libzip* libatkmm*

Después, hay que descargar el paquete especifico para MySQL-Workbench 8 desde la web:

wget https://cdn.mysql.com//Downloads/MySQLGUITools/mysql-workbench-community_8.0.19-1ubuntu18.04_amd64.deb

Este es el que sirve para Debian GNU/Linux 10 (Buster), para Debian GNU/Linux 11 (Bullseye) hay que usar:

wget https://cdn.mysql.com//Downloads/MySQLGUITools/mysql-workbench-community_8.0.19-1ubuntu19.10_amd64.deb

Después que descargue (previamente instalado MySQL 8.0) se procede instalar ejecutando el comando dpkg, pero desde el directorio donde descargo, así:

dpkg -i mysql-workbench-community_8.0.19-1*_*.deb

El cual solo instalará si tiene Debian GNU/Linux instalado en 64 bits, con esto, tiene un MySQL-Workbench para Debian GNU/Linux 10 (Buster) o/y 11 (Bullseye) funcional.

¿Cómo recuperar la clave de MySQL o MariaDB?

Para Debian GNU/Linux 8 y versiones más viejas, y Devuan GNU/Linux en todas sus versiones, se debe realizar lo siguiente:

/sbin/service mysql stop

mysqld_safe --skip-grant-tables --skip-networking&

mysql -u root -e "UPDATE user SET password=PASSWORD('root.1') WHERE user='root';FLUSH PRIVILEGES;" mysql

/sbin/service mysql stop

/sbin/service mysql start

Para Debian GNU/Linux 10 en adelante:

systemctl stop mysql
systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
systemctl start mysql

mysql -u root -e "UPDATE mysql.user SET authentication_string = PASSWORD('blank') WHERE User = 'root' AND Host = 'localhost';FLUSH PRIVILEGES;"

quit

systemctl stop mysql
systemctl unset-environment MYSQLD_OPTS
systemctl start mysql
Banner oficial 2 del Proyecto Tic Tac - 2020

Nota: Este artículo es una copia fiel, pero mejorada en cuanto a redacción, del realizado en el siguiente enlace: venenux.github.io. Otro artículo, sobre el tema, pero en inglés, es el siguiente enlace.

Icono oficial 2020 Blog del Proyecto Oficial

Si te ha gustado el artículo, no dejes de comentarlo o compartirlo con otros en tus canales, grupos o comunidades favoritas de redes socialesAdemás de unirte a nuestro Grupo ( https://t.me/grupo_telegram_proyectotictac ) y Canal ( https://t.me/canal_telegram_proyectotictac ) de Telegram. Y recuerden que ya tenemos activada la cuenta en Mastodon ( https://mastodon.social/@proyectotictac ): proyectotictac@mastodon.social, la cuenta de correo en Disroot ( https://mail.disroot.org ): albertccs1976@disroot.org ) y la cuenta de OpenTube ( https://open.tube/accounts/proyecto_tic_tac/ ) del Blog y Medio informativo TI internacional del Proyecto Tic Tac ( https://proyectotictac.com/ y https://proyectotictac.org.ve/ ) que además, posee la cuenta de correo : adminweb@proyectotictac.org.ve .

O por nuestros canales oficiales en las Redes Sociales tradicionales, privativas y comerciales sobre Facebook ( https://www.facebook.com/proyectotictac/ y https://www.facebook.com/Proyecto-Tic-Tac-2160717127554466/ ), Twitter ( https://twitter.com/albertccs1976 ) y Linkedin ( https://www.linkedin.com/in/blogproyectotictac/ ) e Instagram ( https://www.instagram.com/proyectotictac.blog/ )

Por cualquiera de nuestros medios, canales, grupos o páginas de nuestras redes sociales, ya pueden unirse o comunicarse con nosotros, y leer nuestros artículos publicados sobre Informática y Computación, Ciencia y Tecnología, Software Libre y GNU/Linux, Seguridad Informática y Hacking, Juegos, Ocio y Entretenimiento digital, Economía digital y Comercio Electrónico, Criptoeconomía, Criptomonedas y Blockchain, entre muchos temas relacionados más.

3 comentarios sobre “MariaDB o MySQL: ¡He ahí el dilema! Según Venenux.

Gracias por tus comentarios...

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s