2009-08-18 17 views
6

Tengo una base de datos MySQL de aproximadamente 1,7 GB. Normalmente lo respaldo usando mysqldump y esto toma alrededor de 2 minutos. Sin embargo, me gustaría saber las respuestas a las siguientes preguntas:Copia de seguridad de la base de datos MySQL

  1. ¿Lee bloque mysqldump y/o escritura de la base de datos? Porque en un escenario en vivo, no me gustaría bloquear a los usuarios el uso de la base de datos mientras se realiza la copia de seguridad.

  2. Sería ideal para mí hacer una copia de seguridad de la base de datos TODO una vez en, digamos, una semana, pero en los días intermedios solo se debe realizar una copia de seguridad de una tabla ya que las otras no cambiarán. ¿Hay una manera de lograr esto?

  3. ¿Es mysqlhotcopy una mejor alternativa para estos fines?

Respuesta

2
  1. No, puede especificar las tablas que va a bloquear el uso de --lock-mesas pero no son por defecto
  2. Si no se especifica ninguna tabla a continuación, toda la base de datos está respaldada , o puede especificar una lista de tablas:

    mysqldump [opciones] [nombre_de_base_de_datos tablas]

  3. No se utiliza se lo siento, sin embargo corro una serie de MySQL DB, algunas más grandes algunos más pequeños que 1,7 GB y yo usar mysqldump para todas mis copias de seguridad .

+0

, gracias por tu respuesta! – TMM

5

mysqlhotcopy no funciona en ciertos casos en los que se pierde la readlock, y no funciona con tablas InnoDB.

mysqldump es más utilizado porque puede realizar copias de seguridad de todo tipo de tablas.

De la documentación de MySQL

mysqlhotcopy es un script en Perl que fue escrito y contribuyó por Tim Bunce originalmente. Utiliza LOCK TABLES, FLUSH TABLES y cp o scp para realizar una copia de seguridad de la base de datos rápidamente. Es la forma más rápida de realizar una copia de seguridad de la base de datos o de las tablas individuales, pero solo se puede ejecutar en la misma máquina donde se encuentran los directorios de la base de datos. mysqlhotcopy solo funciona para hacer copias de seguridad de las tablas MyISAM y ARCHIVE. Se ejecuta en Unix y NetWare

El cliente mysqldump es un programa de copia de seguridad escrito originalmente por Igor Romanenko. Se puede utilizar para volcar una base de datos o una colección de bases de datos para realizar copias de seguridad o transferirlas a otro servidor SQL (no necesariamente un servidor MySQL). El volcado generalmente contiene instrucciones SQL para crear la tabla, poblarla o ambas cosas. Sin embargo, mysqldump también se puede usar para generar archivos en formato CSV, otro texto delimitado o formato XML.

Adiós.

+0

¡Gracias RRUZ por la información útil! – TMM

3

1) mysqldump solo bloquea cuando se lo solicita (una de las tablas de bloqueo, --lock-all-tables, --single-transaction). pero si desea que su copia de seguridad sea consistente, entonces mysqldump debe bloquearse (utilizando --single-transaction o --lock-all-tables) o puede obtener una instantánea inconsistente de la base de datos. Nota: - la transacción única funciona solo para InnoDB.

2) Seguro, simplemente enumerar las tablas que desea hacer copia de seguridad después de que el nombre de la base de datos:

mysqldump OPTIONS DATABASE TABLE1 TABLE2 ... 

Alternativamente puede excluir las tablas que no desea:

mysqldump ... --ignore-table=TABLE1 --ignore-table=TABLE2 .. DATABASE 

Así puede hacer un volcado completo de la base de datos una vez a la semana y realizar una copia de seguridad solo de las tablas de cambio una vez al día.

3) mysqlhotcopy inly funciona en tablas MyISAM y en la mayoría de las aplicaciones está mejor con InnoDB. Existen herramientas comerciales (bastante caras) para el respaldo de mesas innodb. Últimamente también existe el nuevo código abierto para este fin: Xtrabackup

Además, para automatizar el proceso, puede usar astrails-safe. Es compatible con la copia de seguridad de la base de datos con mysqldump y el sistema de archivos con tar. + cifrado + carga en S3, + muchos otros regalos. Todavía no hay soporte para xtrabackup, pero debería ser fácil de agregar si es lo que necesita.

+0

gracias por una respuesta útil @Vitaly Kushner – kta

3

Agregar un esclavo mysql a su configuración le permitiría realizar copias de seguridad consistentes sin bloquear la base de datos de producción.

La adición de un esclavo también le proporciona un registro binario de cambios. Un volcado es una instantánea de la base de datos en el momento en que tomó el volcado. El registro binario contiene todas las declaraciones que modificaron los datos junto con una marca de tiempo.

Si tiene una falla a la mitad del día y solo realiza copias de seguridad una vez al día, ha perdido medio día de trabajo. Con los registros binarios y mysqldump, puede restaurar desde el día anterior y 'reproducir' los registros hasta el punto de falla.

http://dev.mysql.com/doc/refman/5.0/en/binary-log.html

Si su MySQL se ejecuta en un servidor Linux con discos LVM o un servidor de ventanas con VSS, que debe salir Zamanda. Toma diffs binarios de los datos en el disco, que es mucho más rápido de leer y restaurar que un volcado de texto de la base de datos.

0

de MySQL y PHP probar este Esto también eliminará los archivos después de n días

Macros
$dbhost = 'localhost'; 
$dbuser = 'xxxxx'; 
$dbpass = 'xxxxx'; 
$dbname = 'database1'; 
$folder = 'backups/'; // Name of folder you want to place the file 
$filename = $dbname . date("Y-m-d-H-i-s") . ".sql"; 
$remove_days = 7; // Number of days that the file will stay on the server 



$command="mysqldump --host=$dbhost --user=$dbuser --password=$dbpass $dbname > $folder$filename"; 
system($command); 

$files = (glob("$folder"."*.sql")); 

    foreach($files as $file) { 
     if(is_file($file) 
     && time() - filemtime($file) >= $remove_days*24*60*60) { // 2 days = 2*24*60*60 
      unlink($file); 
      echo "$file removed \n"; 
     } else { echo "$file was last modified: " . date ("F d Y H:i:s.", filemtime($file)) . "\n"; } 
    } 
Cuestiones relacionadas