ข้อผิดพลาด: Tablespace สำหรับตาราง xxx มีอยู่ โปรดทิ้งช้อนโต๊ะก่อนนำเข้า


141

ฉันค่อนข้างใหม่กับ MySQL และฉันได้รับข้อผิดพลาดที่น่าสนใจซึ่งฉันไม่สามารถค้นหาความช่วยเหลือใด ๆ ผ่านทาง google และการค้นหา stackoverflow

ฉันใช้เซิร์ฟเวอร์ภายในของ MySQL 5.6.10 บน MacOS 10.8.3 และจัดการฐานข้อมูลของฉันผ่าน Navicat Essentials สำหรับ MySQL

ข้อผิดพลาดที่ฉันได้รับคือหลังจากเรียกใช้และจัดการฐานข้อมูลของฉันได้ดีเพียงสองสามวัน / สัปดาห์มีบางสิ่งที่ทริกเกอร์ (ดูเหมือนจะไม่สมบูรณ์) ลบตารางบางส่วนที่ฉันสร้างขึ้นโดยใช้แบบสอบถามจากภายใน Navicat

เมื่อฉันพยายามเรียกใช้แบบสอบถามโดยใช้ตารางเหล่านี้ Navicat จะเตือนฉันว่าไม่มีตารางนั้นอยู่ จนถึงตอนนี้ดีมาก - นี่คือส่วนที่ดี:

เมื่อฉันพยายามสร้างตารางเช่นชื่อ "temp" ซึ่งก่อนหน้านี้ฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

Error : Tablespace for table '`database`.`temp`' exists. Please DISCARD the tablespace before IMPORT.

อย่างไรก็ตามหากฉันพยายามวางโต๊ะหรือพยายามทิ้งพื้นที่ตารางสำหรับตารางนี้โดยใช้

DROP TABLE temp;
ALTER TABLE temp DISCARD TABLESPACE;

ฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

Error : Unknown table 'database.temp'
Error : Table 'database.temp' doesn't exist

นั่นหมายความว่าฉันควรทิ้งพื้นที่โต๊ะ แต่เมื่อฉันพยายามทำเช่นนั้นโต๊ะก็ไม่มีอยู่ เป็นไปได้ไหมว่ามีส่วนที่เหลือของตารางนี้อยู่ในตำแหน่งอื่นที่ไม่ได้ตรวจสอบการสืบค้น DISCARD? และใครมีความคิดว่าอะไรที่สามารถกระตุ้นทั้งหมดนั้นได้ - แบบสุ่มอย่างที่เห็น?

อย่างที่บอกว่าฉันยังใหม่กับเรื่องนี้และค่อนข้างไม่รู้เรื่องเลย ฉันสงสัยว่าการบูตแล็ปท็อปของฉันใหม่เช่นการรีเซ็ตเซิร์ฟเวอร์ MySQL ในเครื่องหรือสิทธิ์การอนุญาตของผู้ใช้อาจเกี่ยวข้องกับมัน แต่ฉันแค่ตั้งสมมติฐานที่นี่


คุณสามารถตรวจสอบวิธีแก้ไขข้อผิดพลาดประเภทนี้ได้ codepeaker.com/laravel-framework/…
smzapp

คำตอบ:


129

สายเล็กน้อยที่นี่ แต่โดยทั่วไปแล้วฉันพบว่าปัญหานี้เกิดขึ้นเมื่อคุณได้รับข้อผิดพลาด "tableace full" เมื่อทำงานในโหมด 'innodb_file_per_table' โดยไม่ต้องลงรายละเอียดมากเกินไป (ดูเพิ่มเติมที่นี่ ) พื้นที่ตารางของเซิร์ฟเวอร์ฐานข้อมูลถูกกำหนดโดยการตั้งค่า innodb_data_file_path และโดยค่าเริ่มต้นจะค่อนข้างเล็ก ยิ่งทำให้มีขนาดใหญ่ขึ้น 'พื้นที่ตารางเต็ม' ยังสามารถเกิดขึ้นได้ด้วยการสืบค้นที่ใหญ่ขึ้นและเช่นนี้ (มีการจัดเก็บ 'สิ่งของ' ที่ไม่ใช่ตารางจำนวนมากไว้ในนั้นยกเลิกบันทึกแคช ฯลฯ ...

อย่างไรก็ตามฉันพบว่าหากคุณดูในไดเร็กทอรี OS ที่เก็บไฟล์ต่อตาราง / var / lib / mysql โดยค่าเริ่มต้นบน OSX, / usr / local / var / mysql ด้วย homebrew iirc คุณจะพบ ไฟล์ tablename.ibd ที่ถูกทอดทิ้งโดยไม่มีไฟล์ tablename.frm สหายปกติ หากคุณย้ายไฟล์. ibd นั้นไปยังตำแหน่งชั่วคราวที่ปลอดภัย (เพื่อความปลอดภัย) นั่นควรแก้ไขปัญหาได้

$ ls /var/lib/mysql

table1.frm
table1.idb
table2.frm
table2.ibd
table3.idb <- problem table, no table3.frm
table4.frm
table4.idb

$ mkdir /tmp/mysql_orphans
$ mv /var/lib/mysql/table3.ibd /tmp/mysql_orphans/

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


5
ไดเรกทอรี MySQL ที่ข้อมูลของฉันอยู่บน OS X Yosemite ถูกเก็บไว้ในแทน/usr/local/mysql/data /var/lib/mysql/อย่างอื่นแก้ปัญหาได้อย่างสมบูรณ์แบบ
Alex Hoppen

13
ในกรณีของฉันมันใช้งานไม่ได้ ... ฉันลบไฟล์ idb ที่ไม่มีที่มา ... และเมื่อฉันไปสร้างตารางใหม่ด้วยชื่อเดียวกันฉันได้รับข้อความแจ้งว่ามีตารางอยู่แล้ว (ซึ่งฉันลบ. idb ไฟล์) ... หลังจากการดำเนินการข้างต้นไฟล์. idb ที่ถูกทอดทิ้งใหม่ถูกสร้างขึ้นใน dir ... แปลกมาก ... ฉันไม่รู้จริงๆว่าควรทำ
Dimitris Papageorgiou

4
ฉันมีปัญหาเดียวกันกับ Dimitris - ฉันต้องสร้างดัมพ์จากฐานข้อมูลปล่อยฐานข้อมูลและกู้คืนจากดัมพ์
Gerfried

1
@Gerfried สิ่งนี้ใช้ได้ผลกับฉันตราบเท่าที่ฉันหยุดและเริ่มกระบวนการ MySQL หลังจากลบไฟล์
MER

2
@DimitrisPapageorgiou สิ่งนี้ใช้ได้กับฉันตราบเท่าที่ฉันหยุดและเริ่มกระบวนการ MySQL หลังจากลบไฟล์
MER

79

ผู้ใช้ Xampp และ Mamp

มีข้อผิดพลาดเดียวกันขณะนำเข้าฐานข้อมูล (หลังจากล้างข้อมูล) ผ่าน MySQL ฉันพบว่าฉันมีtablename.ibdไฟล์เหลืออยู่ในขณะที่ไฟล์อื่น ๆ ถูกลบไปทั้งหมด ฉันลบออกด้วยตนเองmysql/data/database_nameและข้อผิดพลาดก็หายไป


คำตอบนี้ช่วยคนที่ไม่ใช้ XAMPP หรือไม่?
Technotronic

3
ยกนิ้วให้จากฉัน! ทำงานได้ดี อย่างไรก็ตามให้ฉันอัปเดตเส้นทางของโฟลเดอร์ให้ฉันเล็กน้อย (สับสนในการพยายามค้นหา): / Applications / XAMPP / xamppfiles / var / mysql
Fenix ​​Aoras

การใช้สิ่งนี้พัฒนาข้อผิดพลาด 168 จากเอ็นจิ้นการจัดเก็บใน linux mint โดยไม่ใช้ Xampp หรือ Mamp (ไม่มีคำวิจารณ์เพียงแจ้งให้ทราบ)
Steven

1
ได้ผล! ฉันลบไฟล์. ibd หนึ่งไฟล์ที่เสียหายจากนั้นสามารถสร้างตารางได้อีกครั้ง Ubuntu 16, mariadb
waza123

เช่นเดียวกันกับ Docker (หากนักเทียบท่าล่มหรือโฮสต์รีสตาร์ทคุณอาจมีวันที่ตายภายในโฟลเดอร์ซิงค์ของคุณที่สร้างข้อผิดพลาดนี้)
Sliq

24

หากคุณได้รับการ.idbสร้างขึ้นใหม่อีกครั้งหลังจากที่คุณลบไปแล้วให้อ่านคำตอบนี้

วิธีนี้ได้ผลกับฉัน ฉันมี.idbไฟล์โดยไม่มีข้อมูลที่ตรงกัน.frmและเมื่อใดก็ตามที่ฉันลบ.idbไฟล์ฐานข้อมูลจะสร้างใหม่อีกครั้ง และฉันพบโซลูชันในหนึ่งบรรทัดในเอกสาร MySQL (ส่วนTablespace ไม่มีอยู่ )

1- สร้างไฟล์. fr ที่ตรงกันในไดเร็กทอรีฐานข้อมูลอื่น ๆ และคัดลอกไปยังไดเร็กทอรีฐานข้อมูลซึ่งเป็นที่ตั้งของตาราง orphan

2- ออก DROP TABLE สำหรับตารางเดิม สิ่งนี้ควรวางตารางสำเร็จและ InnoDB ควรพิมพ์คำเตือนไปยังบันทึกข้อผิดพลาดว่าไม่มีไฟล์. ibd

ฉันคัดลอก.frmไฟล์ตารางอื่นและตั้งชื่อให้เหมือนกับตารางที่หายไปของฉันจากนั้นสร้างแบบสอบถามแบบดรอปตารางและ voila ตามปกติมันใช้งานได้และตารางจะถูกทิ้งตามปกติ

ระบบของฉันคือ XAMPP บน windows MariaDB v 10.1.8


3
ในกรณีที่สิ่งนี้ไม่ชัดเจนสำหรับคนอื่น: เมื่อคุณสร้างไฟล์. fr และวางตารางไฟล์. idb จะต้องถูกลบ
Narretz

6
สามารถยืนยันขั้นตอนควรเป็น: 1. ลบ mysql / path / table_name.idb 2. เพิ่ม table_name.frm 3. DROP table_name
Jeremy Dennen

สิ่งนี้ได้ผลสำหรับฉัน ขอบคุณ. ฉันได้รับข้อผิดพลาดนี้ขณะลบ FK และหลังจากนั้นทันทีฉันหยุด mysql ฉันคิดว่านี่คือข้อมูล def ตารางของฉันเสียหาย
Rodolfo Velasco

อย่าลืมรีสตาร์ท mysql หลังจากวางไฟล์แล้วลองวาง
Seyed Ali Roshan

ใน mysql> data> mysql มีไฟล์. fr ที่ฉันต้องการ ฉันสามารถคัดลอกอันนี้ได้หรือไม่?
Timo

23

สำหรับผู้ใช้ WAMP [Windows 7 Ultimate x64-bit]:

ผมเห็นด้วยกับสิ่งที่ DangerDave กล่าวและเพื่อให้ฉันทำคำตอบพร้อมใช้งานสำหรับผู้ใช้ WAMP

หมายเหตุ:ก่อนอื่นคุณต้องไปที่โฟลเดอร์.. \ WAMP \ Bin \ MySQL \ MySQL [Your MySQL Version] \ Data

ตอนนี้คุณจะเห็นโฟลเดอร์ของฐานข้อมูลทั้งหมดของคุณ

  • ดับเบิลคลิกที่โฟลเดอร์ของฐานข้อมูลซึ่งมีตารางที่กระทำผิดเพื่อเปิดขึ้นมา
  • ไม่ควรมีไฟล์[Your offending MySQL table name].frmแต่ควรมีไฟล์แทน[Your offending MySQL table name].ibd
  • ลบไฟล์ [Your offending MySQL table name].ibd
  • จากนั้นลบออกจากถังรีไซเคิลด้วย
  • จากนั้นเรียกใช้แบบสอบถาม MySQL บนฐานข้อมูลและคุณทำเสร็จแล้ว

8

ในกรณีของฉันวิธีแก้ปัญหาเดียวคือ:

  1. สร้าง TABLE bad_tableENGINE = MyISAM ...
  2. rm bad_table.ibd
  3. วางตาราง bad_table

ทำงานให้ฉัน! [ข้อผิดพลาด] InnoDB: ไฟล์ "./dbname/tablename.ibd" มีอยู่แล้วแม้ว่าตารางที่เกี่ยวข้องจะไม่มีอยู่ในพจนานุกรมข้อมูล InnoDB คุณย้ายไฟล์ InnoDB .ibd ไปรอบ ๆ โดยไม่ใช้คำสั่ง SQL DISCARD TABLESPACE และ IMPORT TABLESPACE หรือไม่หรือ mysqld ขัดข้องกลาง CREATE TABLE? คุณสามารถแก้ไขปัญหาได้โดยการลบไฟล์ "./dbname/tablename.ibd" ภายใต้ "datadir" ของ MySQL
PAdrian

1
ไม่สามารถสร้างตารางได้เนื่องจากมี Tablespace อยู่
Liam Mitchell

มันไม่ได้ผลสำหรับฉัน ไฟล์ ibd ยังคงปรากฏขึ้นหลังจากที่ฉันต้องการสร้างตารางใหม่ด้วยเอ็นจิ้นเดียวกัน
Fajar Rukmo

8

นี่คือสิ่งที่ฉันทำใน mariadb 10.2.16 บน fedora เมื่อฉันมีตารางที่แสดงข้อผิดพลาดเดียวกันในล็อกไฟล์ฉันคิดว่า ...

2018-07-11  9:43:58 140323764213504 [Note] InnoDB: The file './database_name/innodb_table.ibd' already exists though the corresponding table did not exist in the InnoDB data dictionary. You can resolve the problem by removing the file.
2018-07-11  9:44:29 140323764213504 [Warning] InnoDB: Tablespace 'database_name/innodb_table' exists in the cache with id 2836 != 2918

ระยะทางและข้อผิดพลาดของคุณอาจแตกต่างกันไป แต่สิ่งสำคัญที่ฉันคิดคือ

...already exists though the corresponding table did not exist in the InnoDB data dictionary...

มีโต๊ะวางไม่ทำงานรวมทั้งปรับเปลี่ยนตาราง ...

MariaDB [database_name]> drop table innodb_table;
ERROR 1051 (42S02): Unknown table 'database_name.innodb_table'

MariaDB [database_name]> alter table innodb_table discard tablespace;
ERROR 1146 (42S02): Table 'database_name.innodb_table' doesn't exist

สร้างตารางก็ล้มเหลวเช่นกัน:

MariaDB [database_name]> create table  innodb_table(`id` int(10) unsigned NOT NULL);
ERROR 1813 (HY000): Tablespace for table '`database_name`.`innodb_table`' exists. Please DISCARD the tablespace before IMPORT

เพื่อแก้ไขปัญหานี้สิ่งที่ฉันทำคืออันดับแรก

create table  innodb_table2(`id` int(10) unsigned NOT NULL);
Query OK, 0 rows affected (0.07 sec)

จากนั้นในไดเร็กทอรี / var / lib / mysql / database_name ฉันทำสิ่งต่อไปนี้เนื่องจากรูทยอมรับการเขียนทับของ innodb_table.ibd ที่ทำให้เราเกิดปัญหา

cp -a innodb_table2.frm innodb_table.frm
cp -a innodb_table2.ibd innodb_table.ibd
systemctl restart mariadb

จากนั้นกลับไปที่คอนโซล mysql ฉันออกคำสั่ง drop สำเร็จบนทั้งสองตาราง

MariaDB [database_name]> drop table innodb_table;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    8
Current database: database_name

Query OK, 0 rows affected (0.08 sec)

MariaDB [database_name]> drop table innodb_table2;
Query OK, 0 rows affected (0.25 sec)

ตอนนี้ทุกอย่างเป็นสี่เหลี่ยมจัตุรัสและฉันสามารถสร้างตารางเดียวขึ้นมาใหม่ได้ ...

MariaDB [database_name]> create table  innodb_table (`id` int(10) unsigned NOT NULL);
Query OK, 0 rows affected (0.08 sec)

แก้ไข: ฉันจะเพิ่มในไฟล์

restorecon -Rv /var/lib/mysql/database_name 

คำสั่งหลังจากการคัดลอกฐานข้อมูลเพื่อให้ได้บริบท Selinux ทั้งหมดอย่างที่ควรจะเป็นแม้ว่าเราจะลบออกจากฐานข้อมูลเกือบจะในทันที แต่ในทางเลือกอื่นคุณสามารถเพิ่มตัวเลือก --archive หรือ -a ให้กับสอง cp คำสั่งใช่จริงๆแล้วตัวเลือกการเก็บถาวรทำให้สิ่งนี้สั้นลง:

cp innodb_table2.frm innodb_table.frm
cp innodb_table2.ibd innodb_table.ibd
chown mysql:mysql innodb_table.frm innodb_table.ibd
chmod 660 innodb_table.frm innodb_table.ibd
restorecon -Rv /var/lib/mysql/database_name
systemctl restart mariadb

เป็นเพียงสิ่งต่อไปนี้ที่ฉันคิดว่าดีกว่าและรักษาบริบทของเซลินุกซ์ที่กำหนดไว้สำหรับตารางที่ทำไว้แล้ว

cp -a innodb_table2.frm innodb_table.frm
cp -a innodb_table2.ibd innodb_table.ibd
systemctl restart mariadb

ฉันได้แทนที่รายการคำสั่งที่ยาวกว่าข้างต้นสำหรับรายการที่สั้นกว่าซึ่งสามารถย่อให้สั้นลงได้ด้วย *


สิ่งนี้ใช้ได้ดีสำหรับฉันบน CentOS MariaDB 10.2.31 ฉันกำลังมองหาวิธีแก้ปัญหาที่ไม่ต้องรีสตาร์ทบริการ MySQL และนี่แหล่ะ คีย์คือการสร้างชุดของไฟล์ innodb_table2 ที่สะอาด (innodb_table2.frm และ innodb_table2.ibd) และวางทั้งสองไฟล์ไว้บนไฟล์ innodb_table
Justin

7

ในกรณีของฉัน:

ก่อนอื่นให้ลบtableName.ibdไดเร็กทอรีฐานข้อมูลของคุณออกจาก Mysql และรันครั้งที่สอง:

ALTER TABLE tableName DISCARD TABLESPACE;
DROP TABLE tableName;

ขอบคุณในกรณีของฉันฉันมี 1) หยุดเซิร์ฟเวอร์ฐานข้อมูล (service mysql stop) 2) ลบไฟล์ idb 3) เริ่มเซิร์ฟเวอร์ฐานข้อมูล (service mysql start) ไม่ได้เรียกใช้การเปลี่ยนแปลงและวางแบบสอบถาม
lemk0

ไดเร็กทอรีฐานข้อมูลของคุณใน Windows อยู่ใน C: \ ProgramData \ MySQL โดยค่าเริ่มต้น
Rodin10

4

ฉันได้รับข้อผิดพลาดเดียวกันกับที่เรียกใช้บน wampserver ขณะพยายามสร้างตารางผู้ใช้ ฉันพบไฟล์ users.ibd และหลังจากที่ฉันลบไฟล์นี้ฉันรันคำสั่ง migrate อีกครั้งและมันใช้งานได้ ไฟล์บนเครื่อง windows ของฉันอยู่ใน wamp / bin / mysql / mysql5.6.12 / data / myproject


4

วิธีการแก้

อย่างไรก็ตามตัวเลือกที่ง่ายกว่าคือรีสตาร์ท MySQL จากนั้นทำสี่ขั้นตอนเดียวกันดังนี้:

1) created a dummy table in the database;
2) discarded its tablespace;
3) moved the .ibd file into the database folder on the system;
4) attached the tablespace back to the table

ด้วยวิธีนี้รหัสพื้นที่ตารางบนพจนานุกรมข้อมูลและไฟล์ที่ตรงกัน จึงนำเข้าช้อนโต๊ะสำเร็จ

สิ่งนี้ช่วยให้คุณมั่นใจมากขึ้นในการจัดการกับ InnoDB "gotcha's" บางส่วนในระหว่างกระบวนการกู้คืนหรือแม้แต่การถ่ายโอนไฟล์

อ้างอิง


7
นี่ไม่ใช่คำตอบแบบสแตนด์อะโลน
Nathaniel Ford

3

นี่คือขั้นตอนการแก้ปัญหา:

  1. สำรองฐานข้อมูลของคุณ (โครงสร้างพร้อมตัวเลือกการปล่อยและข้อมูล)
  2. หยุดบริการเครื่องยนต์ mysql
  3. ลบไดเร็กทอรีฐานข้อมูลด้วยตนเองจากภายใน mysql / data
  4. สตาร์ทเครื่องยนต์ mysql
  5. สร้างฐานข้อมูลใหม่ด้วยชื่อที่แตกต่างจากฐานข้อมูลที่เสียหายของคุณ
  6. สร้างตารางเดียวโดยใช้ชื่อของตารางที่เสียหายภายในฐานข้อมูลใหม่ (นี่คือความลับ) และจะเป็นการดีกว่าที่จะสร้างตารางที่มีโครงสร้างเดียวกันทั้งหมด
  7. เปลี่ยนชื่อฐานข้อมูลเป็นฐานข้อมูลเก่าที่เสียหาย
  8. กู้คืนข้อมูลสำรองของคุณและตารางของคุณจะทำงานได้ดี

2

มีปัญหานี้หลายครั้ง หากคุณมีฐานข้อมูลขนาดใหญ่และต้องการหลีกเลี่ยงการสำรอง / กู้คืน (โดยเพิ่มตารางที่ขาดหายไป) ให้ลองทำย้อนกลับไปมาสองสามครั้ง:

วางตาราง my_table;

แก้ไขตาราง my_table DISCARD TABLESPACE;

-และ-

rm my_table.ibd (orphan ที่ไม่มี my_table.frm ที่สอดคล้องกัน) อยู่ในไดเร็กทอรี / var / lib / mysql / my_db /

- แล้ว -

สร้างตารางหากไม่มีอยู่my_table(... )


2

การลบ / ย้าย tablename.ibd แน่ใจว่าไม่ได้ผลสำหรับฉัน

ฉันจะแก้ไขมันอย่างไร

เนื่องจากฉันกำลังจะลบตารางที่เสียหายและไม่มีอยู่ฉันจึงทำการสำรองข้อมูลของตารางอื่น ๆ โดยไปที่ phpmyadmin-> database-> export-> ตารางที่เลือกเพื่อสำรองข้อมูล -> ส่งออก (เป็น. sql)

หลังจากนั้นฉันก็เลือกไอคอนฐานข้อมูลถัดจากชื่อฐานข้อมูลแล้วทิ้งมัน สร้างฐานข้อมูลใหม่ เลือกฐานข้อมูลใหม่ของคุณ -> นำเข้า -> เลือกไฟล์ที่คุณดาวน์โหลดมาก่อนหน้านี้ -> คลิกนำเข้า ตอนนี้ฉันมีโต๊ะทำงานเก่าและลบตารางที่เสียหายไปแล้ว ตอนนี้ฉันเพิ่งสร้างตารางที่ทำให้เกิดข้อผิดพลาด

ฉันน่าจะมีข้อมูลสำรองของตารางที่เสียหายก่อนหน้านี้


2

ข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณระงับฟังก์ชันบางอย่าง เช่นเดียวกับการเรียกใช้แบบสอบถามด้านล่างโดยมี Foreign Key ไม่ถูกต้อง

set foreign_key_checks=0

2

มีปัญหาเดียวกัน ฉันชงเพิ่มmysql@5.6(หลังจากก่อนหน้านี้มี 5.5)

ค่าเริ่มต้นสำหรับชง 5.6 อยู่ในขณะที่พวกเขากำลังinnodb_file_per_table=1 5.5innodb_file_per_table=0

ibdata1ไฟล์ที่มีอยู่ของคุณ(ข้อมูลภายในที่รวมกัน) จะยังคงมีการอ้างอิงถึงตารางที่คุณพยายามสร้าง / วาง ไม่ว่าจะเปลี่ยนinnodb_file_per_tableกลับเป็น 0 หรือลบไฟล์ข้อมูล ibdata1 ( ซึ่งจะทำให้ข้อมูลทั้งหมดของคุณสูญหายดังนั้นโปรดตรวจสอบว่าคุณ mysqldump ก่อนหรือมีดัมพ์. sql อยู่แล้ว )

mysql@5.6ค่าเริ่มต้นของการชงอื่น ๆที่ทำให้ฉันบิตคือการขาดพอร์ตดังนั้นระบบเครือข่ายจึงเป็นค่าเริ่มต้นของซ็อกเก็ต unix และไคลเอนต์ mysql ยังคงรายงาน:

ERROR 2013 (HY000): Lost connection to MySQL server at 'sending authentication information', system error: 32

ฉันเพิ่มลง<string>--port=3306</string>ใน.plistอาร์เรย์ แต่คุณสามารถระบุport=3306ในไฟล์my.cnf

เรียกใช้brew services stop mysql@5.6ทำการเปลี่ยนแปลงของคุณแล้วbrew services start mysql@5.6


1

การพยายามวางพื้นที่ตารางอาจทำให้คุณมีข้อผิดพลาดอื่น ๆ สำหรับฉันฉันพบข้อผิดพลาดต่อไปนี้:

DROP TABLESPACE `tablename`

Error Code: 1478. Table storage engine 'InnoDB' does not support the create option 'TABLESPACE or LOGFILE GROUP' 

วิธีแก้ปัญหาของฉันคือการทิ้งฐานข้อมูล การดำเนินการนี้จะลบพื้นที่ตารางที่เกี่ยวข้องและให้คุณสร้างตารางอีกครั้ง


20
น่าเสียดายที่เหมือนกับการพูดว่า 'ฉันมีสกรูและการใช้ค้อนส่งกลับข้อผิดพลาดนี้ดังนั้นวิธีแก้ปัญหาของฉันคือการวางก้อนหินลงไป ค่าที่แท้จริงจะหาวิธีแก้ไขตารางเดียวนี้โดยไม่ต้อง nuking ฐานข้อมูลทั้งหมด
Jason

ดู๊! ฉันหวังว่านี่จะเป็นอีกทางเลือกหนึ่งสำหรับคำถามของฉัน (และฉันโพสต์ไว้เป็นคำตอบ) แต่ฉันก็ผ่านขั้นตอนการเปลี่ยนชื่อตาราง / วางฐานข้อมูลได้ครึ่งทางแล้ว ตอนนี้ฉันเกลียด InnoDB
NobleUplift

แต่ฉันดึงฐานข้อมูลสร้างใหม่และยังคงมีปัญหานี้อยู่!
TRiG

@TRiG คุณรีสตาร์ทเซิร์ฟเวอร์หรือไม่?
Aris

1
ฉันคิดว่าฉันจะถามคำถามแยกต่างหาก @Aris ในกรณีของฉันมันอยู่บนเดสก์ท็อป Ubuntu ฉันรีสตาร์ทไม่เพียง แต่ MySQL แต่ทั้งเครื่องหลายครั้ง ลบโฟลเดอร์ฐานข้อมูลด้วยมือด้วยrm -rไฟล์. มันน่ารำคาญ แต่ก็ไม่แสดงออก
TRiG

1

หากคุณมีเซิร์ฟเวอร์อื่นที่มีเวอร์ชันที่ดีของตารางเดียวกันคุณสามารถทำสำเนาได้ (table_copy) ให้โอน table_copy ไปยังเซิร์ฟเวอร์ที่มีปัญหา จากนั้นลบตารางปัญหาและเปลี่ยนชื่อ table_copy เป็นตาราง


1

สำหรับฉันมันช่วยได้แค่ไปที่ไดเรกทอรี MYSQL DATA ภายใต้/ var / lib / mysql / {db_name} (linux) แล้ววางไฟล์{table_name} .ibdซึ่งเหมือนกับชื่อโฟลเดอร์


0

ฉันลบ DB เก่าของฉันที่อยู่ใน localhost โดยตรงจาก wamp หยุดบริการทั้งหมดไปที่ wamp / bin / mysql / mysql [version] / data และฉันพบว่า DB มีปัญหาฉันลบมันและเริ่ม wamp บริการทั้งหมดอีกครั้ง สร้างฐานข้อมูลของคุณอีกครั้งและเสร็จสิ้นตอนนี้คุณสามารถนำเข้าตารางของคุณ


0

วิธีที่ฉันพบว่า "แก้ปัญหา" ปัญหานี้ค่อนข้างน่ารำคาญ แต่มีสคริปต์ที่จัดการกับมัน

โดยพื้นฐานแล้วคุณต้องใช้ibdata1และib_logfile*ไฟล์ที่จะหายไป (มีการแมปคีย์ต่างประเทศและอื่น ๆ อีกมากมาย) วิธีเดียวที่ปลอดภัยในการทำเช่นนี้คือการส่งออกฐานข้อมูลทั้งหมดของคุณหยุด mysql ลบไฟล์เริ่ม mysql จากนั้นนำเข้าไฟล์

สคริปต์ที่จะช่วยแก้ปัญหานี้คือhttps://github.com/uberhacker/shrink-ibdata1แม้ว่าระบุวัตถุประสงค์ของสคริปต์นี้จะแตกต่างก็ไม่สามารถแก้ปัญหาได้


0

วิธีเดียวที่ได้ผลสำหรับฉันคือ:

  1. สร้างตารางที่คล้ายกัน
  2. คัดลอกไฟล์. fr และ. idb ของตารางที่คล้ายกันใหม่ไปยังชื่อของตารางที่เสียหาย
  3. แก้ไขสิทธิ์
  4. รีสตาร์ท MariaDB
  5. วางตารางที่เสียหาย

-1

หากคุณมีปัญหานี้และคุณไม่มีตัวเลือกอื่นให้เปลี่ยนเครื่องยนต์เป็นเอนจิ้นอื่นเช่น 'myisam' ให้ลองสร้างตาราง

ข้อจำกัดความรับผิดชอบ: ไม่ใช่คำตอบที่ถูกต้องเนื่องจากคุณอาจมีข้อ จำกัด ของคีย์ต่างประเทศซึ่งเอ็นจินจัดเก็บข้อมูลอื่นจะไม่รองรับ เครื่องมือจัดเก็บข้อมูลทุกตัวมีความพิเศษในการจัดเก็บและเข้าถึงข้อมูลจุดเหล่านี้จะต้องนำมาพิจารณาด้วย


-1

โปรดทิ้งช้อนโต๊ะก่อนนำเข้า

ฉันมีวิธีแก้ปัญหาเดียวกันอยู่ด้านล่าง

  1. ก่อนอื่นคุณต้องวางชื่อฐานข้อมูลของคุณ ถ้าฐานข้อมูลของคุณไม่ได้ลบออกคุณก็ไหลให้ฉัน สำหรับระบบ Windows ไดเร็กทอรีของคุณจะเป็น C: / xampp / mysql / data / yourdabasefolder ลบ "yourdabasefolder"

  2. อีกครั้งคุณต้องสร้างฐานข้อมูลใหม่และนำเข้าไฟล์ sql เก่าของคุณ มันจะเวิร์ค

ขอบคุณ


-1

ฉันต้องค้นหาไดเร็กทอรีข้อมูล MySQL ของฉัน:

แสดงตัวแปรที่ตัวแปร _ ชื่อเหมือน "% dir"

จากนั้นบังคับให้ลบฐานข้อมูลนั้น:

sudo rm -rf


-1

คุณสามารถเรียกใช้แบบสอบถามต่อไปนี้ในฐานะผู้ใช้รูท mysql

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