“顯示事件”失敗並顯示“錯誤程式碼:1545。無法打開 mysql.event”
我安裝了 MariaDB 5.5.56(預設的 CentOS 7 軟體包)。
虛擬機執行在一台主機上,該主機在訪問其儲存時遇到了一些問題。這導致作業系統以只讀方式重新掛載一些文件系統。
該數據庫是一個複制從屬數據庫,並通過從主數據庫導入備份來重建。(在重新啟動和 之後
fsck
,使 root fs 和其他人恢復讀寫)(似乎沒有重大數據損壞,但由於重複條目而複製失敗,因此恢復似乎更安全)
mysqldump
失敗了mysqldump: Couldn't execute 'show events': Failed to open mysql.event (1545)
。事件目前未使用,但包含在後面,以防將來使用。
我試過執行
REPAIR TABLE mysql.event
,但SHOW EVENTS
仍然失敗Error Code: 1545. Failed to open mysql.event
。
SELECT * from mysql.event
在主伺服器上工作並且不返回任何行。在主伺服器上(不受儲存問題的影響並執行較舊的 MySQL 版本,
SHOW EVENTS
按預期工作並且不返回任何結果)重新啟動 MariaDB 後,
SHOW TABLES
現在失敗並顯示Error Code: 1577. Cannot proceed because system tables used by Event Scheduler were found damaged at server start
.SELECT * from mysql.event
仍然有效,返回 0 行。
mysqlcheck --all-databases --check-upgrade -p
為所有表返回“OK”,包括 mysql.event。
首先,讓
mysql.event
桌子工作。(如果有效,請考慮它的工作SELECT * from mysql.event
)。按此順序嘗試這些(在每個步驟後檢查)
REPAIR TABLE mysql.event
mysqlcheck mysql -p # use the repair options if it finds issues
myisamchk /var/lib/mysql/mysql/event.MYI
# 路徑取決於安裝和配置。發現問題時需要修復選項。- 刪除並重新創建 mysql.event (
SHOW CREATE TABLE mysql.event;
在同一 MariaDB / MySQL 版本的工作版本上獲取語句,或從這個答案中獲取)重新啟動數據庫並檢查是否仍然存在錯誤。(在 SELECT 工作之後)
使用 mysql.event 工作(如果 SELECT 工作)並且
SHOW EVENTS
仍然失敗:
mysql_upgrade -p --force
# 這似乎是擺脫 Error Code: 1577 消息的唯一方法,至少用不同版本的 mysql.event CREATE 語句重新創建它- 重啟 MySQL / MariaDB
SHOW EVENTS
現在應該可以工作了。根據問題的嚴重程度,以及解決問題所必需的第一步,您的部分或全部事件可能會失去。如果您定義了任何事件,請檢查它們是否存在並從備份(或從主設備導出,如果相關)恢復它們。