คุณจะได้พบกับการตกตะลึงนี้ แต่คุณต้องการเพียงหนึ่งตัวเลือกที่สำคัญ: --opt
--optคืออะไร
ตัวเลือกนี้จะเปิดใช้งานโดยค่าเริ่มต้นคือชวเลขสำหรับการรวมกันของ--add วางตาราง --add ล็อค --create ตัวเลือก --disable คีย์ --extended แทรก --lock ตาราง --quick - ตั้ง มันให้การถ่ายโอนข้อมูลที่รวดเร็วและสร้างไฟล์ดัมพ์ที่สามารถโหลดซ้ำลงในเซิร์ฟเวอร์ MySQL ได้อย่างรวดเร็ว
เนื่องจากตัวเลือก - --opt ถูกเปิดใช้งานโดยค่าเริ่มต้นคุณจะระบุเฉพาะการสนทนา --skip-opt เพื่อปิดการตั้งค่าเริ่มต้นหลายรายการ ดูการอภิปรายของกลุ่มตัวเลือก mysqldump สำหรับข้อมูลเกี่ยวกับการเลือกเปิดใช้งานหรือปิดการใช้งานชุดย่อยของตัวเลือกที่ได้รับผลกระทบจาก --opt
ตั้งแต่--optถูกเปิดใช้งานแล้วคุณจะไม่จำเป็นต้องระบุ--opt อย่างไรก็ตามคุณอาจต้องการตัวเลือกที่จำเป็นบางอย่างซึ่งไม่รวมอยู่ด้วย
เรียกใช้แบบสอบถามนี้บนฐานข้อมูลของคุณ
SELECT engine,COUNT(1) TableCount
FROM information_schema.tables
WHERE engine IN ('InnoDB','MyISAM')
AND table_schema NOT IN ('information_schema','mysql','performance_schema')
GROUP BY engine;
ถ้าคุณมีตาราง InnoDB ทั้งหมดแล้วคุณจะต้องระบุ--single ธุรกรรม สิ่งนี้จะปิดใช้งานโดยอัตโนมัติ- ล็อคตารางและอนุญาตให้คุณถ่ายโอนข้อมูลตารางทั้งหมดในเวลาเดียวกันและอนุญาตให้เขียนใหม่ได้ในเวลาเดียวกัน
ถ้าคุณมีหนึ่งหรือมากกว่าหนึ่งตาราง MyISAM แล้วคุณจะต้องระบุ--lock ทุกตาราง- สิ่งนี้จะปิดใช้งานโดยอัตโนมัติ- ล็อคตารางปิดใช้งาน- ธุรกรรมเดี่ยวล็อกตารางทั้งหมดในฐานข้อมูลทั้งหมดจากนั้นสร้างการถ่ายโอนข้อมูล การเขียนลงในตาราง InnoDB ยังคงเกิดขึ้นได้ แต่จะมีการรอคิวจนกว่าจะมีการปลดล็อค การเชื่อมต่อฐานข้อมูลใด ๆ ที่พยายามเขียนไปยังตาราง MyISAM ใด ๆ จะถูกระงับจริง ๆ จนกว่าจะมีการปลดล็อคทั้งหมด
เรียกใช้แบบสอบถามนี้: SELECT COUNT(1) Number_Of_Stored_Procedures FROM mysql.proc;
หากNumber_Of_Stored_Procedures
มีค่ามากกว่าศูนย์ใช้--routines
เรียกใช้แบบสอบถามนี้: SELECT COUNT(1) Number_Of_Triggers FROM information_schema.triggers;
หากNumber_Of_Triggers
มีค่ามากกว่าศูนย์ใช้--triggers
ถ้ำ : โปรดอย่าใช้- จัดลำดับตามหลักสำหรับการถ่ายโอนฐานข้อมูลทั้งหมดเนื่องจากอาจทำให้ดัชนี BTREE ค่อนข้างจะค่อนข้างรีโหลด - ลำดับโดยหลักควรใช้เฉพาะเมื่อทิ้งตารางแต่ละตัวที่คุณรู้ว่ามีคีย์หลักจำนวนเต็มและจะมีช่วงสแกนจำนวนมากจากใบสมัครของคุณ
หากคุณต้องการการสำรองข้อมูล mysqldump ประเภทอื่น ๆ ให้ดูที่โพสต์เก่าของฉันฉันจะเพิ่มประสิทธิภาพ mysqldump ของฐานข้อมูลขนาดใหญ่ได้อย่างไร .
โปรดอ่านทุกตัวเลือกสำหรับ mysqldump
อัปเดต 2014-12-29 09:44 EST
ฉันได้อัปเดตคำสั่ง mysqldump ของฉัน (โปรดดูการแก้ไขของฉัน) ฉันมีคำถามสุดท้ายว่า คุณคิดว่ามันจะคุ้มค่าหากใช้อาร์กิวเมนต์ต่อไปนี้ทั้งหมดหรือไม่ - เพิ่ม - ลด - ฐานข้อมูล \ - เพิ่ม - ลดลงตาราง \ - สมบูรณ์แทรก - - ล่าช้าแทรก - - tz-utc
ดูความคิดเห็นของคุณและการแก้ไขล่าสุดของคุณลองมาดูตัวเลือกเหล่านี้แล้วดูว่าคุณต้องการอะไรบ้าง
- - ตัวเลือก : ฉันได้กล่าวไปแล้วว่าคุณไม่จำเป็นต้องระบุเพราะเปิดใช้งานตามค่าเริ่มต้น
- - ล่าช้าแทรก : ฉันยืนกรานอยู่ห่างจากนี้ด้วยฐานข้อมูล InnoDB ทั้งหมด จริงๆแล้วฉันอยู่ห่างจากระยะเวลานี้ !!! . ตั้งแต่ 1) เป็นไปได้ที่ INSERT DELAYED จะสูญเสียข้อมูล 2) มันถูกแปลงเป็น INSERT สำหรับ MySQL Replication slaves, 3) มีรายงานบั๊กเปิดเกี่ยวกับการใช้กับทริกเกอร์ย้อนกลับใน MySQL 5.6 และไม่ถือว่าเป็นข้อผิดพลาด 4 ) เลิกใช้แล้วใน MySQL 5.6 และ 5) Morgan Tocker (รู้จักกันดีในนามของกูรู MySQL) เห็นว่ามีการคัดค้านย้อนกลับไปในปี 2555คุณควรลืมตัวเลือกนี้ ไม่เคยใช้ (อนันต์) เลย !!!
- --complete แทรก : นี้จะใช้แทน
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
INSERT INTO tblname VALUES ...
สิ่งนี้สามารถขยาย mysqldump หากมีคอลัมน์จำนวนมากในคำจำกัดความของตารางและหลายแถวในตาราง อย่าใช้มัน
- - เพิ่มตารางลดลง : เนื่องจาก--optเปิดใช้งานสำหรับคุณคุณไม่จำเป็นต้องระบุ
- - เพิ่มฐานข้อมูลหล่น : ถ้าคุณวาง- เพิ่มฐานข้อมูลมันเพียงทำให้
DROP TABLE IF EXISTS
(ซึ่งถูกเพิ่มโดย-เพิ่มตารางลดลง ) ไปเร็วขึ้น ไม่ได้ใช้เพียงแค่ช่วยให้DROP TABLE IF EXISTS
เกิดขึ้นสำหรับแต่ละตาราง ดังนั้นการใช้--add-drop-databaseเป็นเรื่องของการเลือกส่วนบุคคล
- --tz-UTC : ถ้าคุณวางแผนที่จะเรียกคืนข้อมูลไปยังเซิร์ฟเวอร์เดียวกับที่คุณสำรองข้อมูลจากคุณไม่จำเป็นต้อง--tz-UTC หากคุณกู้คืนข้อมูลไปยังศูนย์ข้อมูลอื่นในเขตเวลาที่แตกต่างและ ...
- ถ้าคุณต้องการที่จะให้เขตเวลาเดียวกับที่คุณสำรองข้อมูลจากคุณไม่จำเป็นต้อง--tz-UTC
- ถ้าคุณต้องการข้อมูลที่จะใช้เขตเวลาของศูนย์ข้อมูลใหม่คุณต้อง--tz-UTC
- ตัวอย่าง: สมมติว่าคุณสำรองฐานข้อมูลในนิวยอร์ก นั่นคือ EST หากคุณมีศูนย์ข้อมูลอื่นในซีแอตเทิลนั่นคือ PST หากคุณต้องการสำรองนิวยอร์กจะได้รับการบูรณะในซีแอตเติและคุณต้องการ timestamps ในฐานข้อมูลที่จะยังคงเป็นตัวแทนของ New York, คุณไม่ต้องการที่จะใช้--tz-UTC
- --default-ตัวตั้ง
- หากคุณกำลังกู้คืนการถ่ายโอนข้อมูลไปยังเซิร์ฟเวอร์เดียวกันคุณไม่จำเป็นต้อง--default-ตัวตั้ง
- หากคุณมีฐานข้อมูล InnoDB ทั้งหมดคุณไม่จำเป็นต้อง--default-character-set
- เนื่องจาก utf8 เป็นค่าเริ่มต้นคุณไม่จำเป็นต้อง--default-character-set
ปรับการแก้ไขล่าสุดของคุณนี่คือสิ่งที่คุณต้องการโดยเฉพาะ
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
> dump/test.sql
อีกครั้งผมบอกว่าโปรดอ่านทุกตัวเลือกสำหรับ mysqldump