Если вы немного любите приключения, вы можете взять дело в свои руки, выполнив ALTER TABLE поэтапно, как вы можете видеть. Предположим, таблица, которую вы хотите изменить, называется WorkingTable. Вы можете выполнить изменения поэтапно:
#
# 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;
Вы можете выполнить это на всех рабов. Как насчет мастера ??? Как вы мешаете этому реплицироваться на рабов. Просто: не отправляйте SQL в двоичные журналы мастера. Просто отключите бинарное ведение журнала в сеансе, прежде чем выполнять функцию 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;
Но ждать !!! Как насчет любых новых данных, которые появляются при обработке этих команд ??? Переименование таблицы в начале операции должно помочь. Давайте немного изменим этот код, чтобы не вводить новые данные в этом отношении:
#
# 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;
- Сценарий 1 может быть выполнен на любом ведомом устройстве, у которого не включены двоичные журналы
- Сценарий 2 может быть выполнен на любом подчиненном устройстве, для которого включены двоичные журналы
- Сценарий 3 может быть выполнен на мастере или в любом другом месте
Попробуйте!