簡體   English   中英

mysqldump: Got error: 1146: Table 'myDatabase.table' 在使用 LOCK TABLES 時不存在

[英]mysqldump: Got error: 1146: Table ' myDatabase.table' doesn't exist when using LOCK TABLES

我正在嘗試轉儲我的數據庫:

mysqldump myDatabase > myDatabase.sql

但我收到此錯誤:

mysqldump: Got error: 1146: Table 'myDatabase.table' doesn't exist when using LOCK TABLES

當我去mysql時:

 mysql -u admin -p

我查詢表:

show tables;

我看到了桌子。 但是當我查詢該特定表時:

 select * from table;

我犯了同樣的錯誤:

ERROR 1146 (42S02): Table 'myDatabase.table' doesn't exist

我試圖修復:

mysqlcheck -u admin -p --auto-repair --check --all-databases

但得到同樣的錯誤:

Error    : Table 'myDatase.table' doesn't exist

為什么我會收到此錯誤或如何修復此錯誤?

我會非常感謝你的幫助

對我來說,問題是通過轉到/var/lib/mysql (或存儲原始數據庫文件的任何地方)並刪除錯誤表示不存在的表的 .frm 文件來解決的。

我在服務器上執行 mysqldump 時遇到問題,我意識到如果長時間不使用這些表,那么我就不需要這些表(已關閉的舊應用程序)。

案例:無法用mysqldump做備份,有些表不再需要並且已損壞

起初我得到損壞表的列表

mysqlcheck --repair --all-databases -u root -p"${MYSQL_ROOT_PASSWORD}" > repair.log

然后我用一個 Python 腳本分析日志,該腳本在 stdin 中獲取它(另存為 ex.analyze.py 並執行 cat repair.log| python3 analyze.py)

#!/usr/bin/env python3
import re
import sys

lines = sys.stdin.read().split("\n")
tables = []

for line in lines:
    if "Error" in line:
        matches = re.findall('Table \'([A-Za-z0-9_.]+)\' doesn', line)
        tables.append(matches[0])

print('{', end='')
print(",".join(tables), end='')
print('}', end='')

您將獲得損壞的數據庫列表。

使用 mysqldump 進行導出

mysqldump -h 127.0.0.1 -u root  -p"${MYSQL_ROOT_PASSWORD}"  -P 3306  --skip-lock-tables --add-drop-table --add-drop-database --add-drop-trigger  --all-databases --ignore-table={table1,table2,table3 - here is output of the previous command} > dump.sql

關閉數據庫,將/var/lib/mysql移動到/var/lib/mysql-backup,啟動數據庫。

在干凈的數據庫上只需導入 dump.sql,重新啟動數據庫,享受一個沒有損壞表的實例。

我最近在升級到 16.04 LTS 的 Ubuntu 服務器上遇到了類似的問題。 在此過程中,MySQL 被 MariaDB 取代,顯然舊數據庫無法自動轉換為兼容格式。 安裝程序將原始數據庫從/var/lib/mysql/var/lib/mysql-5.7

有趣的是,原始表結構存在於.frm文件中的新/var/lib/mysql/[database_name] 新的 ibdata 文件是 12M,2 個日志文件是 48M,從中我得出結論,數據必須在那里,但后來我發現初始化一個完全空的數據庫會導致類似的大小,所以這不是指示性的。

我在 VirtualBox 上安裝了 16.04 LTS,在其上安裝了 MySQL,然后復制了mysql-5.7目錄並將其重命名為mysql 啟動服務器並使用mysqldump轉儲所有內容。 刪除原服務器上的/var/lib/mysql ,用mysql_install_db初始化一個新的,並從mysqldump中導入sql文件。

注意:我不是最初進行系統升級的人,所以可能缺少一些細節,但症狀與您的相似,所以也許這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM