หากคุณเป็นนักผจญภัยเล็ก ๆ น้อย ๆ คุณสามารถจัดการเรื่องต่างๆด้วยมือโดยทำการแสดง 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 ไปยังบันทึกไบนารีของต้นแบบ เพียงแค่ปิดการบันทึกแบบไบนารีในเซสชั่นก่อนที่จะทำสิ่งที่เปลี่ยนแปลงตาราง:
#
# 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 สามารถดำเนินการกับต้นแบบหรือที่อื่นใดก็ได้
ให้มันลอง !!!