Algunas tablas INNODB en nuestra base de datos de producción están a punto de alcanzar el límite INT AUTO_INCREMENT de 2147483647 y necesitamos modificarlas a BIGINT, de lo contrario las escrituras comenzarán a fallar.
Las tablas están en una base de datos MySQL 5.6.19a de producción que se ejecuta en Amazon RDS.
¿Cómo podemos hacer un ALTER como este sin interrumpir las lecturas e inserciones de producción que están sucediendo todo el tiempo?
ALTER TABLE MYTABLECHANGE id idBIGINT NOT NULL AUTO_INCREMENT;
Aquí está DDL para la tabla:
CREATE TABLE `MYTABLE` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`siteId` int(11) NOT NULL,
`filter` varchar(10) NOT NULL DEFAULT 'ALL',
`date` varchar(10) NOT NULL,
`cards` varchar(250) NOT NULL,
`apples` varchar(45) NOT NULL,
`carrots` varchar(45) NOT NULL,
`corn` varchar(45) NOT NULL,
`peas` varchar(45) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique` (`siteId`,`filter`,`date`,`cards`),
KEY `date_k` (`date`),
KEY `cards_k` (`cards`),
KEY `apples_k` (`apples`),
KEY `siteId_k` (`siteId`)
) ENGINE=InnoDB AUTO_INCREMENT=1748961482 DEFAULT CHARSET=utf8

Percona Toolkit es el camino a seguir, al menos si no es muy corto en el tiempo. La conversión se hizo cargo de nuestra mesa (500 Gb, configuración maestro-esclavo) cuando la probamos un poco más de 24 horas, en producción tardó (con un mejor hardware) casi 1 mes (nota al margen curiosa que teníamos unos 30 días antes de que nos quedáramos sin ID, por lo tanto, ya comenzamos a planificar los planes B y C, trabajando con copias de seguridad fuera de línea, eliminando esclavos, ...). El retraso se debió principalmente a la espera de que la replicación ocurriera hacia los esclavos (permitimos un retraso máximo de 50 segundos). También asegúrese de limitar el número de hilos concurrentes. Tenemos más de 2 millones de inserciones / día y muchos millones de lecturas.
También tenga en cuenta que una vez que la cobertura ha comenzado, no puede detenerla (o al menos no encontramos ninguna forma de reiniciarla) :-(
fuente
Bien....
KEY TOP_QUERIES_LAST_30DAYS_fk (siteId)es redundante con la CLAVE PRIMARIA, por lo que es mejor que la DEJE caer.INT UNSIGNED te llevaría a 4 mil millones, ¿será suficiente?
Considere cambiar
filtera unENUM.¿Tienes 1,75 mil millones de filas? ¿O "quemaste" muchos identificadores? Si es así, ¿tal vez podamos arreglar eso? Por ejemplo
REPLACEy ciertos sabores deINSERTarrojarán identificadores.INSERT...ON DUPLICATE KEYPor lo general, puede reemplazarREPLACE. Un proceso de 2 pasos puede evitarINSERT IGNOREla quema de identificadores.De vuelta a la pregunta ...
Vea si pt-online-schema-change hará el truco: http://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html
fuente