Bacula se nego a funcionar, la db es MySQL 5.1, el log de bacula es:
12-Oct 19:47 bacula-dir JobId 12396: Fatal error: sql_create.c:870 Lock Filename table Query failed: LOCK TABLES Filename write, batch write, Filename as f write: ERR=Table './bacula/Filename' is marked as crashed and last (automatic?) repair failed
Bueno, tenemos que reparar nuestras tablas, mysql nos proporciona varios comandos, entre ellos podemos tratar de compactar la bd completo o bien usar el comando: mysqlcheck para ver el estatus de las tablas y si necesitaramos reparar alguna tipo MYISAM esta el comando myisamchk.
NOTA: Recomendacion de MySQL, si van a reparar tablas es
altamente recomendable que el servicio este apagado por seguridad, de lo contrario atenganse a las consecuencias si algo sale mal, ya que si un usuario esta tratando de ingresar datos, aunque la tabla ya no se lo permita pero puede estar abierto el aputador a el archivo y luego el comando myisamchk tambien trata de hacer modificaciones, nomas imaginense que puede pasar?.
altamente recomendable que el servicio este apagado por seguridad, de lo contrario atenganse a las consecuencias si algo sale mal, ya que si un usuario esta tratando de ingresar datos, aunque la tabla ya no se lo permita pero puede estar abierto el aputador a el archivo y luego el comando myisamchk tambien trata de hacer modificaciones, nomas imaginense que puede pasar?.
mysqlcheck
Si lo ejecutan solo, les va a dar todo su arsenal de parametros que soporta.
Bacula tiene varias tablas, todas son usando el engine: myisam.
Ahora vamos empezar por revisar la bd y que nos diga que tablas necesitan reparacion:
Ahora vamos empezar por revisar la bd y que nos diga que tablas necesitan reparacion:
/var/lib/mysql/bacula/
-rw-rw---- 1 mysql mysql 8710 Jun 27 00:28 BaseFiles.frm
-rw-rw---- 1 mysql mysql 0 Jun 27 00:28 BaseFiles.MYD
-rw-rw---- 1 mysql mysql 1024 Jun 27 00:28 BaseFiles.MYI
-rw-rw---- 1 mysql mysql 8604 Jun 27 00:28 CDImages.frm
-rw-rw---- 1 mysql mysql 0 Jun 27 00:28 CDImages.MYD
-rw-rw---- 1 mysql mysql 1024 Jun 27 00:28 CDImages.MYI
-rw-rw---- 1 mysql mysql 8764 Jun 27 00:28 Client.frm
-rw-rw---- 1 mysql mysql 1904 Jun 27 00:28 Client.MYD
-rw-rw---- 1 mysql mysql 3072 Jun 27 00:28 Client.MYI
-rw-rw---- 1 mysql mysql 8732 Jun 27 00:28 Counters.frm
-rw-rw---- 1 mysql mysql 0 Jun 27 00:28 Counters.MYD
-rw-rw---- 1 mysql mysql 1024 Jun 27 00:28 Counters.MYI
-rwxr-xr-x 1 mysql mysql 65 Nov 26 2010 db.opt
-rw-rw---- 1 mysql mysql 9290 Jun 27 00:28 Device.frm
-rw-rw---- 1 mysql mysql 0 Jun 27 00:28 Device.MYD
-rw-rw---- 1 mysql mysql 1024 Jun 27 00:28 Device.MYI
-rw-rw---- 1 mysql mysql 8806 Jun 27 00:28 File.frm
-rw-rw---- 1 mysql mysql 1756959048 Oct 12 22:34 File.MYD
-rw-rw---- 1 mysql mysql 777433088 Oct 12 22:34 File.MYI
-rw-rw---- 1 mysql mysql 8602 Jun 27 00:34 Filename.frm
-rw-rw---- 1 mysql mysql 69038080 Oct 12 18:15 Filename.MYD
-rw-rw---- 1 mysql mysql 75943936 Oct 12 19:10 Filename.MYI
-rw-rw---- 1 mysql mysql 8676 Jun 27 00:34 FileSet.frm
-rw-rw---- 1 mysql mysql 5104 Sep 14 19:20 FileSet.MYD
-rw-rw---- 1 mysql mysql 2048 Sep 26 06:28 FileSet.MYI
-rw-rw---- 1 mysql mysql 9618 Jun 27 00:34 Job.frm
-rw-rw---- 1 mysql mysql 9618 Jun 27 00:34 JobHisto.frm
-rw-rw---- 1 mysql mysql 167324 Jun 27 00:34 JobHisto.MYD
-rw-rw---- 1 mysql mysql 20480 Jun 27 00:34 JobHisto.MYI
-rw-rw---- 1 mysql mysql 8916 Jun 27 00:34 JobMedia.frm
-rw-rw---- 1 mysql mysql 423325 Oct 12 22:34 JobMedia.MYD
-rw-rw---- 1 mysql mysql 304128 Oct 12 22:34 JobMedia.MYI
-rw-rw---- 1 mysql mysql 334004 Oct 12 22:34 Job.MYD
-rw-rw---- 1 mysql mysql 39936 Oct 12 22:34 Job.MYI
-rw-rw---- 1 mysql mysql 8676 Jun 27 00:34 Location.frm
-rw-rw---- 1 mysql mysql 8881 Jun 27 00:34 LocationLog.frm
-rw-rw---- 1 mysql mysql 0 Jun 27 00:34 LocationLog.MYD
-rw-rw---- 1 mysql mysql 1024 Jun 27 00:34 LocationLog.MYI
-rw-rw---- 1 mysql mysql 0 Jun 27 00:34 Location.MYD
-rw-rw---- 1 mysql mysql 1024 Jun 27 00:34 Location.MYI
-rw-rw---- 1 mysql mysql 8660 Jun 27 00:34 Log.frm
-rw-rw---- 1 mysql mysql 5677120 Oct 12 22:34 Log.MYD
-rw-rw---- 1 mysql mysql 732160 Oct 12 22:34 Log.MYI
-rw-rw---- 1 mysql mysql 10453 Jun 27 00:34 Media.frm
-rw-rw---- 1 mysql mysql 11108 Oct 12 22:34 Media.MYD
-rw-rw---- 1 mysql mysql 4096 Oct 12 22:34 Media.MYI
-rw-rw---- 1 mysql mysql 8652 Jun 27 00:34 MediaType.frm
-rw-rw---- 1 mysql mysql 100 Jun 27 00:34 MediaType.MYD
-rw-rw---- 1 mysql mysql 2048 Jun 27 00:34 MediaType.MYI
-rw-r--r-- 1 root root 6372 Jun 27 00:19 out.txt
-rw-rw---- 1 mysql mysql 8594 Jun 27 00:34 Path.frm
-rw-rw---- 1 mysql mysql 8600 Jun 27 00:34 PathHierarchy.frm
-rw-rw---- 1 mysql mysql 0 Jun 27 00:34 PathHierarchy.MYD
-rw-rw---- 1 mysql mysql 1024 Jun 27 00:34 PathHierarchy.MYI
-rw-rw---- 1 mysql mysql 16394220 Oct 12 19:17 Path.MYD
-rw-rw---- 1 mysql mysql 25443328 Oct 12 19:17 Path.MYI
-rw-rw---- 1 mysql mysql 8658 Jun 27 00:34 PathVisibility.frm
-rw-rw---- 1 mysql mysql 0 Jun 27 00:34 PathVisibility.MYD
-rw-rw---- 1 mysql mysql 1024 Jun 27 00:34 PathVisibility.MYI
-rw-rw---- 1 mysql mysql 9699 Jun 27 00:34 Pool.frm
-rw-rw---- 1 mysql mysql 240 Oct 9 23:17 Pool.MYD
-rw-rw---- 1 mysql mysql 3072 Oct 12 18:15 Pool.MYI
-rw-rw---- 1 mysql mysql 8656 Jun 27 00:34 Status.frm
-rw-rw---- 1 mysql mysql 640 Jun 27 00:34 Status.MYD
-rw-rw---- 1 mysql mysql 2048 Jun 27 00:34 Status.MYI
-rw-rw---- 1 mysql mysql 8644 Jun 27 00:34 Storage.frm
-rw-rw---- 1 mysql mysql 120 Jun 27 00:34 Storage.MYD
-rw-rw---- 1 mysql mysql 2048 Jun 27 00:34 Storage.MYI
-rw-rw---- 1 mysql mysql 8678 Jun 27 00:34 UnsavedFiles.frm
-rw-rw---- 1 mysql mysql 0 Jun 27 00:34 UnsavedFiles.MYD
-rw-rw---- 1 mysql mysql 1024 Jun 27 00:34 UnsavedFiles.MYI
-rw-rw---- 1 mysql mysql 8570 Jun 27 00:34 Version.frm
-rw-rw---- 1 mysql mysql 7 Jun 27 00:34 Version.MYD
-rw-rw---- 1 mysql mysql 1024 Jun 27 00:34 Version.MYI
O bien si analizamos toda la bd debemos darle el usuario/password del root, el nombre de la bd y el sabe donde buscarlo, vamos empezando por esta opcion:
bacula]# time mysqlcheck -a -B bacula -p
Enter password:
bacula.BaseFiles Table is already up to date
bacula.CDImages Table is already up to date
bacula.Client Table is already up to date
bacula.Counters Table is already up to date
bacula.Device Table is already up to date
bacula.File Table is already up to date
bacula.FileSet Table is already up to date
bacula.Filename
Error : Table './bacula/Filename' is marked as crashed and last (automatic?) repair failed
Error : Table 'Filename' is marked as crashed and last (automatic?) repair failed
error : Corrupt
bacula.Job Table is already up to date
bacula.JobHisto Table is already up to date
bacula.JobMedia Table is already up to date
bacula.Location Table is already up to date
bacula.LocationLog Table is already up to date
bacula.Log Table is already up to date
bacula.Media Table is already up to date
bacula.MediaType Table is already up to date
bacula.Path Table is already up to date
bacula.PathHierarchy Table is already up to date
bacula.PathVisibility Table is already up to date
bacula.Pool Table is already up to date
bacula.Status Table is already up to date
bacula.Storage Table is already up to date
bacula.UnsavedFiles Table is already up to date
bacula.Version Table is already up to date
real 0m2.297s
user 0m0.000s
sys 0m0.000s
Con el parametro -a le pedimos que revise rapidamente los estatus de cada tabla de la bd, es rapido y nos dice la condicion de la tabla. Me gusta ver el tiempo que tardan las tareas en ejecutarse, nos indica la condicion de nuestro equipo en lo personal cuando se trata de bd siempre deseo saber este dato. Ahora vamos solictando mas detalle, que no revise el estatus si no que abra cada tabla y le realice una revision normal.
time mysqlcheck --check -B bacula -p
Enter password:******
bacula.BaseFiles OK
bacula.CDImages OK
bacula.Client OK
bacula.Counters OK
bacula.Device OK
bacula.File OK
bacula.FileSet OK
bacula.Filename
warning : Table is marked as crashed and last repair failed
warning : 1 client is using or hasn't closed the table properly
warning : Size of indexfile is: 75943936 Should be: 14383104
error : Size of datafile is: 69038080 Should be: 69038956
error : Corruptbacula.Job OK
bacula.JobHisto OK
bacula.JobMedia OK
bacula.Location OK
bacula.LocationLog OK
bacula.Log OK
bacula.Media OK
bacula.MediaType OK
bacula.Path OK
bacula.PathHierarchy OK
bacula.PathVisibility OK
bacula.Pool OK
bacula.Status OK
bacula.Storage OK
bacula.UnsavedFiles OK
bacula.Version OK
real 1m19.222s
user 0m0.000s
sys 0m0.000s
Ahi esta la tabla que esta danada de nuevo.
Pero que tal si ejecutamos la misma consulta pero agregamos el parametro -e que significa, revisa las tablas 100% sin importar el tiempo que tardes ("extendida").
time mysqlcheck --check -e -B bacula -p
Enter password:
bacula.BaseFiles OK
bacula.CDImages OK
bacula.Client OK
bacula.Counters OK
bacula.Device OK
bacula.File OK
bacula.FileSet OK
bacula.Filename
warning : Table is marked as crashed and last repair failed
warning : 1 client is using or hasn't closed the table properly
warning : Size of indexfile is: 75943936 Should be: 14383104
error : Size of datafile is: 69038080 Should be: 69038956
error : Corrupt
bacula.Job OK
bacula.JobHisto OK
bacula.JobMedia OK
bacula.Location OK
bacula.LocationLog OK
bacula.Log OK
bacula.Media OK
bacula.MediaType OK
bacula.Path OK
bacula.PathHierarchy OK
bacula.PathVisibility OK
bacula.Pool OK
bacula.Status OK
bacula.Storage OK
bacula.UnsavedFiles OK
bacula.Version OK
real 2m8.610s
user 0m0.000s
sys 0m0.008s
Si ven el tiempo de ejecucion fue un poco mas.
MyIsamChk
Ya sabemos que tabla esta danada, ahora vamos a tratar de repararla, los archivos que este comando nos pide son los que tienen extension "MYI". asi que vamos a ejecutar el comando de la siguiente manera.
Si saben donde esta el archivo deben darle la ruta de el o bien se meten a el folder donde estan los archivos, en mi caso es:
/var/lib/mysql/bacula
Pero antes de vamos a apagar el servicio en lo que reparamos la tabla, claro esto lo hago ya despues de horas de trabajo, cuando se que a nadie le afecta si el servicio no esta operando.
service mysql stop
Ahora si, segun el comando tenemos 2 parametros a usar para la reparacion:
-r == repara de manera rapida, la mayor parte del tiempo funciona.
-o == repara al modo antiguo, este siempre funciona, es mas lento pero efectivo.
Yo hago uso del metodo antiguo por ello uso el parametro -o, tengo tiempo, nadie me esta esperando por el servicio asi que lo ejecuto:
-r == repara de manera rapida, la mayor parte del tiempo funciona.
-o == repara al modo antiguo, este siempre funciona, es mas lento pero efectivo.
Yo hago uso del metodo antiguo por ello uso el parametro -o, tengo tiempo, nadie me esta esperando por el servicio asi que lo ejecuto:
time myisamchk -o Filename.MYI - recovering (with keycache) MyISAM-table 'Filename.MYI' Data records: 1409502 Found block that points outside data file at 69038076 Data records: 1409472 real 0m27.491s user 0m19.417s sys 0m0.384s
Bien parece que todo esta reparado, ahora si a levantar el servicio de nuevo.
service mysql start
De nuevo regresamos a el comando mysqlchk para revisar nuestra base de datos:
time mysqlcheck --check -e -B bacula -p Enter password: bacula.BaseFiles OK bacula.CDImages OK bacula.Client OK bacula.Counters OK bacula.Device OK bacula.File OK bacula.FileSet OK bacula.Filename OK bacula.Job OK bacula.JobHisto OK bacula.JobMedia OK bacula.Location OK bacula.LocationLog OK bacula.Log OK bacula.Media OK bacula.MediaType OK bacula.Path OK bacula.PathHierarchy OK bacula.PathVisibility OK bacula.Pool OK bacula.Status OK bacula.Storage OK bacula.UnsavedFiles OK bacula.Version OK real 4m56.098s user 0m0.000s sys 0m0.000s
Listo, asi es como debemos tener nuestras tablas, ahora si a seguir trabajando, saludos!!!
5 comentarios:
Buenísimo. Funcionó perfecto! Gracias!
De naa German, que bueno que te sirvio, saludos!!!
Perfecto amigo, mil gracias. Tu tutorial acaba de salvarme la vida!!
Ya esta, saludos!!!
Perfecto procedimiento.
Muchas Gracias.
Publicar un comentario