我安装了 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
为空,您可以使用以下两个选项之一:1- 用于
--skip-events
从备份中跳过事件。2-尝试重新创建表(你需要删除它):
如果您使用的是 MySQL 5.7
MySQL 5.1
与 MySQL 5.7 相比,该
definer
字段更小。玛丽亚数据库 5.5
与 MySQL 5.1 相比,
NOT_USED
以下sql_mode
更改为IGNORE_BAD_TABLE_OPTIONS
.首先,让
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
# 路径取决于安装和配置。发现问题时需要修复选项。SHOW CREATE TABLE mysql.event;
在同一 MariaDB / MySQL 版本的工作版本上获取语句,或从这个答案中获取)重新启动数据库并检查是否仍然存在错误。(在 SELECT 工作之后)
使用 mysql.event 工作(如果 SELECT 工作)并且
SHOW EVENTS
仍然失败:mysql_upgrade -p --force
# 这似乎是摆脱 Error Code: 1577 消息的唯一方法,至少用不同版本的 mysql.event CREATE 语句重新创建它SHOW EVENTS
现在应该可以工作了。根据问题的严重程度,以及解决问题所必需的第一步,您的部分或全部事件可能会丢失。如果您定义了任何事件,请检查它们是否存在并从备份(或从主设备导出,如果相关)恢复它们。
答案中提供的信息是解决安装损坏问题时的通用方法。
可能的问题
可能的解决方案
CHMOD
以更改数据库目录中文件的权限。CHOWN
使用递归选项来更改文件结构上的组/用户所有者。