MySQL> ตารางไม่มีอยู่ แต่มันจะ (หรือควร)


261

ฉันเปลี่ยนข้อมูลของการติดตั้ง MySQL และฐานทั้งหมดย้ายอย่างถูกต้องยกเว้นหนึ่ง ฉันสามารถเชื่อมต่อและUSEฐานข้อมูล SHOW TABLESส่งคืนตารางทั้งหมดให้ฉันอย่างถูกต้องและไฟล์ของแต่ละตารางนั้นมีอยู่ในไดเรกทอรีข้อมูล MySQL

อย่างไรก็ตามเมื่อฉันลองSELECTบางสิ่งจากตารางฉันได้รับข้อความแสดงข้อผิดพลาดว่าไม่มีตารางอยู่ แต่นี่ไม่สมเหตุสมผลเนื่องจากฉันสามารถแสดงตารางเดียวกันผ่านการSHOW TABLESแถลง

ฉันเดาว่าSHOW TABLESรายชื่อไฟล์มีอยู่ แต่ไม่ได้ตรวจสอบว่าไฟล์เสียหายหรือไม่ ดังนั้นฉันสามารถแสดงรายการไฟล์เหล่านั้น แต่ไม่สามารถเข้าถึงได้

อย่างไรก็ตามมันเป็นเพียงการคาดเดา ฉันไม่เคยเห็นสิ่งนี้มาก่อน ตอนนี้ฉันไม่สามารถรีสตาร์ทฐานข้อมูลเพื่อทำการทดสอบได้ แต่นั่นเป็นเพียงการคาดเดาฉันไม่เคยเห็นสิ่งนี้มาก่อน

ไม่มีใครรู้ว่าทำไมสิ่งนี้เกิดขึ้น?

ตัวอย่าง:

mysql> SHOW TABLES;
+-----------------------+
| Tables_in_database    |
+-----------------------+
| TABLE_ONE             |
| TABLE_TWO             |
| TABLE_THREE           |
+-----------------------+
mysql> SELECT * FROM TABLE_ONE;
ERROR 1146 (42S02): Table 'database.TABLE_ONE' doesn't exist

คุณกู้คืนฐานข้อมูลจากข้อมูลสำรองหรือไม่ หรือคุณเพิ่งคัดลอกไฟล์ db? คุณมีสิทธิ์รูทไปยังเซิร์ฟเวอร์ mysql หรือไม่?
alinoz

เพิ่งคัดลอกไฟล์! ใช่ฉันมีสิทธิ์เข้าถึงทุกสิ่ง
johnsmith

คุณลองได้ไหม: mysql_fix_privilege_tables
alinoz

4
ตาราง Innodb เหล่านี้คืออะไร
Paul Dixon

1
ใช่ตารางทั้งหมดเป็น InnoDB ไม่ดีสำหรับฉันที่ไม่ได้พูดมัน!
johnsmith

คำตอบ:


263

ในกรณีที่ทุกคนยังใส่ใจ:

ฉันมีปัญหาเดียวกันหลังจากคัดลอกไดเรกทอรีฐานข้อมูลโดยตรงโดยใช้คำสั่ง

cp -r /path/to/my/database /var/lib/mysql/new_database

หากคุณทำเช่นนี้กับฐานข้อมูลที่ใช้InnoDBตารางคุณจะได้รับข้อผิดพลาด 'ไม่มีตาราง' บ้านี้กล่าวถึงข้างต้น

ปัญหาคือคุณต้องการib*ไฟล์ในรูทของ MySQL datadir (เช่นibdata1, ib_logfile0และib_logfile1)

เมื่อฉันคัดลอกสิ่งที่มันทำงานให้ฉัน


27
ช่วยชีวิตฉันไว้! สำหรับคนอื่นอย่าลืมเขียนทับไฟล์ ib * ที่มีอยู่หากคุณพยายามคัดลอกไปยังการติดตั้งใหม่ สำรองข้อมูล mysql / directory ที่มีอยู่ของคุณแทนที่ด้วยอันเก่าที่คุณต้องการกู้คืน mysqldump ทุกอย่างแล้วเรียกคืน mysql ที่สดใหม่ จากนั้นคุณสามารถนำเข้า mysqldumps ได้อย่างถูกต้อง
แมทธิว

1
บน Mac เพื่อทำซ้ำฐานข้อมูลของฉันภายในเครื่องนอกเหนือจากการคัดลอกไฟล์ ibdata (อยู่ถัดจาก dir ฐานข้อมูล) ฉันต้องไปchown _mysql:wheelที่ databasename dir, ibdata และไฟล์ทั้งหมดใน dir (ใช้chown -R ...) ในทำนองเดียวกันการอนุญาตไม่ถูกต้องภายใน dir ดังนั้นchmod -R 660 databasenameจำเป็นต้องได้รับตารางเพื่อแสดงในฐานข้อมูล
Dylan Valade

4
ขอบคุณไมค์ เพียงชี้แจงให้ชัดเจนคุณจะต้องเริ่มบริการ mysql ใหม่เพื่อให้ทำงานได้ อย่างน้อยฉันก็ทำและขอบคุณพระเจ้าที่ใช้งานได้ บันทึกข้อมูลจำนวนมากที่นั่น!
Nick Martin

15
หมายเหตุ: อย่าลืมใช้chown!!! ดังนั้นทั้งหมดหลังจากcpใช้คำสั่งนี้ ->chown mysql:mysql /var/lib/mysql/ -R
K-Gun

1
หมายเหตุ 2: อย่าลืมที่จะใช้สิทธิ์ที่เหมาะสม ในกรณีของฉัน sudo chmod -R 600 /var/lib/mysql
สิงหาคม

45

สำหรับฉันใน Mac OS (การติดตั้ง MySQL DMG) การรีสตาร์ทเซิร์ฟเวอร์ MySQL แบบง่าย ๆ แก้ปัญหาได้ ฉันคาดเดาการจำศีลที่เกิดขึ้น


ขอบคุณแก้ไขปัญหาเดียวกันสำหรับฉันเช่นกัน ฉันเกิดขึ้นหลังจากที่เครื่องของฉันปิดตัวลงเนื่องจากการสูญเสียพลังงานอย่างฉับพลัน หลังจากรีสตาร์ทเครื่องครั้งแรก / เริ่มต้น MySQL ฉันได้รับข้อผิดพลาด จากนั้นฉันอ่านคำตอบนี้ ฉันหยุด / เริ่มต้น MySQL ผ่านการตั้งค่าระบบและได้รับการแก้ไข
Jeff Evans

2
sudo /usr/local/mysql/support-files/mysql.server restart
laffuste

ในทำนองเดียวกัน ฉันพบปัญหานี้หลังจากอัปเกรดเป็น macOS Sierra 10.12.6 ไม่แน่ใจว่ามีการเชื่อมโยงสาเหตุ แต่เวลาดูเหมือนน่าสงสัย
Dave Mulligan

ขอบคุณทำงานได้บ้าง ฉันรีสตาร์ทบริการ mysql (5.6, windows) จากนั้นcheck table TABLE_ONE;ฉันพบข้อผิดพลาด "พาร์ติชัน p2 ส่งคืนข้อผิดพลาด", "idx_blah_1 ถูกทำเครื่องหมายว่าเสียหาย" และ "idx_blah_2 ถูกทำเครื่องหมายว่าเสียหาย" ตอนนี้ฉันกลับไปทำงานoptimize table TABLE_ONE;และได้รับข้อผิดพลาด "ตาราง 'ฐานข้อมูล TABLE_ONE ไม่มีอยู่"
โอมาร์

ใช้ MySLQ บน Mojave การรีสตาร์ทผ่านแผงการตั้งค่าระบบไม่ทำงาน ฉันต้องรีสตาร์ทผ่านบรรทัดคำสั่ง
Cortex

30

ฉันพบปัญหานี้เมื่อกรณีสำหรับชื่อตารางที่ฉันใช้ปิดอยู่ ดังนั้นตารางเรียกว่า 'db' แต่ฉันใช้ 'DB' ในคำสั่ง select ตรวจสอบให้แน่ใจกรณีเดียวกัน


13
+1 ชื่อฟิลด์ไม่คำนึงถึงขนาดตัวพิมพ์ แต่เป็นชื่อตาราง ข้อผิดพลาดทั่วไปและน่ารำคาญมาก
GolezTrol

27

ข้อผิดพลาดนี้ยังสามารถเกิดขึ้นได้เมื่อตั้งค่าlower_case_table_namesเป็น1แล้วลองเข้าถึงตารางที่สร้างขึ้นด้วยค่าเริ่มต้นสำหรับตัวแปรนั้น ในกรณีนี้คุณสามารถเปลี่ยนกลับเป็นค่าก่อนหน้าและคุณจะสามารถอ่านตารางได้


4
บิตนี้ฉัน ฉันคืนค่ารีสตาร์ทฐานข้อมูลส่งออกตารางตั้งค่ากลับเป็น 1 รีสตาร์ทฐานข้อมูลนำเข้าตารางอีกครั้งและทุกอย่างทำงานได้อีกครั้ง
wmarbut

17
  1. หยุด mysqld
  2. สำรองโฟลเดอร์ MySQL: cp -a /var/lib/mysql /var/lib/mysql-backup
  3. คัดลอกโฟลเดอร์ฐานข้อมูลจากเครื่องเก่าไปยัง /var/lib/mysql
  4. แทนที่ ib * (ib_logfile *, ibdata) จากฐานข้อมูลเก่า
  5. เริ่ม mysqld
  6. dump dabase
  7. mysqldump >dbase.mysql
  8. หยุดบริการ mysql
  9. ลบ /var/lib/mysql
  10. เปลี่ยนชื่อ/var/lib/mysql-backupเป็น/var/lib/mysql
  11. เริ่ม mysqld
  12. สร้างฐานข้อมูล
  13. mysqldump < dbase.mysql

ในกรณีของฉันฉันต้องทำเช่นกัน: 10.5 ลบไดเรกทอรี <db_name> จากใต้ / var / lib / mysql /
Tony the Tech

มันไม่ทำงาน :( table 'tablename.wp_posts' ไม่มีอยู่
Jahirul Islam Mamun

14

กรุณาเรียกใช้แบบสอบถาม:

SELECT 
    i.TABLE_NAME AS table_name, 
    LENGTH(i.TABLE_NAME) AS table_name_length,
    IF(i.TABLE_NAME RLIKE '^[A-Za-z0-9_]+$','YES','NO') AS table_name_is_ascii
FROM
    information_schema.`TABLES` i
WHERE
    i.TABLE_SCHEMA = 'database'

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


โพสต์ที่มีประโยชน์มากขอบคุณ! แต่ตารางทั้งหมดเป็น ASCII ที่มีความยาวชื่อที่ถูกต้อง
johnsmith

11

ฉันเพิ่งใช้เวลาสามวันกับฝันร้ายนี้ เป็นการดีที่คุณควรมีข้อมูลสำรองที่คุณสามารถกู้คืนได้จากนั้นปล่อยตารางที่เสียหาย ข้อผิดพลาดประเภทต่าง ๆ เหล่านี้อาจทำให้ ibdata1 ของคุณมีขนาดใหญ่ขึ้น( ขนาด 100GB + สำหรับตารางขนาดเล็ก)

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

ดังนั้นในการแก้ปัญหาให้ไปที่/var/log/mysql/database_name/และลบ table_name. *

จากนั้นพยายามที่จะทิ้งตารางทันที การทำเช่นนี้ควรจะได้ผล ตอนนี้คืนค่าฐานข้อมูลไปยังฐานข้อมูลใหม่และสร้างตารางที่หายไป จากนั้นดัมพ์ฐานข้อมูลที่เสียหาย

ในกรณีของเราเรายังได้รับmysql has gone awayข้อความอย่างต่อเนื่องเป็นระยะ ๆ ในฐานข้อมูลทั้งหมด เมื่อฐานข้อมูลที่เสียหายถูกลบออกทุกอย่างก็กลับสู่ปกติ


ขอบคุณ Andy ฉันได้รับเบาะแสสำหรับปัญหาที่ฉันเผชิญ ฉันย้าย ibdata1 จากที่อื่นที่อยู่ในไดรฟ์ C เป็นไดรฟ์ D เพื่อประหยัดพื้นที่กระทืบมากกว่าไดรฟ์ C โชคดีที่ฉันได้รับ ibdata1 (พร้อมด้วยไฟล์ ib_logfile1 และ ib_logfile0) ในไดรฟ์ D ของฉันหลังจากอ่านความคิดเห็นของคุณ ตอนนี้จะดูจากที่ฉันย้ายไฟล์เหล่านี้และเรียกคืนที่นั่น หวังว่าโต๊ะของฉันจะกลับมา
AKS

คุณ "พยายามที่จะถ่ายโอนข้อมูลในตารางทันที" ได้อย่างไร ฉันมีปัญหาเดียวกันไม่มีการสำรองดังนั้นฉันกำลังมองหาวิธีที่จะได้รับโครงสร้างตารางอย่างน้อย แต่ถ้าคุณลบไฟล์ออกจากไดเรกทอรีแล้วทุกอย่างก็หายไป?
mmvsbg

มันทำได้! ขอบคุณ
jstuardo

11

ฉันไม่ทราบสาเหตุ แต่ในกรณีของฉันฉันแก้ไขเพียงแค่ปิดใช้งานและเปิดใช้งานการตรวจสอบปุ่มต่างประเทศ

SET FOREIGN_KEY_CHECKS=0;
SET FOREIGN_KEY_CHECKS=1;

4
ขอบคุณพี่ชาย! ในกรณีของฉันฉันต้องปิดการใช้งาน foreign_key_checks และดำเนินการแบบสอบถามแบบใช้เลือกข้อมูลบนตารางที่หายไปจากนั้นตารางกลับมาเป็นปกติอีกครั้ง ฉันคิดว่ามีการละเมิดคีย์ต่างประเทศในแถวข้อมูลเพราะฉันมีโปรแกรมขัดจังหวะก่อนที่ปัญหานี้จะเกิดขึ้น
Egist Li

ยังไม่สามารถค้นหาสาเหตุได้ แต่ยังแก้ไขปัญหาของฉันได้ด้วย
Miroslav Glamuzina

11

ฉันมีปัญหาเดียวกันและฉันค้นหา 2-3 วัน แต่วิธีแก้ปัญหาสำหรับฉันนั้นโง่จริงๆ

รีสตาร์ท mysql

$ sudo service mysql restart

ตอนนี้ตารางสามารถเข้าถึงได้


1
ใช้งานได้จริงสำหรับฉันแม้ว่าคำสั่งของฉันจะแตกต่างกันเล็กน้อย: $ sudo /usr/local/mysql/support-files/mysql.server เริ่มระบบใหม่
KirstieBallance

นี่ควรจะอยู่ด้านบนของรายการสิ่งต่าง ๆ เพื่อลองเดา คุ้มค่ากับการยิงและในกรณีของฉันมันใช้ได้
Coroos

7

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

SELECT * FROM `table`

ฉันทำการเปลี่ยนแปลงสองอย่าง
1. ) ทำให้ชื่อตารางเป็นตัวพิมพ์เล็ก - ฉันรู้ !!
2. ) ใช้สัญลักษณ์เฉพาะอ้าง = ` : มันเป็นปุ่มด้านบน TAB ของคุณ

วิธีแก้ปัญหาฟังดูไร้สาระ แต่มันใช้ได้และมันก็เป็นตอนเย็นวันเสาร์และฉันทำงานมาตั้งแต่ 9 โมงเช้า - ดังนั้นฉันจะรับมัน :)

โชคดี.


1
เพียงแค่ FYI - ตารางคือ MyISAM ไม่ใช่ INNO
PlanetUnknown

1
`มันถูกเรียกว่า backtick
Gary

7

ฉันมีปัญหานี้หลังจากอัปเกรด WAMP แต่ไม่มีการสำรองฐานข้อมูล

สิ่งนี้ใช้ได้กับฉัน:

  1. หยุด WAMP ใหม่

  2. คัดลอกไดเร็กทอรีฐานข้อมูลที่คุณต้องการและไฟล์ ibdata1 จากการติดตั้ง WAMP แบบเก่า

  3. ลบib_logfile0และib_logfile1

  4. เริ่ม WAMP

ตอนนี้คุณควรจะสามารถสำรองฐานข้อมูลของคุณได้แล้ว อย่างไรก็ตามหลังจากเซิร์ฟเวอร์ของคุณรีสตาร์ทอีกครั้งคุณจะยังคงมีปัญหา ดังนั้นตอนนี้ติดตั้ง WAMP และนำเข้าฐานข้อมูลของคุณ


ฉันหวังว่าผู้คนจะระบุว่าไฟล์ที่พวกเขาอ้างอิงอยู่
ที่ไหน

มาที่นี่จากรูปภาพ mysql docker ที่ไม่มีตารางที่อ่าน สามารถยืนยันได้ว่าการหยุดภาพลบไฟล์เหล่านี้และรีสตาร์ทให้การเข้าถึงอีกครั้ง
Anthony Harley

7

ลองเรียกใช้แบบสอบถาม sql เพื่อละทิ้ง tablespace ก่อนที่จะคัดลอกไฟล์ idb:

ALTER TABLE mydatabase.mytable DISCARD TABLESPACE;

คัดลอกไฟล์ idb

ALTER TABLE mydatabase.mytable IMPORT TABLESPACE;

เริ่ม MySql ใหม่


คุณได้ช่วยฉัน :)
l00k

@ I0pan ฉันลองทำตามขั้นตอนเดียวกับที่กล่าวไว้ แต่หลังจากเปลี่ยนตาราง mydatabase.mytable ตารางนำเข้า TABLESPACE; มันแสดงตารางไม่อยู่ แต่มันจะ :(
Syed Asad Abbas Zaidi

5

หลังจากติดตั้ง MySQL ฉันมีปัญหาเดียวกันนี้ดูเหมือนว่าระหว่างการติดตั้งไฟล์การกำหนดค่าบางอย่างที่เก็บข้อมูลเกี่ยวกับไฟล์บันทึกของ InnoDB ไฟล์เหล่านี้ ib_logfile * (เป็นไฟล์บันทึกใช่ไหม) ถูกเขียนทับ เพื่อแก้ปัญหานี้ฉันเพิ่งลบไฟล์ ib_logfile *


5

สิ่งที่ได้ผลสำหรับฉันแค่วางโต๊ะแม้ว่ามันจะไม่มีอยู่ก็ตาม จากนั้นฉันสร้างตารางขึ้นใหม่และ repopulated จาก sql dump ที่ทำไปก่อนหน้านี้

ต้องมีชื่อตารางบางส่วนและเป็นไปได้มากที่ยังคงมีอยู่ในนั้นจนกว่าฉันจะลดลง


ฉันได้สร้างโพรซีเดอร์ขึ้นมาแล้วจึงจำเป็นต้องมีมุมมอง ดังนั้นฉันจึงเปลี่ยนชื่อกระบวนงานเป็น zzz บางอันในตอนท้ายเพื่อที่ฉันจะได้ใช้อ้างอิงและสร้างมุมมองชื่อเดียวกัน ไม่สามารถรับ SELECT เพื่อดูได้รับข้อผิดพลาดนี้ <br> คัดลอกรหัสไปยังไฟล์ข้อความลบทั้งมุมมองและขั้นตอน สร้างมุมมองใหม่และทุกอย่างก็ดี <br> ใช่แล้ว - เจ็ดปีต่อมา - ยังมีเกมประเภทผี / แคชที่เกิดขึ้นในบางกรณี
Roger Krueger

5

พบปัญหาที่คล้ายกันกับตารางผี โชคดีที่มีการถ่ายโอนข้อมูลของ SQL มาก่อนความล้มเหลว

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

  1. หยุด mySQL
  2. ย้ายไฟล์ ib * จาก /var/mysqlออกการสำรองข้อมูล
  3. ลบ /var/mysql/{dbname}
  4. รีสตาร์ท mySQL
  5. สร้างฐานข้อมูลเปล่า
  6. กู้คืนไฟล์ดัมพ์

หมายเหตุ: ต้องการไฟล์ดัมพ์


ผมคิดว่าคุณหมายถึง/var/lib/mysqlแทน/var/mysql
knocte

การลบไดเรกทอรีฐานข้อมูลและเรียกคืนจากการสำรองข้อมูลเป็นสิ่งเดียวที่ช่วยฉันได้
Jano

3
  1. ทำ mysqldump ไปยังฐานข้อมูล:

    mysqldump -u user -ppass dbname > D:\Back-ups\dbname.sql
  2. กู้คืนฐานข้อมูล

    mysql -u user -ppass dbname < D:\Back-ups\dbname.sql

ตอนนี้ตารางทั้งหมดในฐานข้อมูลจะถูกกู้คืนอย่างสมบูรณ์ ลอง..

SELECT * FROM dbname.tablename;

2

ฉันติดตั้ง MariaDB บนคอมพิวเตอร์ใหม่หยุดบริการ Mysql เปลี่ยนชื่อโฟลเดอร์ข้อมูลเป็นข้อมูล - ฉันแก้ไขปัญหาการคัดลอกเพียง Mysql \ data \ table_foldersและ ibdata1 จากโฟลเดอร์ข้อมูล MySql HD ที่ผิดพลาดไปยังโฟลเดอร์ข้อมูล mysql ที่ติดตั้งใหม่

ฉันข้ามib_logfile0และib_logfile1 (ไม่เช่นนั้นเซิร์ฟเวอร์จะไม่เริ่มให้บริการ)

เริ่มบริการ mysql

จากนั้นเซิร์ฟเวอร์กำลังทำงาน


2

ดูเหมือนว่าปัญหาจะต้องทำ (อย่างน้อยก็ในของฉันและอีกไม่กี่คน) ที่มีไฟล์บันทึก innodb ที่ไม่ถูกต้อง (เสียหาย?) โดยทั่วไปแล้วพวกเขาเพียงแค่ต้องสร้างใหม่

นี่คือวิธีแก้ปัญหาซึ่งส่วนใหญ่ต้องการการรีสตาร์ท mysql

  • สร้างไฟล์บันทึกของคุณใหม่ ( ลบและรีสตาร์ท mysql )
  • ปรับขนาดไฟล์บันทึกของคุณ (MySql 5.6+ จะสร้างไฟล์ให้คุณใหม่)
  • หากคุณกำลังทำการโยกย้ายข้อมูลบางประเภทตรวจสอบให้แน่ใจว่าคุณได้โยกย้ายไฟล์ที่ถูกต้องและให้สิทธิ์ตามที่คนอื่นได้ระบุไว้แล้ว
  • ตรวจสอบการอนุญาตของข้อมูลและไฟล์บันทึกของคุณ, ซึ่ง mysql เป็นเจ้าของทั้งสอง
  • หากสิ่งอื่นล้มเหลวคุณอาจต้องสร้างฐานข้อมูลใหม่

2

นี่คือสถานการณ์อื่น (การอัพเกรดเวอร์ชั่น) :

ฉันติดตั้งระบบปฏิบัติการใหม่ (Mac OS El Captain) และติดตั้ง mysql เวอร์ชั่นใหม่ (โดยใช้ homebrew) เวอร์ชันที่ติดตั้ง (5.7) นั้นใหม่กว่ารุ่นก่อนหน้าของฉัน จากนั้นฉันก็คัดลอกไปที่ตารางรวมถึงไฟล์ ib * และรีสตาร์ทเซิร์ฟเวอร์ ฉันเห็นตารางใน mysql workbench แต่เมื่อฉันพยายามเลือกอะไรฉันได้ "Table ไม่มีอยู่"

สารละลาย:

  1. หยุดเซิร์ฟเวอร์ mysql เช่นmysql.server stopหรือbrew services stop mysql
  2. เริ่มต้นเซิร์ฟเวอร์โดยใช้mysqld_safe --user=mysql --datadir=/usr/local/var/mysql/(เปลี่ยนเส้นทางตามต้องการ)
  3. ทำงานmysql_upgrade -u root -p password(ในหน้าต่างเทอร์มินัลอื่น)
  4. ปิดเซิร์ฟเวอร์ที่ทำงานอยู่ mysqladmin -u root -p password shutdown
  5. รีสตาร์ทเซิร์ฟเวอร์ในโหมดปกติmysql.server startหรือbrew services start mysql

เอกสารที่เกี่ยวข้องที่นี่


พยายามมากจริงๆ แต่นี่เป็นสิ่งเดียวที่ช่วยฉันได้มากหลังจากที่ฉันย้ายไปยังเซิร์ฟเวอร์ใหม่ที่มีฐานข้อมูลทั้งหมดของฉัน ขอบคุณ! (Ubuntu 16.04)
Falk

2

ในกรณีของฉันฉันได้กำหนดทริกเกอร์บนโต๊ะแล้วพยายามแทรกแถวในตาราง ดูเหมือนว่าจะก่อให้เกิดข้อผิดพลาดอย่างใดและแทรกจึงให้ข้อผิดพลาดตารางไม่อยู่


1
มันใช้งานได้สำหรับฉัน! ตรวจสอบแต่ละทริกเกอร์และพบหนึ่งทริกเกอร์ที่ต้องปรับปรุงและใช้งานได้!
Paresh

1

เป็นไปได้ว่าคุณมีตัวละครที่ซ่อนอยู่ในชื่อตารางของคุณ สิ่งเหล่านั้นจะไม่ปรากฏขึ้นเมื่อคุณแสดงตาราง คุณสามารถทำ "SHOW CREATE TABLE TABLE_ONE" และแท็บกรอก "TABLE_ONE" และดูว่ามันทำให้ตัวละครที่ซ่อนอยู่ นอกจากนี้คุณได้ลองวางและสร้างตารางใหม่หรือไม่ เพียงเพื่อให้แน่ใจว่าไม่มีอะไรผิดปกติกับสิทธิ์และไม่มีตัวละครที่ซ่อนอยู่


การกรอกแท็บไม่ช่วยได้และฉันไม่สามารถแสดงสร้างตารางได้เนื่องจากตาราง "ไม่มีอยู่" จากนรก
johnsmith

1

ปัญหาเดียวกันหลังจากการนำเข้าข้อมูลสำรอง TimeMachine ทางออกของฉันคือหยุดเซิร์ฟเวอร์ MySQL และแก้ไขสิทธิ์การอ่าน - เขียนบนไฟล์ ib *


1

อีกหนึ่งคำตอบที่ฉันคิดว่าคุ้มค่าที่จะมาที่นี่ (เพราะฉันมาที่นี่พร้อมกับปัญหาเดียวกันและนี่กลายเป็นคำตอบสำหรับฉัน):

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

สิ่งที่เห็นได้ชัดคือมือใหม่ แต่สิ่งต่าง ๆ เช่น"ผู้ใช้" กับ "ผู้ใช้"สามารถเดินทางไปกับผู้คนได้และฉันคิดว่ามันจะเป็นคำตอบที่มีประโยชน์ในรายการที่นี่ :)


1

ในกรณีของฉันเมื่อฉันนำเข้าไฟล์ sql ที่ส่งออกฉันได้รับข้อผิดพลาดเช่นตารางไม่มีอยู่สำหรับคิวรีสร้างตาราง

ฉันรู้ว่ามีขีดล่างในชื่อฐานข้อมูลของฉันและ mysql ก็ใส่ตัวละครหนีก่อนหน้านั้น

ดังนั้นฉันจึงลบเครื่องหมายขีดล่างในชื่อฐานข้อมูลออก

หวังว่ามันจะช่วยคนอื่นด้วย


1

ตารางของฉันถูกเปลี่ยนชื่อ' Customers'เป็นพื้นที่ว่าง

นี่หมายถึง

a) การสืบค้นเสียหาย

b) ตารางไม่ปรากฏตามที่คาดหวังตามลำดับตัวอักษรของตารางของฉันซึ่งในความตื่นตระหนกของฉันหมายความว่าฉันไม่เห็น!

RENAME TABLE ` Customer` TO `Customer`;

1

ในกรณีของฉันมันเป็นSQLCA.DBParmพารามิเตอร์

ฉันใช้

SQLCA.DBParm = "Databse = "sle_database.text""

แต่มันจะต้องเป็น

SQLCA.DBParm = "Database='" +sle_database.text+ "'"

คำอธิบาย:

คุณจะรวมสามสาย:

 1. Database='              -  "Database='"

 2. (name of the database)  - +sle_database.text+

 3. '                       - "'" (means " ' "  without space)

อย่าใช้ช่องว่างใน quatermarks ขอบคุณเพื่อนร่วมงานของฉัน ม.ค.



1

คัดลอกเฉพาะibdata1ไฟล์จากไดเรกทอรีข้อมูลเก่าของคุณ ห้ามคัดลอกib_logfile1หรือib_logfile0ไฟล์ นั่นจะทำให้ MySQL ไม่สามารถเริ่มต้นได้อีกต่อไป


1

มาข้ามปัญหาเดียวกันวันนี้ นี่เป็นปัญหา mysql "Identifier Case Sensitivity"

กรุณาตรวจสอบไฟล์ข้อมูลที่เกี่ยวข้อง เป็นไปได้อย่างมากว่าชื่อไฟล์จะเป็นตัวพิมพ์เล็กในระบบไฟล์ แต่ชื่อตารางที่แสดงในคำสั่ง "show tables" จะเป็นตัวพิมพ์ใหญ่ หากตัวแปรระบบ " lower_case_table_names" เป็น 0 แบบสอบถามจะส่งคืน "ไม่มีตาราง" เนื่องจากการเปรียบเทียบชื่อจะต้องตรงตามตัวพิมพ์ใหญ่และตัวพิมพ์เล็กเมื่อ " lower_case_table_names" เป็น 0


1

ฉันมีปัญหาเดียวกันใน windows นอกจากการคัดลอกไฟล์ ib * และไดเรกทอรี mysql ภายใต้ไดเรกทอรีข้อมูลฉันยังต้องจับคู่ไฟล์ my.ini

ไฟล์ my.ini จากการติดตั้งก่อนหน้าของฉันไม่มีบรรทัดต่อไปนี้:

innodb-page-size=65536

แต่การติดตั้งใหม่ของฉันทำได้ อาจเป็นเพราะฉันไม่มีตัวเลือกในโปรแกรมติดตั้งรุ่นเก่า ฉันลบสิ่งนี้และเริ่มบริการและตารางทำงานตามที่คาดไว้ ในระยะสั้นตรวจสอบให้แน่ใจว่าไฟล์ my.ini ใหม่เป็นแบบจำลองของไฟล์เก่าโดยมีข้อยกเว้นเพียงอย่างเดียวคือ datadir, plugin-dir และ port # ขึ้นอยู่กับการติดตั้งใหม่ของคุณ

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