ฉันเป็นนักพัฒนา PHP ดังนั้นอย่าเข้มงวด ฉันมีตารางขนาดใหญ่ ~ 5.5gb dump PM ของเราตัดสินใจที่จะสร้างคอลัมน์ใหม่เพื่อดำเนินการคุณสมบัติใหม่ ตารางคือ InnoDB ดังนั้นสิ่งที่ฉันลอง:
เปลี่ยนตารางในหน้าจอพร้อมล็อคตาราง เอา ~ 30 ชั่วโมงและไม่มีอะไร ดังนั้นฉันแค่หยุดมัน ครั้งแรกที่ฉันทำผิดเพราะฉันไม่ได้จบการทำธุรกรรมทั้งหมด แต่ครั้งที่ 2 ไม่มีมัลติเลค
copy to tmp table
สถานะเป็นเนื่องจากฉันต้องใช้การแบ่งพาร์ติชันสำหรับตารางนี้เราจึงตัดสินใจทำการดัมพ์เปลี่ยนชื่อและสร้างตารางด้วยชื่อเดียวกันและโครงสร้างใหม่ แต่การถ่ายโอนข้อมูลกำลังทำสำเนาอย่างเข้มงวด (อย่างน้อยฉันก็ไม่พบสิ่งอื่นใด) ดังนั้นฉันจึงเพิ่มการถ่ายโอนข้อมูลคอลัมน์ใหม่ด้วย
sed
และสอบถาม แต่มีข้อผิดพลาดแปลก ๆ เกิดขึ้น ฉันเชื่อว่ามันเกิดจากชุดอักขระ ตารางในไฟล์ UTF-8 และกลายเป็น ASCIIsed
สหรัฐอเมริกาหลังจากที่ ดังนั้นฉันจึงได้รับข้อผิดพลาด (ไม่ทราบคำสั่ง '\' ') จากข้อมูล 30% ดังนั้นนี่เป็นวิธีที่ไม่ดี
ตัวเลือกอื่น ๆ ในการทำสิ่งนี้ให้สำเร็จและเพิ่มประสิทธิภาพความเร็ว (ฉันสามารถทำได้ด้วยสคริปต์ PHP แต่จะใช้เวลานาน) สิ่งที่จะเป็นประสิทธิภาพของINSERT SELECT
ในกรณีนี้
ขอบคุณล่วงหน้า
SET NAMES utf8
และCOLLATION
.But Meh idk ทำไม 30%sed
ของข้อมูลที่เสียหายหลังจาก ฉันคิดว่าการโหลดจำนวนมากจะเร็วที่สุด แต่อาจมีบางอย่างที่ฉันขาดหายไป ขอบคุณ Mark