ฉันสามารถคัดลอกฐานข้อมูล MySQL โดยคัดลอกไฟล์ได้หรือไม่ ไฟล์อะไรที่มีอะไรกันแน่?


13

ฉันใช้ฐานข้อมูล MySQL และใช้เครื่อง Ubuntu Linux

ฐานข้อมูลของฉันชื่อdb_testผมสังเกตเห็นว่าภายใต้เส้นทาง/var/lib/mysql/db_testที่มีไฟล์ต่อท้ายด้วย.frm, .MYD, .MYIเช่นต่อไปนี้:

/var/lib/mysql/db_test# ls

cars.frm 
cars.MYD 
cars.MYI

customers.frm
customers.MYD
customers.MYI

departments.frm
departments.MYD
departments.MYI

... 

ดูเหมือนว่าแต่ละ.frm, .MYD, .MYIกลุ่มไฟล์แมปพร้อมโต๊ะหนึ่งในฐานข้อมูล

ฉันมีคำถามสองข้อต่อไปนี้ที่จะถาม:

  1. ไฟล์ทั้งสามทำอะไรกันแน่

  2. ถ้าฉันสร้างไดเรกทอรีใหม่ภายใต้เส้นทาง/var/lib/mysql/บอกdb_test_2และคัดลอกทุกไฟล์จากdb_test_1ไดเรกทอรีไปdb_test_2ยังมันจะสร้างฐานข้อมูลใหม่db_test_2ที่มีเนื้อหา (ตาราง) เหมือนกันทุกประการdb_test_1หรือไม่

ไฟล์ฐานข้อมูลทางกายภาพนี้ย้ายการกระทำสร้างผลลัพธ์เดียวกันกับการกระทำบรรทัดคำสั่งต่อไปนี้หรือไม่:

  1. ถ่ายโอนฐานข้อมูลdb_test_1ออก

  2. สร้างฐานข้อมูลใหม่ db_test_2

  3. แล้วดัมพ์db_test_1ฐานข้อมูลกลับสู่ฐานข้อมูลใหม่db_test_2หรือไม่

หากเป็นเช่นนั้นดูเหมือนว่าการย้ายไฟล์จะเร็วกว่ามากเมื่อใช้mysqldumpเพื่อคัดลอกฐานข้อมูล (หรือนำเข้าข้อมูลจากฐานข้อมูลหนึ่งไปยังฐานข้อมูลอื่นใน MySQL) ความคิดเห็นใด ๆ เกี่ยวกับเรื่องนี้?

คำตอบ:


5
  1. AFAIR, .frm เป็นไฟล์คำอธิบาย (อธิบายโครงสร้างของตารางฐานข้อมูล), .MYD เป็นไฟล์ที่มีข้อมูล, .MYI เป็นไฟล์ที่มีดัชนี

  2. ใช่การคัดลอกจะเร็วขึ้นมาก แต่มีปัญหาหนึ่งคือ: มันไม่ใช่อะตอม ภายใต้ไฟล์ที่มีการโหลดสูงจะไม่สอดคล้องกันและอาจเสียหายได้ โดยเฉพาะอย่างยิ่งถ้าคุณใช้เครื่องมือ 'ฉลาด' มากกว่านี้เช่น InnoDB

แก้ไข: ps คุณสามารถคัดลอกไฟล์เหล่านี้ได้อย่างปลอดภัย แต่ก่อนที่คุณจะหยุดเซิร์ฟเวอร์ mysql


4

คุณมีเครื่องมือบรรทัด cmd ที่ทำสิ่งนี้: mysqlhotcopy

มันทำงานได้ดีกับตาราง myisam แต่ไม่ใช่กับตาราง InnoDb

หากคุณได้กำหนดค่าเซิร์ฟเวอร์ของคุณด้วย lvm และใส่ / var / lib / mysql ของคุณไว้ในไดรฟ์ข้อมูลเฉพาะที่นี่เป็นวิธีที่ฉันแนะนำให้สำรองข้อมูลอย่างรวดเร็วและไม่ปิดกั้นฐานข้อมูลทั้งหมดของคุณ:

mysql -U root -p
  > flush tables with read lock;

สิ่งนี้จะล้างตารางทั้งหมดของคุณไปยังดิสก์และบล็อกการดำเนินการ r / w ใด ๆ

  > system "lvcreate -s -L 1G -n lvMysql_snap /dev/vg_myserver/lv_mysql" ;

จำเป็นต้องปรับให้เข้ากับการกำหนดค่าของคุณซึ่งจะสร้างภาพรวมของระบบไฟล์ของฐานข้อมูลของคุณ มันใช้เวลาไม่นาน

  > unlock tables;

เสร็จสิ้นแล้วการดำเนินการ R / W จะกลับมาทำงานต่อ

ตอนนี้คุณสามารถเมานต์ / dev / vg_myserver / lvMysql_snap และสร้างไฟล์เก็บถาวร tar ของฐานข้อมูลของคุณ!


ดูเหมือนว่าจะเป็นวิธีที่รวดเร็วในการสำรองฐานข้อมูล แต่สิ่งที่เกี่ยวกับการเปลี่ยนภาพรวมนั้นจึงกลายเป็นฐานข้อมูลสดของฉันอีกครั้ง นั่นเป็นส่วนที่ฉันกังวลจริงๆ ฉันสามารถmysqldumpdb ของฉันในไม่เกิน 2 วินาที กู้คืนมันเป็นส่วนที่ช้าใช้เวลา 5-10 นาที
Buttle Butkus

ใน distros lvm snapshots ล่าสุดสามารถเปลี่ยนกลับเป็นจุดเริ่มต้นได้ แต่อาจไม่ใช่สิ่งที่คุณต้องการสำหรับการจัดการการสำรองฐานข้อมูล
Olivier S

เกี่ยวกับ mysqlhotcopy: "ยูทิลิตีนี้เลิกใช้งานใน MySQL 5.6.20 และถูกลบใน MySQL 5.7" จาก: [ dev.mysql.com/doc/refman/5.6/th/mysqlhotcopy.html]
zeusstl

0

สิ่งนี้จะใช้ได้กับ MyISAM แต่ไม่ใช่สำหรับ InnoDB ดูhttps://serverfault.com/a/367321/57569

จากคำตอบนั้นเกี่ยวกับ InnoDB:

หากคุณกำลังคิดที่จะคัดลอกไฟล์. frm และ. ibd คุณจะเข้าสู่โลกแห่งความเจ็บปวด การคัดลอกไฟล์. frm และ. ibd ของตาราง InnoDB จะทำได้ก็ต่อเมื่อคุณสามารถรับประกันได้ว่า tablespace id ของไฟล์. ibd ตรงกับรายการ tablespace id ใน metdata ของไฟล์ ibdata1 ทุกประการ

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