วิธีการเรียกคืนหนึ่งในฐานข้อมูล MySQL ของฉันจาก.myd
, .myi
, .frm
ไฟล์?
วิธีการเรียกคืนหนึ่งในฐานข้อมูล MySQL ของฉันจาก.myd
, .myi
, .frm
ไฟล์?
คำตอบ:
หากนี่คือตาราง MyISAM ให้ทำการเปิดไฟล์. FRR, .MYD และ. MYI ลงในไดเรกทอรีฐานข้อมูล (เช่น/var/lib/mysql/dbname
) จะทำให้ตารางนั้นพร้อมใช้งาน ไม่จำเป็นต้องเป็นฐานข้อมูลเดียวกับที่มาจากเซิร์ฟเวอร์เดียวกันเวอร์ชัน MySQL เดียวกันหรือสถาปัตยกรรมเดียวกัน คุณอาจต้องเปลี่ยนความเป็นเจ้าของสำหรับโฟลเดอร์ (เช่นchown -R mysql:mysql /var/lib/mysql/dbname
)
โปรดทราบว่าสิทธิ์ ( GRANT
, ฯลฯ ) เป็นส่วนหนึ่งของmysql
ฐานข้อมูล ดังนั้นพวกเขาจะไม่ถูกเรียกคืนพร้อมกับตาราง คุณอาจต้องเรียกใช้GRANT
คำสั่งที่เหมาะสมเพื่อสร้างผู้ใช้ให้การเข้าถึง ฯลฯ (การกู้คืนmysql
ฐานข้อมูลเป็นไปได้ แต่คุณต้องระวังเวอร์ชัน MySQL และการรันmysql_upgrade
ยูทิลิตี้ที่จำเป็น)
ที่จริงแล้วคุณอาจต้องการ. FRM (โครงสร้างตาราง) และ. MYD (ข้อมูลตาราง) แต่คุณจะต้องซ่อมแซมตารางเพื่อสร้าง. MIY (ดัชนี) ใหม่
ข้อ จำกัด เพียงอย่างเดียวคือถ้าคุณกำลังปรับลดรุ่นคุณควรตรวจสอบบันทึกประจำรุ่น (และอาจเรียกใช้ตารางซ่อมแซม) เวอร์ชั่น MySQL ที่ใหม่กว่านั้นเพิ่มคุณสมบัติ
[แม้ว่ามันจะชัดเจนถ้าคุณผสมและจับคู่ตารางความสมบูรณ์ของความสัมพันธ์ระหว่างตารางเหล่านั้นเป็นปัญหาของคุณ MySQL จะไม่สนใจ แต่แอปพลิเคชันของคุณและผู้ใช้ของคุณอาจ นอกจากนี้วิธีนี้ใช้ไม่ได้กับตาราง InnoDB ทั้งหมด เฉพาะ MyISAM แต่พิจารณาไฟล์ที่คุณมีคุณมี MyISAM]
check table sometable;
แล้วเรียกใช้การซ่อมแซม (เฉพาะในกรณีจำเป็น): repair table sometable;
โปรดทราบว่าหากคุณต้องการสร้างไฟล์ MYI อีกครั้งการใช้ REPAIR TABLE ที่ถูกต้องคือ:
ซ่อมตาราง USE_FRM ในบางครั้ง;
มิฉะนั้นคุณอาจจะได้รับข้อผิดพลาดอีกครั้ง
ฉันเพิ่งค้นพบวิธีแก้ปัญหาสำหรับเรื่องนี้ ฉันใช้ MySQL 5.1 หรือ 5.6 บน Windows 7
ไม่จำเป็นต้องค้นหาไฟล์. MYI และ. MYD สำหรับการกู้คืนนี้
innodb_force_recovery = 4
ระดับ (ไม่แน่ใจว่าจำเป็นสำหรับกรณีนี้) ขอบคุณพระเจ้า!
ibdata1
คือ InnoDB ไม่ใช่ MyISAM
สิ่งหนึ่งที่ควรทราบ:
ไฟล์. FRM มีโครงสร้างตารางของคุณอยู่และเฉพาะรุ่น MySQL ของคุณ
ไฟล์. MYD ไม่ได้เฉพาะเจาะจงกับเวอร์ชั่นอย่างน้อยก็ไม่ใช่เวอร์ชั่นรอง
ไฟล์. MYI นั้นมีความเฉพาะเจาะจง แต่สามารถปล่อยออกมาและสร้างใหม่ได้REPAIR TABLE
เหมือนคำตอบอื่น ๆ ที่พูด
จุดประสงค์ของคำตอบนี้คือให้คุณรู้ว่าหากคุณมี schema dump ของตารางของคุณคุณสามารถใช้มันเพื่อสร้างโครงสร้างของตารางจากนั้นแทนที่ไฟล์. MYD เหล่านั้นด้วยการสำรองข้อมูลของคุณลบไฟล์ MYI และซ่อมแซม ทั้งหมด. วิธีนี้คุณสามารถเรียกคืนการสำรองข้อมูลของคุณไปยัง MySQL mysqldump
รุ่นอื่นหรือย้ายฐานข้อมูลของคุณทั้งหมดโดยไม่ต้องใช้ ฉันพบว่ามีประโยชน์อย่างยิ่งเมื่อย้ายฐานข้อมูลขนาดใหญ่
! ง่าย สร้างฐานข้อมูลจำลอง (พูด abc)
คัดลอกไฟล์. myd, .myi, .frm เหล่านี้ทั้งหมดไปยัง mysql \ data \ abc โดยที่ mysql \ data \ เป็นสถานที่ซึ่ง. myd, .myi, .frm สำหรับฐานข้อมูลทั้งหมดจะถูกเก็บไว้
จากนั้นไปที่ phpMyadmin ไปที่ db abc แล้วคุณจะพบฐานข้อมูลของคุณ
ฉันคิดว่า. mii คุณสามารถซ่อมแซมได้จากภายใน mysql
หากคุณเห็นข้อความแสดงข้อผิดพลาดประเภทนี้จาก MySQL: ฐานข้อมูลล้มเหลวในการเรียกใช้คิวรี (แบบสอบถาม) 1016: ไม่สามารถเปิดไฟล์: 'someable.MYI' (errno: 145) ข้อผิดพลาดเกี่ยวกับ: 1034: ไฟล์คีย์ไม่ถูกต้องสำหรับตาราง: 'บางครั้ง' ลองซ่อมมันแล้วคุณอาจจะมีตารางที่เสียหายหรือเสียหาย
คุณสามารถตรวจสอบและซ่อมแซมตารางได้จากพรอมต์ mysql ดังนี้:
check table sometable;
+------------------+-------+----------+----------------------------+
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------------------------+
| yourdb.sometable | check | warning | Table is marked as crashed |
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------------------------+
repair table sometable;
+------------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------------+--------+----------+----------+
| yourdb.sometable | repair | status | OK |
+------------------+--------+----------+----------+
และตอนนี้ตารางของคุณควรจะดี:
check table sometable;
+------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+
ฉันพบวิธีแก้ปัญหาสำหรับการแปลงไฟล์เป็น.sql
ไฟล์ (คุณสามารถนำเข้า.sql
ไฟล์ไปยังเซิร์ฟเวอร์และกู้คืนฐานข้อมูล) โดยไม่จำเป็นต้องเข้าถึง/var
ไดเรกทอรีดังนั้นคุณไม่จำเป็นต้องเป็นผู้ดูแลเซิร์ฟเวอร์เพื่อทำเช่นนี้
มันต้องการ XAMPP หรือ MAMP ติดตั้งบนคอมพิวเตอร์ของคุณ
C:\XAMPP
) mysql\data
และย่อยไดเรกทอรี เส้นทางแบบเต็มควรเป็นC:\XAMPP\mysql\data
ภายในคุณจะเห็นโฟลเดอร์ของฐานข้อมูลอื่น ๆ ที่คุณสร้างขึ้น คัดลอกและวางโฟลเดอร์เต็มรูปแบบของ.myd
, .myi
และ.frm
ไฟล์ลงมี เส้นทางไปยังโฟลเดอร์นั้นควรเป็น
C:\XAMPP\mysql\data\foldername\.mydfiles
จากนั้นไปlocalhost/phpmyadmin
ที่เบราว์เซอร์ เลือกฐานข้อมูลที่คุณเพิ่งวางลงในmysql\data
โฟลเดอร์และคลิกที่ส่งออกในแถบนำทาง เลือกส่งออกเป็น.sql
ไฟล์ จากนั้นจะปรากฏขึ้นถามที่บันทึกไฟล์
และนั่นคือมัน! ตอนนี้คุณ (ควร) มี.sql
ไฟล์ที่มีฐานข้อมูลที่เป็นมา.myd
ก่อน.myi
และ.frm
ไฟล์ จากนั้นคุณสามารถนำเข้าสู่เซิร์ฟเวอร์อื่นผ่าน phpMyAdmin โดยสร้างฐานข้อมูลใหม่และกด 'นำเข้า' ในแถบนำทางแล้วทำตามขั้นตอนเพื่อนำเข้า
คุณสามารถคัดลอกไฟล์ลงในไดเรกทอรีย่อยที่ตั้งชื่ออย่างเหมาะสมของโฟลเดอร์ข้อมูลตราบใดที่เป็นรุ่นเดียวกันของ mySQL และคุณได้เก็บไฟล์ที่เกี่ยวข้องทั้งหมดไว้ในไดเรกทอรีนั้น หากคุณไม่มีไฟล์ทั้งหมดฉันค่อนข้างมั่นใจว่าคุณจะมีปัญหา
http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
มันบอกว่าจะเปลี่ยนชื่อไฟล์ ib_ * ฉันได้ทำไปแล้วและมันก็ทำให้ฉันคืนฐาน
คำอธิบายข้างต้นไม่เพียงพอที่จะทำให้สิ่งต่าง ๆ ใช้งานได้สำหรับฉัน (อาจหนาแน่นหรือขี้เกียจ) ดังนั้นฉันจึงสร้างสคริปต์นี้เมื่อฉันพบคำตอบที่จะช่วยฉันในอนาคต หวังว่าจะช่วยผู้อื่น
vim fixperms.sh
#!/bin/sh
for D in `find . -type d`
do
echo $D;
chown -R mysql:mysql $D;
chmod -R 660 $D;
chown mysql:mysql $D;
chmod 700 $D;
done
echo Dont forget to restart mysql: /etc/init.d/mysqld restart;
สำหรับผู้ที่มี Windows XP และติดตั้งเซิร์ฟเวอร์ MySQL 5.5 - ตำแหน่งของฐานข้อมูลคือ C: \ Documents และ Settings \ ผู้ใช้งานทั้งหมด \ Data Data \ MySQL \ MySQL Server 5.5 \ data เว้นแต่ว่าคุณเปลี่ยนตำแหน่งภายในการติดตั้ง MySql Workbench GUI