ดึงตารางเดียวออกจาก MySQL dump

คุณมี dump ขนาด 7 GB ที่มี 127 ตาราง แต่ในเครื่องคุณต้องการแค่สามตาราง — users, orders, products นี่คือเหตุผลที่กลเม็ด sed/grep ทั่วไปพัง และวิธีดึงเฉพาะตารางที่คุณต้องการ (พร้อม foreign key ของมัน) ในไม่กี่คลิก

ไม่ใช่ทุกงานที่ต้องการฐานข้อมูลทั้งหมด เวลาสร้างฟีเจอร์ในเครื่อง คุณไม่ค่อยอยากให้ dump ของ production เต็มก้อนมาเติมเต็มดิสก์และใช้เวลานำเข้าเป็นชั่วโมง คุณต้องการแค่ไม่กี่ตารางที่ฟีเจอร์นั้นแตะต้องจริงๆ

เช่นเดียวกันเมื่อคุณกำลัง ดีบักตารางเดียว การจำลองปัญหาข้อมูลใน orders ไม่ต้องใช้ตารางอีก 126 ตาราง หรือเวลาทำ การย้ายบางส่วน (partial migration) ที่มีเพียงไม่กี่ตารางย้ายไปยังบริการใหม่ ในทุกกรณีคำถามเหมือนกัน: ฉันจะดึง เฉพาะตารางเหล่านี้ ออกจาก dump ก้อนยักษ์ได้อย่างสะอาดและรวดเร็วได้อย่างไร?

วิธี sed/grep และเหตุผลที่มันพัง

คำตอบคลาสสิกคือหั่นไฟล์ด้วย sed ระหว่างส่วนหัว (section header) ที่ mysqldump เขียนไว้สำหรับแต่ละตาราง:

# ดึงตาราง users ออกจากไฟล์ mysqldump
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql

มันดูฉลาด และบน dump เล็กๆ ที่เรียบร้อยมันอาจใช้ได้สักครั้ง แต่บนไฟล์ 7 GB ของจริง มันพังลงในหลายจุดที่แนบเนียน:

คุณลงเอยด้วยการซ้อน awk ทับ grep ทับ sed ทดสอบกับชุดข้อมูลย่อย แล้วก็ยังไม่กล้าเชื่อผลลัพธ์อยู่ดี มันมีวิธีที่ดีกว่า

ดึงตารางด้วย DumpCleaner

DumpCleaner parse dump อย่างถูกต้อง มันเข้าใจขอบเขตของคำสั่ง, INSERT แบบหลายบรรทัด, backtick และคอมเมนต์ มันจึงตัดที่บรรทัดถูกต้องเสมอ การดึงตารางที่คุณต้องการใช้เพียงสี่ขั้นตอน:

  1. ลาก .sql dump ของคุณเข้าไป DumpCleaner สตรีมไฟล์ dump ขนาด 7 GB จึงเปิดด้วยหน่วยความจำคงที่ แทนที่จะโหลดทั้งก้อน
  2. อ่านรายการตารางที่ตรวจจับอัตโนมัติ ทุกตารางถูก parse ออกมาและแสดงพร้อมจำนวนแถวและขนาด ไม่ต้องเลื่อนผ่านหลายล้านบรรทัดเพื่อหาว่ามีอะไรอยู่
  3. เลือกตารางที่คุณต้องการ ติ๊ก users, orders และ products หรือพิมพ์รูปแบบ regex / รูปแบบยกเว้น เช่น *_logs เพื่อตัดทั้งกลุ่มในครั้งเดียว
  4. รวมตารางแม่ของ foreign key แล้วส่งออก เลือกดึงตารางแม่ที่ถูกอ้างอิงเข้ามาอัตโนมัติได้ตามต้องการ แล้วส่งออกไฟล์ที่สะอาดและนำเข้าได้

มีหลายอย่างที่ทำให้เรื่องนี้ยุ่งยากน้อยกว่าเครื่องมือ shell มาก:

เฉพาะตารางที่คุณต้องการ ไม่มีอย่างอื่น

DumpCleaner ดึงตารางที่ต้องการออกจาก dump ทุกขนาด แบบสตรีมมิ่ง ด้วยหน่วยความจำคงที่ และแก้ไข foreign key ให้คุณ แอปเนทีฟสำหรับ macOS & iPadOS ซื้อครั้งเดียวจบ

ดาวน์โหลดบน App Store

คำถามที่พบบ่อย

ฉันดึงหลายตารางพร้อมกันได้ไหม?

ได้ ติ๊กตารางกี่ตารางก็ได้ตามต้องการ — users, orders และ products พร้อมกัน — แล้ว DumpCleaner จะเขียนทั้งหมดลงในไฟล์เดียวในรอบเดียว

มันคงการพึ่งพา foreign key ไว้หรือไม่?

ได้ถ้าเลือก เปิด รวมการพึ่งพา foreign key แล้วตารางแม่ใดๆ ที่ถูกอ้างอิงโดยสิ่งที่คุณเลือกจะถูกดึงเข้ามาอัตโนมัติ สิ่งที่ดึงออกมาจึงนำเข้าได้โดยไม่มีข้อผิดพลาด constraint

ฉันยกเว้นตารางตามรูปแบบได้ไหม?

ได้ ใช้รูปแบบยกเว้น เช่น *_logs หรือ *_sessions หรือ regular expression เพื่อตัดตารางทั้งกลุ่ม แทนที่จะเอาติ๊กออกทีละตาราง

มันใช้กับ PostgreSQL ได้ไหม?

ได้ DumpCleaner อ่าน dump ของ MySQL, MariaDB และ PostgreSQL (pg_dump) และจัดการชื่อที่ระบุ schema อย่าง public.users เมื่อดึงตาราง

เลิกต่อสู้กับ sed และ grep

ลาก เลือกตารางของคุณ ส่งออก DumpCleaner ดึงเฉพาะตารางที่คุณต้องการ — พร้อม foreign key ของมัน — ออกจาก dump ใดก็ได้

ดาวน์โหลดบน App Store