Si eres un poco aventurero, puedes tomar el asunto en tus manos realizando ALTER TABLE en etapas que puedas ver. Supongamos que la tabla que desea cambiar se llama WorkingTable. Puede realizar los cambios en etapas como esta:
#
# Script 1
# Alter table structure of a single column of a large table
#
CREATE TABLE WorkingTableNew LIKE WorkingTable;
ALTER TABLE WorkingTableNew MODIFY BigColumn VARCHAR(50);
INSERT INTO WorkingTableNew SELECT * FROM WorkingTable;
ALTER TABLE WorkingTable RENAME WorkingTableOld;
ALTER TABLE WorkingTableNew RENAME WorkingTable;
DROP TABLE WorkingTableOld;
Puedes realizar esto en todos los esclavos. ¿Qué hay del maestro? ¿Cómo evitas que esto se replique a los esclavos? Simple: no envíe el SQL a los registros binarios del maestro. Simplemente apague el registro binario en la sesión antes de hacer las cosas ALTER TABLE:
#
# Script 2
# Alter table structure of a single column of a large table
# while preventing it from replicating to slaves
#
SET SQL_LOG_BIN = 0;
CREATE TABLE WorkingTableNew LIKE WorkingTable;
ALTER TABLE WorkingTableNew MODIFY BigColumn VARCHAR(50);
INSERT INTO WorkingTableNew SELECT SQL_NO_CACHE * FROM WorkingTable;
ALTER TABLE WorkingTable RENAME WorkingTableOld;
ALTER TABLE WorkingTableNew RENAME WorkingTable;
DROP TABLE WorkingTableOld;
Pero espera !!! ¿Qué pasa con los datos nuevos que ingresan al procesar estos comandos? Cambiar el nombre de la tabla al comienzo de la operación debería ser el truco. Dejemos alterar un poco este código para evitar ingresar datos nuevos a ese respecto:
#
# Script 3
# Alter table structure of a single column of a large table
# while preventing it from replicating to slaves
# and preventing new data from entering into the old table
#
SET SQL_LOG_BIN = 0;
ALTER TABLE WorkingTable RENAME WorkingTableOld;
CREATE TABLE WorkingTableNew LIKE WorkingTableOld;
ALTER TABLE WorkingTableNew MODIFY BigColumn VARCHAR(50);
INSERT INTO WorkingTableNew SELECT SQL_NO_CACHE * FROM WorkingTableOld;
ALTER TABLE WorkingTableNew RENAME WorkingTable;
DROP TABLE WorkingTableOld;
- El script 1 se puede ejecutar en cualquier esclavo que no tenga registros binarios habilitados
- El script 2 puede ejecutarse en cualquier esclavo que tenga registros binarios habilitados
- Script 3 puede ejecutarse en un maestro o en cualquier otro lugar
Darle una oportunidad !!!