Supongamos un caso que, antes o después, nos pasará en algún servidor: la máquina muere y es preciso acceder a ella desde un sistema de rescate (un LiveCD por ejemplo). Una de las tareas imprescindibles en ese escenario es hacer un backup de los datos antes de iniciar cualquier actuación de reparación. Los archivos se pueden respaldar sin problemas, pero, ¿qué hay de las bases de datos?
Veamos cómo hacer un mysqldump de nuestras bases de datos desde un entorno chroot en Ubuntu Server.
Lo primero es, una vez arrancado el sistema de rescate, montar el directorio de sistema de nuestro servidor, por ejemplo:
$ mkdir /mnt/sistemax $ sudo mount /dev/sda1 /mnt/sistema1
Donde sda1 es el directorio raíz de la instalación que no funciona. Si hubiera más particiones que nos interesen para el backup, se montan de la misma forma.
A continuación, y para que el chroot funcione correctamente, es preciso exportar ciertos directorios de sistema que necesitará el kernel para arrancar servicios en el entorno chroot:
$ sudo mount ‐‐bind /dev /mnt/sistema1/dev $ sudo mount ‐‐bind /proc /mnt/sistema1/proc $ sudo mount ‐‐bind /sys /mnt/sistema1/sys
Y ya podemos arrancar el entorno chroot:
$ sudo chroot /mnt/sistema1
Desde hace algunas versiones (Karmic Koala, creo), Ubuntu Server usa upstart para gestionar los servicios y demonios. Los servicios que funcionan bajo upstart no se pueden arrancar en un entorno chroot porque upstart funciona como un supervisor de servicios y los procesos dentro del entorno chroot no pueden comunicarse con el servicio upstart externo al chroot (Bug 430224). Esto causa que algunos paquetes, como MySQL, que ahora usan upstart en lugar de los clásicos scripts init no arrancarán en el entorno chroot. Para poder arrancar estos servicios, se debe configurar el entorno chroot para que /sbin/initctl apunte a /bin/true, con estos comandos:
$ sudo dpkg-divert --local --rename --add /sbin/initctl $ sudo ln -s /bin/true /sbin/initctl
Una vez hecho esto, ya podemos arrancar MySQL en modo seguro y hacer el dump de las bases de datos que debamos respaldar, dump que posteriormente copiaremos a un lugar seguro:
$ sudo mysqld_safe --skip-grant-tables --skip-networking & $ mysqldump unabasededatos > unabasededatos.sql
Una impresionante presentación de Yoshinori Matsunobu, uno de los mayores expertos en BBDD (Principal Infrastructure Architect en DeNA, MySQL Lead Consultant en MySQL/Oracle/Sun, Oracle ACE Director...) explicando todo lo que se necesita saber para la administración de bases de datos MySQL bajo Linux: SSD/HDD y cómo elegir el sistema de ficheros más adecuado, elegir la CPU más adecuada, el tamaño de swap, la configuración de red... aquí está el sumario de la presentación.
Estas son las diapositivas de un tutorial de 3 horas que impartió en la MySQL Conference and Expo 2011.
También se pueden descargar las diapositivas en formato PDF.
En muchas situaciones necesitamos una base de datos de países, con su código y nombre. Usando MySQL es muy sencillo conseguirlo, ya que una de las bases de datos de ejemplo de MySQL es, precisamente, una base de datos de países, que incluye tres tablas:
Para usarla basta con descargar el script SQL de http://dev.mysql.com/doc/index-other.html. Hay dos scripts preparados, uno para MyIsam (http://downloads.mysql.com/docs/world.sql.gz) y otro para InnoDB (http://downloads.mysql.com/docs/world_innodb.sql.gz) que son idénticos salvo que las tablas se crean con el motor especificado y en el caso de InnoDB con integridad referencial (y las claves ajenas necesarias).
Tras descargar el archivo y descomprimirlo, basta con conectarnos a MySQL e importar las tablas:
$ mysql -u root -p Enter password: mysql> source /path/al/archivo/world_innodb.sql
Estos datos tienen copyright de la Oficina de Estadística de Finlandia: http://tilastokeskus.fi/tup/kvportaali/index_en.html.
No se adaptará a todas las posibles situaciones donde necesitemos países e idiomas, pero para muchos casos, como mostrar un desplegable de países, nos vale de sobra.
A veces, tras un error del servidor, podemos encontrarnos con que alguna tabla de una base de datos MySQL está dañada, y aparece el error Error : Table ‘tabla’ is marked as crashed and should be repaired. Su solución es muy sencilla:
$ mysqlcheck -u usuario -p --auto-repair base_de_datos nombre_de_la_tabla
O directamente desde la consola de MySQL:
mysql> repair table nombre_de_la_tabla;
Si la tabla usa el motor MyISAM, se puede usar además un comando específico para este tipo de tablas (el path por defecto suele ser ese, cambiarlo por el que corresponda si es otro):
myisamchk --force /var/lib/mysql/base_de_datos/nombre_de_tabla.MYI
Por supuesto, antes de hacer nada es imperativo hacer un dump de la base de datos completa, por si se rompe algo.
Esta web
http://alvaroremesal.net
, su contenido, texto e imágenes está licenciado bajo una
Licencia Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0 España.