นี่คือสาเหตุที่ MySQL ไม่สามารถมองเห็นไฟล์เหล่านั้น: tablespace ระบบ (ibdata1) มีพจนานุกรมข้อมูลเฉพาะเครื่องมือจัดเก็บข้อมูลที่ช่วยให้ InnoDB แมปการใช้งานตารางที่เป็นไปได้:
การย้ายตาราง InnoDB จากที่หนึ่งไปอีกที่หนึ่งต้องใช้คำสั่งเช่น
ALTER TABLE tblname DISCARD TABLESPACE;
ALTER TABLE tblname IMPORT TABLESPACE;
นี่เป็นส่วนหนึ่งของMySQL 5.5 เอกสารอธิบายสิ่งที่ต้องพิจารณา
ข้อควรพิจารณาในการพกพาสำหรับไฟล์. ibd
คุณไม่สามารถย้ายไฟล์. ibd ระหว่างไดเรกทอรีฐานข้อมูลได้อย่างอิสระเท่าที่จะทำได้ด้วยไฟล์ตาราง MyISAM คำจำกัดความของตารางที่จัดเก็บในพื้นที่ตารางที่ใช้ร่วมกันของ InnoDB มีชื่อฐานข้อมูล ID ธุรกรรมและหมายเลขลำดับการบันทึกที่เก็บในไฟล์ tablespace จะแตกต่างกันระหว่างฐานข้อมูล
หากต้องการย้ายไฟล์. ibd และตารางที่เกี่ยวข้องจากฐานข้อมูลหนึ่งไปยังอีกฐานข้อมูลให้ใช้คำสั่ง RENAME TABLE:
เปลี่ยนชื่อตาราง db1.tbl_name เป็น db2.tbl_name; หากคุณมีการสำรองข้อมูล“ สะอาด” ของไฟล์. ibd คุณสามารถกู้คืนไฟล์นั้นไปยังการติดตั้ง MySQL ซึ่งมีต้นกำเนิดดังนี้:
ตารางจะต้องไม่ถูกดร็อปหรือถูกตัดทิ้งเนื่องจากคุณคัดลอกไฟล์. ibd เนื่องจากการทำเช่นนั้นจะเปลี่ยน ID ตารางที่จัดเก็บไว้ใน tablespace
ออกคำสั่ง ALTER TABLE นี้เพื่อลบไฟล์. ibd ปัจจุบัน:
แก้ไขตาราง tbl_name TABLESPACE DISCARD; คัดลอกไฟล์. ibd สำรองไปยังไดเรกทอรีฐานข้อมูลที่เหมาะสม
ออกคำสั่ง ALTER TABLE นี้เพื่อบอกให้ InnoDB ใช้ไฟล์. ibd ใหม่สำหรับตาราง:
แก้ไขตาราง tbl_name นำเข้า TABLESPACE; ในบริบทนี้การสำรองข้อมูลไฟล์“ clean” .ibd เป็นสิ่งที่ตรงตามข้อกำหนดต่อไปนี้:
ไม่มีการแก้ไขที่ไม่มีข้อผูกมัดโดยธุรกรรมในไฟล์. ibd
ไม่มีรายการบัฟเฟอร์การแทรกที่ไม่ได้ถูกตัดทิ้งในไฟล์. ibd
Purge ได้ลบระเบียนดัชนีที่ทำเครื่องหมายการลบทั้งหมดออกจากไฟล์. ibd
mysqld ได้ล้างหน้าแก้ไขทั้งหมดของไฟล์. ibd จากบัฟเฟอร์พูลไปยังไฟล์
ให้คำเตือนและโปรโตคอลเหล่านี้นี่คือแนวทางปฏิบัติที่แนะนำ
สำหรับตัวอย่างนี้ลองกู้คืนtags
ตารางไปยังmydb
ฐานข้อมูล
ขั้นตอนที่ 1
ตรวจสอบให้แน่ใจว่าคุณมีข้อมูลสำรองของไฟล์.frm
และ.ibd
ไฟล์เหล่านั้น/tmp/innodb_data
ขั้นตอนที่ 2
ได้รับคำสั่งและดำเนินการเป็นCREATE TABLE tags
CREATE TABLE mydb.tags ...
ตรวจสอบให้แน่ใจว่ามันเป็นโครงสร้างเดียวกับของจริงtags.frm
ขั้นตอนที่ 3
ลบค่าว่างtags.ibd
โดยใช้ MySQL
ALTER TABLE mydb.tags DISCARD TABLESPACE;
ขั้นตอนที่ # 4
นำสำเนาสำรองของ tags.ibd
cd /var/lib/mysql/mydb
cp /tmp/innodb_data.tags.ibd .
chown mysql:mysql tags.ibd
ขั้นตอนที่ # 5
เพิ่มtags
ตารางลงในพจนานุกรมข้อมูล InnoDB
ALTER TABLE mydb.tags IMPORT TABLESPACE;
ขั้นตอนที่ 6
ทดสอบการเข้าถึงของตาราง
SHOW CREATE TABLE mydb.tags\G
SELECT * FROM mydb.tags LIMIT 10;
หากคุณได้รับผลลัพธ์ปกติขอแสดงความยินดีที่คุณนำเข้าตาราง InnoDB
ขั้นตอนที่ 7
ในอนาคตโปรดอย่าลบ ibdata1 และบันทึกของมัน
ให้มันลอง !!!
ก่อนหน้านี้ฉันเคยพูดถึงเรื่องนี้
ข้อแม้
เกิดอะไรขึ้นถ้าคุณไม่ทราบว่าโครงสร้างของตารางของtags
?
มีเครื่องมือสำหรับรับคำสั่ง CREATE TABLE เพียงแค่ใช้.frm
ไฟล์ ฉันเขียนโพสต์เกี่ยวกับเรื่องนี้ด้วย: จะแยกสคีมาจากไฟล์. frm ได้อย่างไร . ในโพสต์นั้นฉันคัดลอกไฟล์. frm ไปยังเครื่อง Windows จากกล่อง Linux เรียกใช้เครื่องมือ Windows และได้รับคำCREATE TABLE
สั่ง