Cuando tenemos bases de datos muy grandes en nuestro motor MySQL es muy probable que los backups de las mismas tarden bastante tiempo en llevarse a cabo. Y es que el tiempo que una herramienta toma para hacer un backup de una base de datos es en muchas ocaciones crucial y mas aun el tiempo que toma restaurar dicho backup.
Domas Mituzas, Andrew Hutchings y Mark Leith son un grupo de ingenieros que trabajan en compañías como facebook, SkySQL y Oracle y que nos han dejado esta maravillosa herramienta abierta al publico. Se trata de MyDumper, misma que hace un backup y una restauración en significativamente menos tiempo, ya que aprovecha el poder del paralelismo multihilo de los sistemas operativos modernos y esto hace que vaya mucho mas rápido.
Para instalar esta herramienta en los distintos sistemas operativos, tenemos los siguientes comandos:
Ubuntu/Debian
apt-get install libglib2.0-dev libmysqlclient15-dev zlib1g-dev libpcre3-dev
Fedora/RedHat/CentOs
yum install glib2-devel mysql-devel zlib-devel pcre-devel
OpenSuse
zypper install glib2-devel libmysqlclient-devel pcre-devel zlib-devel
Mac OSX
port install glib2 mysql5 pcre
La utilizacion es bastante sencilla, pero poderosa.
MyDumper
mydumper \ --database=$DB_NAME \ --host=$DB_HOST \ --user=$DB_USER \ --password=$DB_PASS \ --outputdir=$DB_DUMP \ --rows=500000 \ --compress \ --build-empty-files \ --threads=2 \ --compress-protocol
cabe notar que $DB_DUMP tendrá que ser un directorio (no un archivo) en donde la base de datos sera guardada para futuras restauraciones, y el parámetro rows es el numero de filas que se podran respaldar por cada operacion, por cada hilo, bastante mas poderoso que el default nativo de MySQL que lo hace de forma secuencial.
MyLoader
myloader \ --database=$DB_NAME \ --directory=$DB_DUMP \ --queries-per-transaction=50000 \ --threads=10 \ --compress-protocol \ --verbose=3
De forma similar podemos restaurar una base de datos con un comando de myloader. en este caso el parámetro directory indica el directorio en donde el backup de MyDump esta ubicado, y el parámetro queries-per-transactión es el numero de querys que cada transaccion ejecutará. De nuevo bastante mejor que las opciones nativas del motor de la base de datos.