กู้คืนฐานข้อมูล MySQL จากไฟล์จริง


139

เป็นไปได้ไหมที่จะกู้คืนฐานข้อมูล MySQL จากไฟล์ฐานข้อมูลทางกายภาพ ฉันมีไดเรกทอรีที่มีประเภทไฟล์ต่อไปนี้:

client.frm
client.MYD
client.MYI

แต่สำหรับอีกประมาณ 20 ตาราง

ฉันมักจะใช้ mysqldump หรือเครื่องมือที่คล้ายกันเพื่อให้ได้ทุกอย่างในไฟล์ SQL 1 ดังนั้นวิธีจัดการกับไฟล์ประเภทนี้คืออะไร?


ฉันมีปัญหาเดียวกัน: ไฟล์หลายไฟล์ที่มีนามสกุล FRM, MYD และ MYI ฉันยังมีไฟล์ ib_logfile0, ib_logfile1 และ ibdata1 ฉันไม่สามารถเข้าถึงเซิร์ฟเวอร์ที่ทำงานอยู่หรือสร้างการถ่ายโอนข้อมูล ฉันลองใช้เซิร์ฟเวอร์ MySQL ตัวใหม่และใช้งานไฟล์ แต่ฉันก็ไม่ประสบความสำเร็จ ... ไม่มีใครมีวิธีการที่ชัดเจนหรือไม่?
flo5783

คำตอบ:


132

ตาราง MySQL MyISAM เป็นการรวมกันของสามไฟล์:

  • ไฟล์ FRM คือนิยามของตาราง
  • ไฟล์ MYD เป็นที่จัดเก็บข้อมูลจริง
  • ไฟล์ MYI เป็นที่เก็บดัชนีที่สร้างขึ้นบนโต๊ะ

คุณควรจะสามารถกู้คืนได้โดยคัดลอกไว้ในโฟลเดอร์ฐานข้อมูลของคุณ (ใน linux ตำแหน่งเริ่มต้นคือ/var/lib/mysql/)

คุณควรทำในขณะที่เซิร์ฟเวอร์ไม่ทำงาน


64
นี่เป็นจริงเฉพาะสำหรับตาราง MyISAM InnoDB เก็บตารางและดัชนีไว้ใน tablespace เดียว * ซึ่งโดยค่าเริ่มต้นจะประกอบด้วย 3 ไฟล์ ibdata1, ib_logfile0 และ ib_logfile1 สำหรับการกู้คืนฐานข้อมูลคุณจะต้องใช้ไฟล์เหล่านั้นด้วย * ตารางต่อตารางจะเป็นไปได้ แต่ไม่ได้เริ่มต้น
ขวาน

21
เขาบอกว่าเขามีไฟล์. frm .myi และ. myd ฉันคิดว่ามันเป็นตาราง MyISAM
Vincent

5
คำตอบที่มีค่า แต่ฉันต้องไปอีกขั้นหนึ่งเพื่อให้สิ่งต่าง ๆ ทำงานได้ดี: เนื่องจากฉันต้องเข้าสู่ระบบในฐานะ root เพื่อเรียกคืนไฟล์mysqlผู้ใช้ที่ทำงานอยู่ในmysqldกระบวนการจึงไม่สามารถเข้าถึงได้ การทำchmod -R mysql:mysql .ในไดเรกทอรีข้อมูล mysql นั้นทำได้ง่ายและรวดเร็ว แต่การหาข้อมูลก่อนหน้านั้นทำไมฐานข้อมูลการ Resoterd ของฉันทั้งหมดดูเหมือนไม่มีตารางใช้เวลานานขึ้น
Edurne Pascual

10
herenvardo ฉันคิดว่าคุณหมายถึง chown ไม่ใช่ chmod
Oliver M Grech

2
ในการสรุปหมายเหตุสำคัญบางอย่างคุณอาจต้องchownคัดลอกไฟล์ดังนี้:sudo chown -R mysql:mysql /var/lib/mysql
Jacksonkr

50

จากคำตอบของ @Vicent ฉันได้กู้คืนฐานข้อมูล MySQL ดังนี้:

ขั้นตอนที่ 1 ปิดเซิร์ฟเวอร์ Mysql

ขั้นตอนที่ 2 คัดลอกฐานข้อมูลในโฟลเดอร์ฐานข้อมูลของคุณ (ใน linux ตำแหน่งเริ่มต้นคือ / var / lib / mysql) เก็บชื่อเดียวกันของฐานข้อมูลและชื่อเดียวกันของฐานข้อมูลในโหมด mysql

sudo cp -rf   /mnt/ubuntu_426/var/lib/mysql/database1 /var/lib/mysql/

ขั้นตอนที่ 3: เปลี่ยนของตัวเองและเปลี่ยนโหมดโฟลเดอร์:

sudo chown -R mysql:mysql /var/lib/mysql/database1
sudo chmod -R 660 /var/lib/mysql/database1
sudo chown  mysql:mysql /var/lib/mysql/database1 
sudo chmod 700 /var/lib/mysql/database1

ขั้นตอนที่ 4: คัดลอก ibdata1 ในโฟลเดอร์ฐานข้อมูลของคุณ

sudo cp /mnt/ubuntu_426/var/lib/mysql/ibdata1 /var/lib/mysql/

sudo chown mysql:mysql /var/lib/mysql/ibdata1

ขั้นตอนที่ 5: คัดลอกไฟล์ ib_logfile0 และ ib_logfile1 ในโฟลเดอร์ฐานข้อมูลของคุณ

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile0 /var/lib/mysql/

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile1 /var/lib/mysql/

จำการเปลี่ยนแปลงของตัวเองและเปลี่ยนรูทของไฟล์เหล่านั้น:

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile0

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile1

หรือ

sudo chown -R mysql:mysql /var/lib/mysql

ขั้นตอนที่ 6 (ไม่บังคับ): ไซต์ของฉันมีการกำหนดค่าให้จัดเก็บไฟล์ในตำแหน่งเฉพาะจากนั้นฉันก็คัดลอกไฟล์เหล่านั้นไปยังตำแหน่งที่เกี่ยวข้องอย่างแน่นอน

ขั้นตอนที่ 7: เริ่มเซิร์ฟเวอร์ Mysql ของคุณ ทุกอย่างกลับมาและสนุกกับมัน

อย่างนั้นแหละ.

ดูข้อมูลเพิ่มเติมได้ที่: https://biolinh.wordpress.com/2017/04/01/restoring-mysql-database-from-physical-files-debianubuntu/


4
+1 สำหรับคำแนะนำโดยละเอียดทีละขั้นตอน แต่ฉันแก้ไขข้อความบางอย่างเพื่อสะท้อนสิ่งที่ควรเป็น
ปีเตอร์

มีข้อผิดพลาด # 1932 ไม่สามารถเข้าถึงข้อมูลได้ ฐานข้อมูลปรากฏขึ้น แต่ไม่สามารถเข้าถึงข้อมูลได้ ใช้งาน XAMPP 7.2.12 บน MAC OS X Mojave
Steve1754a

@ Steve1754a ข้อผิดพลาดจากหลายสาเหตุ 1. คุณย้ายฐานข้อมูลจาก Mac OS ไปยัง Mac OS หรือไม่? 2. โปรดตรวจสอบการอนุญาตของไฟล์ / ข้อมูล / ตาราง
biolinh

คำตอบ: 1. ใช่; 2. ฉันทำ ฉันต้องดำเนินการสร้างฐานข้อมูลที่สมบูรณ์ใหม่ ไม่สามารถหาคำตอบได้ คุณธรรมกับเรื่องราว: สร้างฐานข้อมูลสำรองเสมอ ฉันหวังว่าจะมีวิธีง่ายๆในการทำเช่นนั้นโดยอัตโนมัติใน XAMPP
Steve1754a

1
คุณช่วยชีวิตฉันไว้
SpongePablo

8

หากคุณกำลังกู้คืนโฟลเดอร์อย่าลืมที่จะ chown ไฟล์ไปยัง mysql: mysql

chown -R mysql:mysql /var/lib/mysql-data

มิฉะนั้นคุณจะได้รับข้อผิดพลาดเมื่อพยายามวางฐานข้อมูลหรือเพิ่มคอลัมน์ใหม่ ฯลฯ

และรีสตาร์ท MySQL

service mysql restart

2
นี่ไม่ใช่คำตอบสำหรับคำถาม แต่มีประโยชน์มาก
ryantuck

จริงที่คุณไม่ควร chown ทุกอย่างเพื่อ MySQL, โฟลเดอร์ฐานข้อมูล mysql ควรเก็บรักษากลุ่มราก
Galvani

8

ฉันมีปัญหาเดียวกัน แต่ไม่สามารถกู้คืนฐานข้อมูลได้สำเร็จตามคำแนะนำด้านบน

ฉันสามารถกู้คืนโฟลเดอร์ฐานข้อมูล mysql จาก Ubuntu OS ของฉันเท่านั้น ปัญหาของฉันคือวิธีการกู้คืนฐานข้อมูลของฉันด้วยโฟลเดอร์ข้อมูล mysql ที่อ่านไม่ได้ ดังนั้นฉันเปลี่ยนกลับไปเป็น win7 OS สำหรับสภาพแวดล้อมการพัฒนา

* หมายเหตุฉันมีเซิร์ฟเวอร์ฐานข้อมูลที่มีอยู่ที่ทำงานอยู่ใน win7 และฉันต้องการไฟล์ฐานข้อมูลเพียงไม่กี่ไฟล์เพื่อเรียกคืนจากไฟล์ที่กู้คืน หากต้องการกู้คืนไฟล์ฐานข้อมูลจาก Ubuntu OS สำเร็จฉันต้องติดตั้งเซิร์ฟเวอร์ฐานข้อมูล mysql ใหม่ (เวอร์ชันเดียวกันจาก Ubuntu OS ในระบบปฏิบัติการ win7 ของฉัน) เพื่อกู้คืนทุกสิ่งในเซิร์ฟเวอร์ฐานข้อมูลเก่านั้น

  1. สร้างเซิร์ฟเวอร์ฐานข้อมูล mysql ใหม่ให้เป็นเวอร์ชั่นเดียวกันจากไฟล์ที่กู้คืน

  2. หยุดเซิร์ฟเวอร์ mysql

  3. คัดลอกโฟลเดอร์ที่กู้คืนแล้ววางในฐานข้อมูล mysql (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data)

  4. คัดลอกไฟล์ ibdata1 ที่อยู่ในโฟลเดอร์ที่ติดตั้ง linux mysql และวางลงใน (C: \ ProgramData \ MySQL \ MySQL \ MySQL Server 5.5 \ data) เพียงเขียนทับที่มีอยู่หรือทำการสำรองข้อมูลก่อนที่จะเปลี่ยน

  5. เริ่มเซิร์ฟเวอร์ mysql และตรวจสอบว่าคุณกู้คืนไฟล์ฐานข้อมูลสำเร็จแล้ว

  6. หากต้องการใช้ฐานข้อมูลที่กู้คืนในเซิร์ฟเวอร์ mysql ที่ฉันใช้อยู่ในปัจจุบันเพียงแค่ส่งออกฐานข้อมูลที่กู้คืนและนำเข้าเซิร์ฟเวอร์ mysql ที่มีอยู่ของฉัน

หวังว่าสิ่งเหล่านี้จะช่วยได้เพราะไม่มีสิ่งใดได้ผลสำหรับฉัน


1
เมธอดยังทำงานบน ubuntu / debian ด้วยไฟล์ ibdata1, ib_logfile0 และ ib_logfile1 และโฟลเดอร์ฐานข้อมูล ผู้ใช้จะไม่ถูกคัดลอก แต่จากนั้นคุณสามารถเพิ่มผู้ใช้ใหม่ในฐานข้อมูลและถ่ายโอนข้อมูลนั้น
bokorben

2

ด้วย MySql 5.1 (Win7) ในการสร้างฐานข้อมูลใหม่ (InnoDbs) ฉันได้แทนที่เนื้อหาทั้งหมดของ dirs ต่อไปนี้ (my.ini params):

datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"
innodb_data_home_dir="C:/MySQL Datafiles/"

หลังจากนั้นฉันเริ่มบริการ MySql และทำงานได้ดี


1

ใช่แล้ว! เพียงเพิ่มลงในฐานข้อมูลโฟลเดอร์ของคุณ (ขึ้นอยู่กับระบบปฏิบัติการ) และเรียกใช้คำสั่งเช่น "MySQL Fix Permissions" นี้จัดเก็บฐานข้อมูลอีกครั้ง ดูด้วยว่าสิทธิ์ที่ถูกต้องถูกตั้งค่าไว้ในไฟล์เช่นกัน


ฉันทำ แต่ฉันไม่รู้จักตาราง ที่ฉันพูดในความคิดเห็นของฉันในคำตอบก่อนหน้า
orezvani

0

ฉันเคยคัดลอกไฟล์เหล่านี้ไปยังโฟลเดอร์จัดเก็บฐานข้อมูลสำหรับฐานข้อมูล mysql ที่ทำงานเริ่ม db และรอให้ "ซ่อมแซม" ไฟล์แล้วแยกพวกเขาด้วย mysqldump


-1

ในกรณีของฉันเพียงแค่ลบ tc.log ใน / var / lib / mysql ก็เพียงพอที่จะเริ่ม mariadb / mysql อีกครั้ง


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