domingo, 19 de mayo de 2013

Un archivo ibdata Menor

Original post: http://anothermysqldba.blogspot.com/2013/05/a-smaller-ibdata-file.html

He visto el deseo de un archivo más pequeño ibdata llegar últimamente en elforums.mysql.com 

La base de datos innodb utiliza el archivo de ibdata (s) para almacenar los datos de la base de datos en el disco. Cómo configurar el sistema correctamente es clave y se puede obtener más información sobre estas opciones aquí:http://dev.mysql.com/doc/refman/5.6/en/innodb-configuration.html 

InnoDB proporciona un motor compatible con ACID y almacenamiento seguro de transacciones, es muy productiva, pero si va a eliminar y / o sustitución de datos, a menudo, tendrá que recuperar el espacio perdido en el tiempo. ¿Cuánto tiempo depende de su sistema y su uso. No se puede ejecutar un solo comando y recuperar espacio en un archivo ibdata.Tomará unos pasos y no es un trabajo detrás de la escena, a menos que hacer en el servidor esclavo. Si usted tiene un esclavo que lo mejor es hacer este trabajo sobre la base de datos esclavo primero y luego planificar para girar el servidor de base de datos para convertirse en la base de datos master. 

Así que en dos situaciones diferentes, éstas no son las únicas soluciones, pero algunas soluciones: 


  • Usted quiere mantener la ibdata presentar el mismo tamaño, pero sólo quiere limpiar el espacio perdido
La mejor manera de recuperar el espacio perdido es volcar los datos y vuelva a cargarlo. Sí, no es la primera opción para un DBA sé. Esto es más problemático cuanto más grande es su base de datos. Yo espero que tengan una base de datos esclavo y puede hacer esto de la esclavitud y luego lo convierten en un maestro más tarde. 


  1. Copia de seguridad de la base de datos
    1. mysqldump --user=<username> --password=<> --add-drop-database --master-data=2 --triggers --routines --events --databases (list database names and do not add mysql to this list) > /Just_AN_example/mysqldump_<DATEHERE>_.sql
      1. Esto le da una copia ASCII en caso de corrupción binario.
      2. También dispone de datos maestros a través de un comentario si es necesario.
      3. Esto mantendrá su autenticación mysql en el tacto también.
        1. Me gustaría guardar la base de datos mysql como vertedero separado.
    2. También puede crear una copia de seguridad con MySQL Enterprise Backup oPercona XtraBackup , si el sistema era un db más grande y necesitaba copias de seguridad en línea éstas son buenas opciones. Hasta que el que se utiliza por varias razones.
  2. Suma de comprobación a su base de datos.
    1. Reúna algunos números de lo que tiene para que pueda compararlo cuando se carga de nuevo.
      1. Esto se puede hacer con el Kit de herramientas de Percona

        1. # ./pt-table-checksum --password=<Password> > checksum_before_dump.txt
      2. Una consulta puede escribir usted mismo.
        1. Tengo un blog sobre esto, así
          1. http://anothermysqldba.blogspot.com/2013/05/mysql-checksum.html
  3. Stop / Start de la base de datos y aprovechar este tiempo de inactividad para las variables de sólo lectura que desea ajustar
  4. Cargar la base de datos back


  1. Siga los pasos 1 a 2 en el proceso mencionado anteriormente.
  2. En el paso 4 del procedimiento anterior tendrá que agregar lo siguiente al archivo my.cnf.
    1. innodb_file_format = Barracuda
    2. innodb_file_per_table = 1
  3. Elimine el archivo ibdata y registros.
    1. No volver a este punto
  4. Inicie la base de datos
  5. Confirme que está en marcha
  6. Cargar la base de datos de copia de seguridad.

Esto, por supuesto, sería mejor hacerlo en un servidor que no sea de producción / esclavo para que pueda confirmar todos los pasos y se consigue a una situación viable y gire el esclavo a ser el nuevo maestro.