Ahora mismo puedo hacer la copia de seguridad usando mysqldump. Pero tengo que eliminar el servidor web Y me toma alrededor de 5 minutos hacer la copia de seguridad. Si no elimino el servidor web, me lleva una eternidad y nunca termina + el sitio web se vuelve inaccesible durante la copia de seguridad.
¿Existe una forma más rápida / mejor de hacer una copia de seguridad de mis 22 GB y mi creciente base de datos?
Todas las tablas son MyISAM.
Respuestas:
Sí.
Configurar la replicación en una segunda máquina. Cuando necesite hacer una copia de seguridad, puede bloquear la máquina secundaria, realizar mysqlhotcopy o mysqldump y luego desbloquearla. Se pondrá al día con tu maestro, y nunca tendrás que desconectarlo.
Incluso podría hacer esto en la misma máquina, si no le importa duplicar la E / S de escritura, pero idealmente debería hacer una copia de seguridad en tiempo real en un segundo servidor físico, y tomar sus copias de seguridad de instantáneas con la frecuencia que necesite sin molestar a su servidor de producción.
También es teóricamente posible restaurar una base de datos utilizando un estado conocido y binlogs. Nunca lo he hecho, así que por favor investigue primero, pero podría hacer una copia de seguridad de un estado conocido de su base de datos, luego simplemente haga una copia de seguridad de todos los nuevos binlogs y reprodúzcalos si alguna vez necesita restaurar. Dado que los binlogs se escriben linealmente, la sincronización de nuevos binlogs a una computadora remota sería muy rápida.
Editar: de hecho, parece que el uso de binlogs para la copia de seguridad está documentado.
Esta pregunta está altamente relacionada
fuente
Disculpe por suponer que el sistema operativo es Linux. Si no está utilizando LVM, debería estarlo. Si es así, aquí hay una manera muy simple de hacer copias de seguridad a través de una instantánea.
Esto le permitirá realizar copias de seguridad nocturnas sin tener que agregar un servidor esclavo. Estoy muy a favor de tener un servidor esclavo para alta disponibilidad, pero no quiero que pienses que estás atascado hasta que puedas crear ese esclavo.
fuente
LAVAR TABLAS CON READ LOCK no es algo que desee hacer de forma regular (o incluso semi-regular) en un sistema de producción. Debería ser un último recurso solamente.
Configure al menos dos esclavos de replicación (esto requerirá TABLAS DE DESCARGA CON BLOQUEO DE LECTURA, por supuesto). Una vez que están configurados, puede quitar una copia de seguridad de uno mientras el otro permanece sincronizado como maestro de reserva.
Además, si uno de tus esclavos falla, puedes usar una instantánea de eso para reconstruir un segundo (o tercer) esclavo. Si todos tus esclavos fallan, volverás a ENJUAGAR TABLAS CON LECTURA BLOQUEADA.
Recuerde tener siempre un proceso que verifique regularmente que los datos estén sincronizados: use algo como mk-table-checksum para hacer esto (esto no es trivial para configurar, consulte la documentación de Maatkit para más detalles).
Como 22 GB es relativamente pequeño, no tendrá problemas para hacerlo. Hacerlo con una base de datos grande podría ser más problemático.
fuente
La solución aquí es doble, como se describió anteriormente:
Tenga en cuenta que si está usando InnoDB para sus tablas, puede usar el indicador --single-transacción para evitar tener que bloquear cualquier tabla y aún así obtener un volcado constante de la base de datos, incluso en el maestro, y así hacer sus copias de seguridad sin derribando el servidor. La solución anterior, sin embargo, es mejor.
Además, si está utilizando LVM en Linux, puede tomar una instantánea LVM de la partición y luego hacer una copia de seguridad. Las instantáneas de LVM son atómicas, por lo que si hace 'tablas al ras con bloqueo de lectura' y luego toma su instantánea y desbloquea, obtendrá una instantánea consistente.
Si le preocupa que la contención de E / S haga que el volcado demore demasiado, puede agregar una tercera máquina y ejecutar mysqldump en esa red para evitar agotar sus discos.
fuente
Dependiendo de su entorno, las instantáneas suelen ser una excelente manera de hacerlo. Particularmente si tiene que hacer una copia de seguridad del maestro por alguna razón. Ejecutamos pares de maestros y esclavos, y utilizamos copias de seguridad de instantáneas en ambos.
FLUSH TABLES WITH READ LOCK;
UNLOCK TABLES;
Con las tablas InnoDB, querrá ejecutar
SET AUTOCOMMIT=0;
antes de ejecutar el bloqueo de lectura.fuente
Eche un vistazo a " Mejores prácticas para hacer una copia de seguridad de una base de datos MySQL de producción ". Es una publicación similar en Stack Overflow.
fuente
Podrías hacer una copia de seguridad gradual. Copia de seguridad 1/24 de los registros cada hora. El único problema con este enfoque es que si se bloquea durante las primeras horas del día, perderá algo desde ese momento hasta el momento del accidente. De cualquier manera, se pierden menos de 24 horas de registros (no sé lo importante que es para usted).
fuente