Backup en PostgreSQL + Optimizaciones

Introducción

La verdad que nunca había trabajado con bases de datos PostgreSQL y he empezado relativamente hace poco por necesidades del trabajo. Pues bien en este caso nos vamos a centrar en una problemática que nos ha pasado y es realizar backup + restore.

Os preguntaréis, ¿Por qué tienes problemas al hacerlo? pues bien el problema viene dado porque si es una base de datos grande se puede llevar horas o día el proceso. Por lo tanto en mi cabeza lo primero que pasó fue un ¿Se puede optimizar los tiempos? ¿Cuál es la mejor manera de hacerlo? etc…

Así que en este artículo nos vamos a centrar en los distintos métodos que existen para realizar los backups y además optimizaciones siempre que se pueda.

Leer más

Instalación Percona XtraDB Cluster (Galera)

¡Hola!

Hoy vamos hacer algo más divertido y es montar nuestro primer Cluster de Percona XtraDB Cluster. El objetivo será de montar un entorno multi master (sí en el cual poder escribir en todos los nodos) y tener alta disponibilidad en ello (esto es obvio si es multi master).

Dentro de las múltiples ventajas que nos da este tipo de plataformas podemos destacar las siguientes:

  • Alta disponibilidad (si un nodo cae el resto sigue).
  • Consistencia de datos ya que la forma de sincronizar es síncrona.
  • Multi Master.
  • Se puede Leer y Escribir en cualquiera de los nodos.
  • Los nodos al entrar se sincronizan automáticamente.
  • Si algún nodo se cae, automáticamente se desconecta del cluster.

No todo será bueno en esta vida, pero tampoco soy un experto en la materia de base de datos, así que por mi parte pienso que es posible que pierda un poco a la hora de velocidad de escritura masiva.

Aparte de ello solo permite InnoDB (Xtradb es un fork) así que si estás buscando para otro tipo de ENGINE no te valdrá.

También decir que he probado este entorno en 3 servidores virtuales que estaban situados en Nueva York, Singapur y Alemania e iba todo correcto. Aunque no he realizado pruebas de Insert.

Leer más

Instalación MongoDB

¡Hola!

Nos encontramos hoy con otra nueva entrada y en este caso vamos a instalar MongoDB (Base de datos NoSQL).

Se ha puesto bastante de moda y hay clientes que lo solicitan así que nos ponemos manos a la obra para:

  • Instalación y configuración inicial.
  • Usuario y contraseña para su administración.
  • Mejoras de seguridad.
Leer más

Securizar Mysql / MariadDB

En esta ocasión os traemos algunos consejos para securizar MySQL o MariaDB (Forks en general de Mysql) de forma algo más segura.

# Ejecutar mysql_secure_installation

Este script nos hace pasar por varios pasos:

  1. Cambiar la password de root si procede.
  2. Eliminar las bases de datos de test.
  3. Eliminar el acceso de root desde remoto (direcciones IP externas al servidor).

Es decir que solo con este script que viene en las instalaciones nos permite generar un alto grado de seguridad.

Deshabilitar el histórico de mysql

En el caso de que queramos deshabilitar este log, recordamos que se guarda todo lo realizado en el cliente de mysql, podemos eliminar el contenido o apuntarlo a null para que no guarde nada.

cd /root && ln -s .mysql_history /dev/null

Cambiar el usuario root por otro nombre

Podemos cambiar el usuario por defecto de root por otro usuario que nos convenga. Esto lo hacemos para que no se tenga acceso a través del mismo.

RENAME USER ‘root’@’localhost’ TO ‘foobar’@’localhost’;

FLUSH PRIVILEGES;

Cada base de datos debe tener su usuario/host/permisos

Por temas de seguridad es recomendable seguir los siguientes pasos por cada base de datos:

  1. Crear un usuario por cada base de datos.
  2. Crear el origen desde el cual se va a conectar.
  3. Darle los permisos que va a utilizar.

Función REPLACE de MySQL

Introducción

En este post vamos a usar la función REPLACE de MySQL la cual nos va a permitir cambiar valores que encontremos en nuestras tablas por unos nuevo.

Uno de los ejemplos donde comúnmente se suele usar es a la hora de cambiar el dominio a un blog WordPress, ya que hay que cambiar estos valores en la base de datos.

Usando la función REPLACE de MySQL

Vamos a analizar un ejemplo clásico:

UPDATE wp_posts SET post_content = REPLACE( post_content, 'a class="url" href="www.', 'a class="url" href="http://www.' );

En este ejemplo lo que nos encontramos es lo siguiente:

  • tabla: wp_posts
  • campo: post_content
  • sustituir: vamos a sustituir ‘a class=»url» href=»www.’, ‘a class=»url» href=»http://www.’.
    • Es decir que donde había un href=»www. ahora será href=»http://www. Hemos agregado la parte del http.

Con esto lo que conseguimos, en el caso de wordpress, es que funcionen las imágenes a la hora de cambiar el nombre del dominio.

Incompatibilidad de versiones MySQL

Introducción

Nos encontramos con un problema de incompatibilidad de versiones MySQL. Tenemos 2 servidores 1 con una versión de MySQL 5.0.x y otro con versión 5.5.x y teníamos que tener una conexión entre ambos.

En este caso la conexión se estaba realizando desde el servidor nuevo al viejo.

El error que nos daba era algo similar a esto:

Connect Error (2000) mysqlnd cannot connect to MySQL 4.1+ using old authentication

Lo cual indicaba un problema de compatibilidades entre versiones (evidentemente porque en el nuevo servidor usaba las librerías nuevas).

Solución Incompatibilidad de versiones MySQL

La solución que hemos tomado para solventar este problema fueron dos pasos:

1) En la configuración del MySQL viejo (/etc/my.cnf) tuvimos que quitar la compatibilidad de old-password. En nuestro caso tuvimos que comentar la siguiente línea:

#old_passwords=1

2) Lo siguiente fue revisar el usuario que estábamos usando para conectar si tenía un formato de contraseñas correcto. Para ello tuvimos que acceder a nuestra consola de MySQL y ejecutar la siguiente sentencia:

SELECT `User`, `Host`, Length(`Password`) FROM mysql.user;

Esto nos daba un listado de los usuarios que tienen contraseñas débiles y que deberíamos cambiar para mayor seguridad. Para ser exactos las contraseñas con tamaño 16 son las de contraseñas débiles.

Evidentemente entre ellas estaba el usuario que estábamos usando y tuvimos que ejecutar el siguiente comando para volver a reajustar la contraseña:

SET PASSWORD FOR 'usuariocambiar'@'host'=PASSWORD('mismacontraseña');

Con esto hemos vuelto a ejecutar de nuevo el comando y esta vez nos salía con un tamaño de 41 caracteres.

Con esto dejamos resuelto el problema del cliente.

Too Many Open Files Mysql o MariaDB

Introducción

Mirando los logs de Mysql o MariaDB nos hemos percatado de que un cliente estaba teniendo problemas de apertura (Too Many Open Files) con tablas aleatorias de distintas bases de datos. No había un patrón claro pero tuvimos que pasar por varios pasos para detectar el problema.

Los logs los encontramos en: /var/log/mariadb/mariadb.log

En el artículo vamos a mirar los siguientes puntos:

  1. Revisión de los permisos del directorio «datadir» de mysql/mariadb
  2. Revisión de la variable open_file de mysql.
  3. Revisión de las limitaciones del sistema a la hora de abrir ficheros por un servicio.

Con esto hemos conseguido acotar el problema y solventar la incidencia que se nos había presentado.

Leer más