Script Backup MYSQL Databases

En todo servidor propio es necesario preocuparse por disponer de los backups necesarios para restaurar los sistemas.

Esto incluye:

  • Codigo fuente ( GIT, github, gitlab )
  • Archivos producidos por los usuarios ( AWS S3 )
  • Base de datos

Mantener seguras, optimizadas y perfectamente backupeadas ( existe esa palabra ? ) las base de datos no es una tarea facil ni despreciable, sino preguntenle a @gitlab.

Existe varias formas de pago para realizarlo todas super optimas, pero de pago “extra”

  • Microsoft Azure, empezando desde 80USD mensuales
  • AWS RDS, empezando desde 10.5USD mensuales
  • Google Cloud SQL, empezando desde 8USD mensuales

Todas estas opciones nos permiten tener varias bases de datos y nos aseguran disponibilidad, seguridad y actualizaciones.

Si por el contrario nuestra configuración no va por disponer de un servidor de base de datos separado pues bien necesitaremos ocuparnos nosotros mismos de las operaciones de rutina del servidor, sobre todo de los backups.

El siguiente script es un procedimiento de backup automatizado que suelo utilizar

databases=`mysql -e 'show databases;' | tr -d "| " | grep -v Database | grep -v information_schema | grep -v performance_schema`

fecha=` date +%Y%m%d`
mkdir -p /backup/$fecha

fechaold=`date -d "7 day ago" +%Y%m%d`

rm /backup/$fechaold -R

for db in $databases; do
 
 if [ -f /backup/$db.clear ]; then
 mysql $db < /backup/$db.clear
 fi
 mysqldump $db > /backup/$fecha/$db.sql
 tar -czf /backup/$fecha/$db.tar.gz backup/$fecha/$db.sql
 rm /backup/$fecha/$db.sql
done

Ahora debemos configurar el script para que se ejecute todos los dias a una hora especifica

crontab -e

0 5 * * * bash backup.sh

Aunque el script ubique los backups en el directorio de mayor seguridad de nuestro servidor ( root ), es recomendable ubicar una copia en otro lugar para evitar cualquier contingencia. Este otro lugar, podria ser otro servidor encargado de gestionar los backups de varios servidores o incluso una maquina personal local.

Para configurarlo deberemos habilitar el acceso por ssh de la maquina que guardara los backups

0 6 * * * scp -r backup@servidor.com:/backup/`date +%Y%m%d` .

NodeJS mySQL NOT SUPPORTED AUTH MODE

Recientemente al actualizar mi maquina de desarrollo me tope con el siguiente error desde NodeJS

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

Era evidente un problema de configuracion ya que dias atras la app funcionaba correctamente y no habia sido modificada.

Para solucionar este problema debes entrar en la consola de mysql:

sudo mysql -u root

Y ejecutar el siguiente comando

update mysql.user set authentication_string=password(''), plugin='mysql_native_password' where user='root';

Y luego proceder a reiniciar el servicio

sudo service mysql restart

Image

Adios PHP5

Oficialmente a finales del 2016 se termina el soporte para PHP5 tamiflu generic. Eso quiere decir que ya no habran correcciones ni mejoras pasada esa fecha. Luego de eso habra un soporte exclusivo para fallas CRITICAS que se extendera hasta el 2018.

Lo bueno es que todos los frameworks soportan perfectamente PHP7, asi que llego la hora del adios ya no hay nada mas que hablar 😀

Para mayores detalles PHP.net

Quote

Como deshabilitar el password en linux

Usar password para acceder a sistemas remotos tiene varias desventajas:

  1. Generar una clave fuerte suele ser complicado y siempre tendemos a usar claves basadas en palabras conocidas faciles de recordar ( aunque cambiemos ciertos patrones )
  2. Mientras más facil de recordar mas inseguro estara nuestro sistema find more.

Una forma segura de acceder a sistemas remotos es usar una clave ssh.  Eso si, no olvidar borrar el password de nuestra cuenta ( asi solo sera accesible desde el equipo que tiene la clave ssh )

passwd  -d root

PHP Frameworks Benchmark

Llevo mucho tiempo desarrollando en PHP usando diferentes frameworks, profesionalmente he usado Kohana, CodeIgniter, Simfony. Incluso hubo un tiempo que mantenia mi propio framework ( alla por el año 2006, cuando los frameworks en PHP aun no eran tan populares ), inclusive he trabajado con Rails y Django ( buscando tambien aprender sus buenas practicas ).

Actualmente estoy trabajando con CodeIgniter 3 ( y quejandome de sus carencias ), sin embargo ultimamente decidi darle una oportunidad a un framework nuevo LARAVEL.

Lo primero que debo decir que es soy un hater Simfony … que Laravel sea un derivado de Simfony es uno de los motivos por lo que no quize probarlo antes.

Tambien debo decir, que mi primer PC fue un 486 con algo de 256 RAM ( sino me equivoco ). Aprendi a programar en esa PC y durante mucho tiempo la velocidad de ejecucion fue mi principal objetivo.

A la hora de escoger un framework considero se debe tener en cuenta lo siguiente:

  • Documentacion ( casi todos los frameworks actuales son muy competentes en este punto )
  • Facilidad de Uso ( aunque CodeIgniter es bastante facil, mis principales quejas son la inexistencia de un ORM propio, y las limitaciones de su sistema de routing )
  • Velocidad de Ejecucion

Al revisar Laravel, mi premisa es que era lento. Es más, al indagar sobre el encontre que tiene un subframework Lumen que es una version minimalista y mas rapida que Laravel. Que un framework tenga una version más ligera de si mismo solo quiere decir 2 cosas: O es lento, o su dev-team son unos obsesos de la velocidad, #likeme. Sin embargo, he de aclarar que el hecho que las versiones Lumen y Laravel sean compatibles entre si es un punto a favor.

Encontre entonces una gran cantidad de benchmarks entre Laravel y CodeIgniter donde mostraban a Codeigniter como un 20% mas rapido que Laravel. Un 20% es una cantidad significativa, pero si es mas facil y rapido escribir codigo en Laravel que en Codeigniter como que no tiene mucho peso.

Sin embargo, esos mismos benchmarks mostraban otro framework que me habia pasado desapercibido: Phalcon. Aproximadamente 5 veces mas rapido que Laravel.

php-benchmark

Revisando la documentacion de Phalcon, maneja un sistema propio de ORM (punto a favor).  Permite la gestión de rutas ( en este punto me parece que Laravel todavia es mas flexible que Phalcon … ). Sus vistas implementan el mismo modelo que CodeIgniter ( el cual aunque es el mismo template de PHP no por eso es menos eficiente ). Su manejo de dependencias utiliza composer, permitiendo asi un facil manejo de las mismas.

Los puntos en contra de Phalcon que he podido observar es que al ser un framework escrito en C necesita acceso a root para instalarse. NO CORRE EN HOSTING COMPARTIDOS. Pero en mi caso ese no es un problema.

Creo que ha llegado el momento de aprender un nuevo skill … Phalcon y comprobar en carne y hueso si sus ventajas son reales o si por el contrario tiene carencias insalvables.

Como anecdota, inicie esta investigación ya que queria aprender Laravel, luego me llamo la atencion Lumen ( Laravel MicroFramework ) y termine en Phalcon. 😀