Якщо ви трохи пригодний, ви можете взяти справи в свої руки, виконуючи НАЗАДУ ТАБЛИЦЮ на етапах, які ви можете бачити. Припустимо, таблиця, яку ви хочете змінити, називається 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 може бути виконаний у майстер або будь-де інше
Спробувати !!!