กู้คืนตาราง MySQL เมื่อมีเท่า.frm ไฟล์และ ibd

วิธีการแก้ปัญหา “ข้อผิดพลาดของ Mysql #1146 -ตารางที่ไม่มีอยู่” เกิดจากการย้ายไฟล์.IDB (InnoDB) โดยตรงระหว่างไดเรกทอรี (พื้นที่ตาราง).

logo_mysql

ปัญหา

เรามีปัญหาต่าง ๆ เป็นปัญหาที่เราสร้างขึ้น. ผมเพียงแค่ตั้งค่าไซต์โดยใช้ WordPress และคิด: เห็นวิธีการเกี่ยวกับวิธีการทำงานใน PHP 7? ตกลง, ได้, ใช้ PHP WampServer ของฉัน 5.6, ดังนั้นผมต้อง “มีความสุข” ความคิดที่จะปรับรุ่นการ WampServer 2.5 (Apache 2.4.9, MySQL 5.6.17, PHP 5.5.12) สำหรับ WampServer 3.0.6 (Apache 2.4.23, MySQL 5.7.14, 5.6.25 PHP และ Php 7.0.10).

แน่นอน, เริ่มต้น โดยการสำรองข้อมูล, แต่ส่งที่ดีของฉันถูกเลือกไม่ส่ง SQL ออกจากเว็บไซต์ดังกล่าว, แทน, เพียงแต่ทำสำเนาของไฟล์ MySQL (MySQL/ข้อมูล) และโปรแกรมประยุกต์ (www/เว็บ ไซต์). ผมมั่นใจว่า มันจะทำงาน, เช่นบางครั้ง.

หลังจากติดตั้ง WampServer ใหม่ด้วย PHP 7, ใส่แฟ้มสำรองและด้านหลังใบสมัคร, เพียง เมื่อผมไปทดสอบ โดยเบราว์เซอร์, ไม่ได้แสดงขึ้นเว็บไซต์, แต่หน้าจอของการติดตั้ง WordPress เป็นถ้าจะไซต์ใหม่. แช่แข็งขึ้น! เปิด PHPMyAdmin และตรวจสอบเพื่อดูว่า ฐานข้อมูลถูกตกลง และเห็นที่, แม้จะถูกแสดงในฐานข้อมูล, เมื่อคุณคลิกด้านบนของตารางเพื่อดูข้อมูลข้อผิดพลาดต่อไปนี้:

  MySQL ข้อผิดพลาด #1146 -ตาราง <TABLE_NAME> doesn ' t มีอยู่

ฉันค้นหา และฉันก็พบว่า คุณสามารถเพียงคัดลอก หรือย้ายแฟ้มโดยตรงไปที่ไดเรกทอรีอื่น MySQL MySQL ถ้าแฟ้ม ชนิด MyISAM, ผู้ที่ มีนามสกุลไฟล์ frm MYD MYI. ไม่ทราบว่าเกิดอะไรขึ้น, แต่ฐานข้อมูลของฉันปรากฏเป็น InnoDB (.frm และ idb). แต่น่าเสียดาย, หลังจากความจริงที่ว่า MySQL แจ้งเอกสาร:

  คุณไม่สามารถย้ายได้อย่างอิสระ .IBD แฟ้มระหว่างไดเรกทอรีของฐานข้อมูล การ คุณสามารถ มีแฟ้มตาราง MyISAM. 
  ความหมายของตารางที่จัดเก็บในพื้นที่ตาราง InnoDB ร่วมมีชื่อฐานข้อมูล. 
  รหัสธุรกรรม และ เข้าสู่ระบบ ลำดับหมายเลขที่เก็บไว้ในไฟล์พื้นที่ตารางแตกต่างระหว่างฐานข้อมูล.

วิธีการแก้ไขปัญหา

ผมต้องแก้ปัญหาบางอย่างง่าย, แต่ผมจะอธิบายที่นี่หนึ่งเดียวที่ทำงานสำหรับฉันจริง ๆ, แม้ว่าดูเหมือนซับซ้อนมากขึ้น, พบในการโพสต์ “การคืนค่าตาราง(s) ในฐานข้อมูล MySQL เมื่อไฟล์ frm หรือ ibd มีเท่านั้น“.

ก่อนที่จะ, อย่างไรก็ตาม, เรื่องของความรู้, จำได้ว่า สัมพันธ์กับ InnoDB การพิมพ์, โครงสร้างของยามในไฟล์และข้อมูลใน.frm ibd MySQL. ทฤษฎีเพียงพอ, ผมลองผ่า!

ขั้นตอนที่ 1: สร้างโครงสร้างของ.frm ไฟล์

กล่าวว่า, frm ประกอบด้วยโครงสร้างของตาราง. ก่อนอื่น เราต้องเรียกโครงสร้างนี้เพื่อรวบรวมข้อมูลแล้ว. คุณสามารถทำได้ 3 วิธีต่าง ๆ ที่อธิบายไว้ด้านล่าง, แต่ก่อน, ให้ฉันบอกคุณบางสิ่งบางอย่างเกี่ยวกับการ “ยูทิลิตี้ของ Mysql”.

ยูทิลิตี้ของ Mysql | mysqlfrm

ถ้าคุณไม่ต้องการใช้วิธีการแรกที่เสนอ (ออนไลน์) คุณจำเป็นต้องใช้เครื่องมือ “mysqlfrm” โดย “ยูทิลิตี้ของ Mysql“.

เครื่องมือนี้จะแยกโครงสร้างข้อมูล และสร้างการสร้างตาราง SQL สคริปต์. สำหรับเรื่องนี้, ดาวน์โหลด “ยูทิลิตี้ของ Mysql” (บางอย่างเช่น mysql สาธารณูปโภค 1.6.4 winx64.msi) และติดตั้ง.

เปิดคอนโซล (คำสั่ง / ของการ) ใช้คำสั่งซีดีเพื่อย้ายไดเรกทอรีการติดตั้งเริ่มต้น (บางอย่างเช่น C:\ยูทิลิตี้ FilesMySQLMySQL C:program 1.6\). ทราบภายในไดเรกทอรีนี้ ว่ามีการปฏิบัติการ mysqlfrm.exe.

  ซีดี "C:\ยูทิลิตี้ FilesMySQLMySQL C:Program 1.6"

เลือกเพียงหนึ่งในวิธีการด้านล่างเพื่อแยกโครงสร้างของตารางที่อยู่ในไฟล์.frm:

1ºวิธี | ออนไลน์

1. ไปเว็บไซต์ HTTPS://recovery.twindb.com/;
2. คลิกที่เมนู “โครงสร้างการกู้คืน” แล้วใน “ไฟล์ frm จาก“;
3. คลิกที่ปุ่ม “เบราว์เซอร์…” และเลือกไฟล์ frm; และ
4. คลิกที่ปุ่ม “อัปโหลด” และสคริปต์สร้างตารางจะแสดงบนหน้าจอ.

จำเป็นต้องส่งหลายไฟล์ frm ครั้งสร้างสคริปต์เดียวกับตารางทั้งหมด. เพียงเพื่อช่วยให้คุณสร้างเป็น.zip ด้วย.frm ของทั้งหมดก่อน “เบราว์เซอร์/อัพโหลด”.

2ºวิธี | โดยใช้ –การวินิจฉัย

/* ตัวอย่างทั่วไป */
   mysqlfrm วินิจฉัย "<เส้นทางแหล่ง>/mytable.frm" > "<destination/path/recovered_mytable.sql>"
 
/* ตัวอย่างในทางปฏิบัติกับตาราง wp_posts.frm ของเวิร์ดเพรส */
   mysqlfrm --การวินิจฉัย "C:\wampbinmysqlmysql5.6.17datameubancowp_posts.frm" > "C:\recovered_wp_posts.sql"

3ºวิธี | โดยใช้ –เซิร์ฟเวอร์

/* ตัวอย่างทั่วไป */
  เซิร์ฟเวอร์ mysqlfrm=ราก:mypassword@พอร์ต localhost=3311 "<เส้นทางแหล่ง>/mytable.frm" > "<เส้นทางปลายทาง>/recovered_mytable.sql"
 
/* ตัวอย่างในทางปฏิบัติกับตาราง wp_posts.frm ของเวิร์ดเพรส */
  mysqlfrm --เซิร์ฟเวอร์=ราก@localhost --พอร์ต=3307 ""(C):\wampbinMySQL\MySQL5.6.17\datameubancowp_posts.frm" > "(C):\recovered_wp_posts.SQL"

ใช้พอร์ต MySQL! เลือกใด ๆ อื่น ๆ พร้อมใช้งาน. หมายเหตุว่า คำสั่งเปลี่ยนเส้นทางการส่งออกเป็นไฟล์.SQL ที่บันทึกอยู่ในเส้นทางที่ระบุ (ในกรณี, (C):).

ขั้นตอนที่ 2: สร้างตารางในฐานข้อมูลของคุณ

ในฐานข้อมูลใหม่, สร้างตารางที่ มีสคริปต์สร้างขึ้นในขั้นตอน 1. ผมเองติดตั้ง WampServer รุ่นสะอาด และใช้ PHPMyAdmin (http://localhost/phpmyadmin /) การสร้างฐานข้อมูล และนำเข้าสคริปต์ SQL ที่สร้างในขั้นตอน 1 (recovered_wp_posts.sql). สคริปต์นี้จะสร้าง 2 แฟ้มในไดเรกทอรีของฐานข้อมูล MySQL ของคุณ:

  SUA_TABELA.frm SUA_TABELA.IDB

ในกรณีของฉัน, แฟ้มเหล่านี้ถูกสร้างขึ้นใน (C):\wamp64binmysqlmysql5.7.14data<ที่นั่งของฉัน>. IE, ค้นหาการติดตั้ง MySQL และทราบว่า ในไดเรกทอรี วัน จะมีฐานข้อมูลของคุณและแฟ้มสองที่กล่าวถึง.

ขั้นตอนที่ 3: ลบไฟล์.IDB ใหม่

การเอาไฟล์.IDB ใหม่, เรียกใช้คำสั่ง SQL ต่อไปนี้:

/* ตัวอย่างทั่วไป */
  เปลี่ยนแปลงตาราง mytable ละทิ้งพื้นที่ตาราง;
 
/* ตัวอย่างในทางปฏิบัติกับตาราง wp_posts ของเวิร์ดเพรส */
  เปลี่ยนแปลงตาราง wp_posts ละทิ้งพื้นที่ตาราง;

คำสั่งนี้เอาการเชื่อมโยงระหว่างตารางและพื้นที่ตาราง (จริงเก็บแฟ้มฐานข้อมูล), และลบไฟล์.IDB.

ขั้นตอนที่ 4: คัดลอกไฟล์.IDB เก่า

ไฟล์.IDB เดิม (การที่ประกอบด้วยข้อมูล) ความต้องการที่จะคัดลอกไปยังสถานที่ที่มีลบในขั้นตอน.IDB 3. ใช้ Ctrl + C และ Ctrl + V หรือฆ่าตัวตาย โดยใช้บรรทัดคำสั่ง.

ขั้นตอนที่ 5: เปิดตาราง

การเชื่อมโยงเสียในขั้นตอน 3 คืน ด้วยคำสั่งต่อไปนี้:

/* ตัวอย่างทั่วไป */
  เปลี่ยนแปลงตาราง mytable พื้นที่ตารางที่นำเข้า;
 
/* ตัวอย่างในทางปฏิบัติกับตาราง wp_posts ของเวิร์ดเพรส */
  เปลี่ยนแปลงตาราง wp_posts พื้นที่ตารางที่นำเข้า;

ไม่ต้องกังวลถ้าคุณได้รับคำเตือนบางอย่าง, อย่างไรก็ตาม, มันอาจจะผิดปกติทั่วไปที่ปรากฏ ข้อผิดพลาดต่อไปนี้:

  #1808 - Schema ที่ไม่ตรงกัน (ตารางมีรูปแถว ROW_TYPE_DYNAMIC, .แฟ้ม IBD มีรูปแถว ROW_TYPE_COMPACT)

ในกรณีนี้, นี้เกิดขึ้นเนื่องจากแตกต่าง mysql 5.7.14 (ใหม่) สร้างตารางเริ่มต้นเมื่อเทียบกับ Mysql 5.6.17 (เก่า), โดย ROW_FORMAT =ขนาดกะทัดรัด.

ดังนั้น, ถ้าคุณกำลังใช้ MySQL > = mysql 5.7.14, ทั้งหมดที่คุณต้องทำคือเพิ่ม ROW_FORMAT =คอมแพคในคำนิยามของการสร้างตาราง.

  สร้างตาราง 'wp_posts' (. . .) เครื่องยนต์=Innodb ROW_FORMAT=ขนาดกะทัดรัด

Outros erros

Apenas para deixar registrado, antes เด obter sucesso นา extração เด dados ทำ.frm, tive alguns erros:

  # แหล่งบน localhost: ... การเชื่อมต่อ.
  # เริ่มต้นเซิร์ฟเวอร์สร้างพอร์ต 3304 ... ข้อผิดพลาดในการพยายามหยุดไม่สร้างเซิร์ฟเวอร์.  กระบวนการ = 6648.
  ข้อผิดพลาด: เซิร์ฟเวอร์ล้มเหลวในการวางไข่. ข้อผิดพลาดเซิร์ฟเวอร์โคลน: สามารถสื่อสารกับ ใหม่ อินสแตนซ์. รหัสกระบวนการ = 6648.. เพื่อวินิจฉัย, เรียกใช้โปรแกรมอรรถประโยชน์อีก และ ใช้ การ --เลือกอ่านดูข้อความจากเซิร์ฟเวอร์สร้าง และแก้ไขข้อผิดพลาดแสดง แล้วเรียกใช้โปรแกรมอรรถประโยชน์อีก.
  ประสบความสำเร็จ: กระบวนการที่ มีหมายเลขผลิตภัณฑ์ 6648 (กระบวนการย่อยของ PID 7264) ถูกยกเลิก.
Traceback (ล่าสุดโทรล่าสุด):
  แฟ้ม "G:\adebuildsb_0-19921351-1470074463.97Python-2.7.6-windows-x86-64bitlibsite-packagescx_FreezeinitscriptsConsole.py", บรรทัด 27, ใน <โมดูล>
  แฟ้ม "scripts\mysqlfrm.py", บรรทัด 422, ใน <โมดูล>
  แฟ้ม ".\mysql\utilities\command\read_frm.py", บรรทัด 439, ใน read_frm_files
  แฟ้ม ".\mysql\utilities\command\read_frm.py", บรรทัด 166, ใน _spawn_server
  แฟ้ม ".\mysql\utilities\command\serverclone.py", บรรทัด 180, ใน clone_server
  แฟ้ม ".\mysql\utilities\common\tools.py", บรรทัด 273, ใน get_mysqld_version IOError: [Errno 13] สิทธิ์ที่ถูกปฏิเสธ: 'version_check'

ไม่ específico caso ทำ WordPress, เมื่อต้องการเอาสคริปต์ที่สร้าง SQL ที่ถูกสร้างขึ้นภายใต้. frm, เริ่มต้นรายการทั้งหมด ‘0000-00-00 00:00:00’, มิฉะนั้น, จะจับข้อผิดพลาด:

  #1067 - ค่าเริ่มต้น (ค่าเริ่มต้น) ไม่ถูกต้องสำหรับ 'comment_date'

ที่อยู่!

แบบอักษร

http://www.voxteneo.com/restoring-tables-mysql-database-frm-ibd-files-available/

https://medium.com/@alexquick/transporting-mysql-tablespaces-from-5-6-to-5-7-517c01345fbb#.72zermd8b

http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html

https://lanmenezesbr.wordpress.com/2014/10/21/mysql-erro-1146-table-doesnt-exist/

http://stackoverflow.com/questions/7759170/mysql-table-doesnt-exist-but-it-does-or-it-should

จำนวนผู้เข้าชม: 14922

10 comentários sobre “กู้คืนตาราง MySQL เมื่อมีเท่า.frm ไฟล์และ ibd

  1. โรดริโก กล่าวว่า:

    O aparecer quando fazer que มีปัญหาเด mensagem seguinte: #1815 – ข้อผิดพลาดภายใน. ไม่สามารถรีเซ็ต LSNs ในตาราง “ที่นั่งของฉัน”.”minhatabela”: ข้อมูลโครงสร้างเสียหาย.
    ได้ possível eu executar เป็น inserções dos dados manualmente? โคโม fazer isso?
    Desde já te agradeço.

  2. Cristian U กล่าวว่า:

    สวัสดี เทย์เลอร์,

    วิธีการที่คุณได้แก้ข้อผิดพลาดนี้:
    ข้อผิดพลาด: เซิร์ฟเวอร์ล้มเหลวในการวางไข่. ข้อผิดพลาดเซิร์ฟเวอร์โคลน: สามารถสื่อสารกับอินสแตนซ์ใหม่. กระบวนการ = 6648.. เพื่อวินิจฉัย, เรียกใช้โปรแกรมอรรถประโยชน์อีกครั้ง และใช้การ –เลือกอ่านดูข้อความจากเซิร์ฟเวอร์สร้าง และแก้ไขข้อผิดพลาดแสดง แล้วเรียกใช้โปรแกรมอรรถประโยชน์อีก.
    ประสบความสำเร็จ: กระบวนการที่ มีหมายเลขผลิตภัณฑ์ 6648 (กระบวนการย่อยของ PID 7264) ถูกยกเลิก.

    ฉันได้รับข้อความเดียวกันและอย่ารู้วิธีแก้ไขปัญหา.

    ขอบคุณ

ทิ้งคำตอบไว้

อีเมลของคุณจะไม่ถูกเผยแพร่. ฟิลด์ต้องมีเครื่องหมาย *