Recuperar MySQL sin LOGs
Os cuento y dejo esta autonota, sobre como recuperar MySQL sin tener los logs, por si a alguien le ocurre el mismo problema. El disco duro de mi centralita, asterisk por supuesto, se ha roto, pero bien roto. Suerte que mis copias de seguridad las hago diariamente y del sistema completo, de esta forma en, supuestamente, pocos minutos recupero el sistema al 100 %. Digo supuestamente pocos minutos porque me ha surgido un problemilla con los logs de MySQL. Con todo lo demás ha ido de lujo, queda prometido en esta post un manualillo contandoos como hago las copias de seguridad.
Mi copia de seguridad excluía el directorio de logs, /var/log/ en debian , porque tuve problemas con el log de asterisk, me llegaba a ocupar mas de 20 gb el /var/log/asterisk/full y por supuesto que no quería copiarlos, pero torpe de mi, en mi rsync exluí el directorio completo /var/log/ en vez de /var/log/asterisk, pensando que no ocurría nada en la restauración del sistema. Pues bueno si que ocurre, MySQL no es capaz de arrancar sin su directorio en /var/log, es más no es que necesitemos crearlo sino que necesitamos tener los archivos originales y unicos para cada instalación de MySQL.
Dentro del directorio /var/log/mysql/ existen unos archivos .bin, en mi caso mysql-bin.000386 hasta mysql-bin.000397, necesarios para que recuperemos MySQL si ocurre algun desastre, como no los tenemos ya que mi /var/log/mysql ha desaparecido, MySQL no es capaz de iniciar su servicio si no tiene estos logs, dicho de otra forma para que Google lo pille, MySQL no arranca sin el log.
La forma de solucionarlo es la siguiente:
Bueno pues la forma es bien fácil, una vez sabida por supuesto, debemos editar el archivo /etc/mysql/my.cnf
operadora:/# vi /etc/mysql/my.cnf
Buscad el apartado Logging and Replication y comentad las lineas
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
Para que quede así:
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
#log = /var/log/mysql/mysql.log
#
# Error logging goes to syslog. This is a Debian improvement 🙂
#
# Here you can see queries with especially long duration
#log_slow_queries = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
#server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log
# WARNING: Using expire_logs_days without bin_log crashes the server! See README.Debian!
#expire_logs_days = 10
#max_binlog_size = 100M
#binlog_do_db = include_database_name
#binlog_ignore_db = include_database_name
Ahora debemos pasar mysqlchek por si alguna de las bases de datos se ha quedado corrupta:
operadora:/# mysqlcheck -A -u root -p
Enter password:
asterisk.Backup OK
asterisk.admin OK
asterisk.ampusers OK
asterisk.announcement OK
asterisk.callback OK
asterisk.cidlookup OK
asterisk.cidlookup_incoming OK
asterisk.customerdb OK
asterisk.devices OK
asterisk.disa OK
asterisk.extensions OK
asterisk.featurecodes OK
asterisk.findmefollow OK
asterisk.freepbx_log OK
……………
……………
La solución no es óptima ya que perdemos una funcionalidad que el día de mañana puede sernos útil, pero que yo ya he resuelto creando dumps diarios de la BBDD.