mysqldump vs mysqlpump


17

ฉันเพิ่งได้ยินเกี่ยวกับmysqlpump - ดูเหมือนว่ามันจะวางจำหน่ายกับ MySQL 5.7 แต่ MySQL 5.7 ยังคงมีmysqldumpอยู่ ทั้งคู่เป็นโปรแกรมสำรองข้อมูล แต่ทุกคนสามารถสรุปความแตกต่างหลักได้หรือไม่ มีสถานการณ์ที่หนึ่งในนั้นอาจทำงานได้ดีขึ้นหรือไม่ mysqldump กำลังจะถูกยกเลิกสำหรับ mysqlpump หรือไม่?


นั่นหมายถึงการตั้งชื่อเครื่องมือสองอย่างที่คล้ายกันเกือบเหมือนกัน
Erik

@Erik ดูเหมือนว่าเป็น " p arallel d ump " และสามารถปั๊มข้อมูลได้เร็วขึ้น .. แต่อย่างอื่นฉันเห็นด้วย
jkavalik

1
นอกจากนี้คุณยังอาจจะสนใจในMyDumper ดูเหมือนว่า mysqlpump ได้นำความคิดมาสองสามข้อ - ไม่ใช่เรื่องเลวร้ายเนื่องจากโครงการไม่ได้ย้ายมานานกว่าหนึ่งปี :-(
Vérace

ฉันสนใจที่จะดูการทดสอบประสิทธิภาพ!
Ryan Foley

XtradbBackup เป็นคู่แข่งรายสำคัญอีกราย
Rick James

คำตอบ:


16

เนื่องจากฉันได้ทำการค้นคว้าด้วยตัวเองนี่เป็นบทสรุปของสิ่งที่ฉันพบ

จากการโพสต์บล็อกในปี 2015 จากทีมงาน MySQL devข้อได้เปรียบหลักของ mysqlpump คือสามารถใช้หลายเธรดพร้อมกันเพื่อเพิ่มความเร็วในการทุ่มตลาดและไม่แชร์ข้อกำหนดด้านความเข้ากันได้ย้อนหลังของ mysqldump ซึ่งควรเปิดประตูต่อไป การปรับปรุง

อย่างไรก็ตามโพสต์เตือนว่า mysqlpump นั้น "ในปัจจุบันไม่ปลอดภัยเหมือนการสำรองข้อมูลโดยมีจุดประสงค์ทั่วไป" เพราะแต่ละกระทู้อาจสร้างส่วนของการถ่ายโอนข้อมูลจากสถานะต่างๆของฐานข้อมูล ไม่ได้พูดถึงแผนการที่จะเลิกใช้ mysqldump

จูเซปเป้แมกเซียเล่นกับ mysqlpump ในปี 2558และพบว่าการทุ่มตลาดเร็วขึ้นเล็กน้อย เขาชื่นชมความสามารถใหม่ในการเลือกวัตถุที่จะถ่ายโอนข้อมูลอย่างแม่นยำ แต่ตั้งข้อสังเกตว่าการโหลดการถ่ายโอนข้อมูลกลับสามารถทำได้แบบเธรดเดียวเท่านั้นและการถ่ายโอนข้อมูล (ซึ่งแตกต่างจาก mysqldump) สามารถโหลดกลับเข้าไปในฐานข้อมูลที่มีชื่อเดียวกันเท่านั้น


2
คำเตือน: mysqlpumpเป็นซอฟต์แวร์ที่มาปิด (อนาคตไม่แน่นอน) ทางเลือกโอเพนซอร์ซmysqlpumpคือgithub.com/maxbube/mydumper mydumper
Ivanov

12

ฉันได้ค้นหาความแตกต่างระหว่างยูทิลิตีทั้งสองนี้และนอกเหนือจากที่กล่าวไว้ในคำตอบของ @ Neilดูเหมือนว่าmysqlpumpยังมีตัวเลือกน้อยกว่าmysqldumpเช่นไม่อนุญาตสิ่งต่อไปนี้:

  • --compatible=
  • --tabและตัวเลือกที่เกี่ยวข้องของ:
    • --fields-terminated-by=
    • --fields-enclosed-by=
    • --fields-optionally-enclosed-by=
    • --fields-escaped-by=
    • --lines-terminated-by=
  • --quote-names
  • --add-drop-trigger
  • --allow-keywords
  • --apply-slave-statements
  • --comments
  • --compact
  • --compatible
  • --create-options
  • --delete-master-logs
  • --disable-keys
  • --dump-date
  • --dump-slave
  • --enable-cleartext-plugin
  • --flush-logs
  • --flush-privileges
  • --force
  • --ignore-error
  • --include-master-host-port
  • --lock-all-tables
  • --lock-tables
  • --master-data
  • --no-autocommit
  • --no-tablespaces
  • --opt
  • --order-by-primary
  • --pipe
  • --quick
  • --quote-names
  • --set-gtid-purged
  • --shared-memory-base-name
  • --skip-add-drop-table
  • --skip-add-locks
  • --skip-comments
  • --skip-compact
  • --skip-disable-keys
  • --skip-extended-insert
  • --skip-opt
  • --skip-quick
  • --skip-quote-names
  • --skip-triggers
  • --skip-tz-utc
  • --verbose
  • --where
  • --xml

ในทางตรงกันข้ามmysqlpumpมีตัวเลือกต่อไปนี้ที่ไม่สามารถใช้ได้ในmysqldump

  • --compress-output
  • --default-parallelism
  • --defer-table-indexes
  • --exclude-databases=
  • --exclude-events=
  • --exclude-routines=
  • --exclude-triggers=
  • --exclude-users=
  • --include-events=
  • --include-routines=
  • --include-triggers=
  • --include-users=
  • --parallel-schemas=
  • --skip-definer
  • --users
  • --watch-progress

เปลี่ยนชื่อหรือคล้ายกัน:

  • --no-dataในการถ่ายโอนข้อมูล == --skip-dump-rowsในปั๊ม
  • --no-set-namesในดัมพ์ไม่มีอยู่ในปั๊มแต่มีความหมายเหมือนกัน - --skip-set-charset- มีอยู่ในทั้งคู่
  • --ignore-table=ในการถ่ายโอนข้อมูลส่วนใหญ่--exclude-tables=อยู่ในปั๊มยกเว้น--exclude-tablesสามารถระบุตารางทั้งหมดคั่นด้วยเครื่องหมายจุลภาคและอนุญาตให้ใช้อักขระตัวแทน ( %และ_)
  • --tablesin dumpส่วนใหญ่--include-tables=อยู่ในpumpยกเว้น--include-tablesสามารถระบุตารางทั้งหมดคั่นด้วยเครื่องหมายจุลภาคและอนุญาตให้ใช้อักขระตัวแทน ( %และ_) นอกจากนี้ยังมีการ--tablesแทนที่--databasesในการถ่ายโอนข้อมูลในขณะที่--include-tables=ในปั๊มไม่ได้
  • --databasesในดัมพ์และปั๊มส่วนใหญ่--include-databases=อยู่ในปั๊มยกเว้น--include-databasesสามารถระบุฐานข้อมูลทั้งหมดคั่นด้วยเครื่องหมายจุลภาคและอนุญาตให้ใช้อักขระตัวแทน ( %และ_)

3

นี่คือบทสรุปของสิ่งที่ฉันเข้าใจระหว่างเครื่องมือสำรองข้อมูล

คำจำกัดความของ mysqldump ที่ระบุในหน้าคู่มือ

ยูทิลิตี้ไคลเอนต์ mysqldump ทำการสำรองข้อมูลแบบลอจิคัลสร้างชุดคำสั่ง SQL ที่สามารถดำเนินการเพื่อสร้างคำนิยามวัตถุฐานข้อมูลดั้งเดิมและข้อมูลตาราง มันทิ้งฐานข้อมูล MySQL หนึ่งฐานขึ้นไปสำหรับสำรองหรือโอนไปยังเซิร์ฟเวอร์ SQL อื่น คำสั่ง mysqldump ยังสามารถสร้างผลลัพธ์ใน CSV, ข้อความที่คั่นด้วยอื่น ๆ หรือรูปแบบ XML

Mysqldump นั้นใช้งานง่ายมากและไวยากรณ์ก็ง่ายมากเช่นกัน เมื่อเราดำเนินการสิ่งนี้มันจะแปลงแถวทั้งหมดเป็นแบบสอบถาม SQL และพิมพ์ในเอาต์พุตมาตรฐาน เราสามารถเปลี่ยนเส้นทางผลลัพธ์นี้ไปยัง outfile (>) หรือใช้ตัวเลือก - result-file

โดยค่าเริ่มต้น mysqldump จะไม่ถ่ายโอนข้อมูล data_schema และจะไม่ใช้ performance_schema ข้อเสียเปรียบที่สำคัญของ mysqldump คือใช้เพียงเธรดเดียวในขณะที่ทำการสำรองและกู้คืน

Mysqlpump เป็นอีกหนึ่งยูทิลิตี้ที่เปิดตัวใน MySQL 5.7 พร้อมกับคุณสมบัติเพิ่มเติมเล็กน้อยเมื่อเทียบกับ mysqldump

คำจำกัดความของ mysqlpump ที่ระบุในหน้าคู่มือ

ยูทิลิตี้ไคลเอนต์ mysqlpump ทำการสำรองข้อมูลแบบลอจิคัลสร้างชุดคำสั่ง SQL ที่สามารถดำเนินการเพื่อสร้างคำนิยามวัตถุฐานข้อมูลดั้งเดิมและข้อมูลตาราง มันทิ้งฐานข้อมูล MySQL หนึ่งฐานขึ้นไปสำหรับสำรองหรือโอนไปยังเซิร์ฟเวอร์ SQL อื่น

คุณสมบัติที่สำคัญคือ

  • การประมวลผลแบบขนาน (มัลติเธรด) เพื่อเพิ่มความเร็วในการสำรองข้อมูล

  • ตัวบ่งชี้ความคืบหน้า

  • การทุ่มตลาดของบัญชีผู้ใช้เป็น (สร้าง, ให้งบไม่เป็นแทรกสำหรับฐานข้อมูลระบบ MySQL)

โดยค่าเริ่มต้น mysqlpump จะไม่ทำการสำรองข้อมูลของฐานข้อมูลระบบเช่น schema ของข้อมูล, schema ของประสิทธิภาพและบางตารางของระบบของ MySQL เว้นแต่จะกล่าวถึงอย่างชัดเจน

นอกจากนี้ยังมีตัวเลือก –include-database, –exclude-database, –include-table, –exclude-table พร้อมการจับคู่รูปแบบ (%)

ตัวเลือกเหล่านี้สะดวกยิ่งขึ้นสำหรับผู้ใช้ที่ต้องการสำรองข้อมูลวัตถุเพียงไม่กี่ชุดจากชุดข้อมูลทั้งหมด

โดยทั่วไป mysqlpump แบ่งงานเป็นชิ้น ๆ และแต่ละอันจะถูกกำหนดให้กับคิวแบบมัลติเธรด

  • คิวแบบมัลติเธรดนี้ถูกประมวลผลโดยเธรด N (โดยค่าเริ่มต้นจะใช้ 2 เธรด)

  • เราสามารถกำหนดจำนวนเธรดได้โดยใช้ตัวเลือกนี้ - ค่าเริ่มต้น - ขนานและ –parallel-schemas

  • ในขณะที่การคืนค่ามันใช้เธรดเดียวซึ่งเหมือนกับ mysqldump มันขาดการกู้คืนแบบขนาน

ในฐานะที่เป็น add-on เรามีเครื่องมือที่มีประสิทธิภาพมากขึ้น parallelisation ทั้งในการสำรองข้อมูลและการฟื้นฟู (ที่ mysqlpump และ mysqldump ขาด) ซึ่งเรียกว่าmydumper และ myloader สิ่งนี้จะถูกใช้อย่างมากในขณะที่กู้คืนชุดข้อมูลขนาดใหญ่

คุณสามารถค้นหารายละเอียดเพิ่มเติมและตัวเลือกบางประโยชน์ของเครื่องมือเหล่านี้ในบล็อกนี้ mysqldump VS mysqlpump VS mydumper

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.