Tenemos una base de datos MySQL en vivo que es 99% INSERT, alrededor de 100 por segundo. Queremos archivar los datos todos los días para poder ejecutar consultas sobre ellos sin afectar la base de datos principal en vivo. Además, una vez que se complete el archivo, queremos borrar la base de datos en vivo.
¿Cuál es la mejor manera de hacer esto sin (si es posible) bloquear INSERT? Usamos INSERTAR RETRASADO para las consultas.
http://www.maatkit.org/ tiene mk-archiver
archiva o purga filas de una tabla a otra tabla y/o un archivo. Está diseñado para "mordisquear" datos de manera eficiente en fragmentos muy pequeños sin interferir con las consultas críticas de procesamiento de transacciones en línea (OLTP). Lo logra con un plan de consulta sin retroceso que mantiene su lugar en la tabla de consulta en consulta, por lo que cada consulta posterior hace muy poco trabajo para encontrar más filas archivables.
Otra alternativa es simplemente crear una nueva tabla de base de datos cada día. MyIsam tiene algunas ventajas para esto, ya que los INSERTOS hasta el final de la tabla generalmente no se bloquean de todos modos, y hay un tipo de tabla de fusión para volver a unirlos todos. Varios sitios web registran el tráfico httpd en tablas como esa.
Con Mysql 5.1, también hay tablas de partición que pueden hacer lo mismo.
Utilizo tablas de particiones mysql y he logrado resultados maravillosos en todos los aspectos.
Parece que la replicación es la mejor solución para esto. Después de la sincronización inicial, el esclavo recibe actualizaciones a través de Registro binario , por lo que no afecta en absoluto a la base de datos maestra.
La replicación de MySQL funcionaría perfectamente para esto.
Maestro -> el servidor en vivo.
Esclavo -> un servidor diferente en la misma red.
MK-ARCHIVER es una herramienta elegante para archivar datos MYSQL.
¿Podría mantener dos bases de datos duplicadas? Escribe a uno, guarda el segundo como archivo. Cambie cada, digamos, 24 horas (o el tiempo que considere apropiado). En la base de datos que era el archivo, inserte toda la actividad de hoy. Entonces las dos bases de datos deben coincidir. Use esto como el nuevo live db. Tome la base de datos archivada y haga lo que quiera. Puede hacer una copia de seguridad/extraer/leer todo lo que quiera ahora que no se está escribiendo activamente.
Es como tener una incursión en espejo donde puedes desconectar una unidad para hacer una copia de seguridad, volver a sincronizarla y luego sacar la otra unidad para hacer una copia de seguridad.