【mysql】数据库表不完整,无法创建修复方法

版本:mysql5.7.*

问题背景:客户环境迁移服务器,center和mysql重新安装,mysql数据直接将mysql的data目录拷贝到了新的mysql环境,导致检查过程中发现控制台上“定时任务”页面是空的。

问题现象:定时任务页面为空,相关的其他页面也有问题(插件执行时间为空、用户管理不同步账户等)。

问题原因:数据库中缺少schedule表,初始化数据库无法创建该表,表不存在导致了页面内容为空。拷贝data目录的形式迁移数据库数据,在mysql5.5版本可以这样操作,但5.7版本增加了安全校验,尽量使用备份工具备份恢复

解决思路

1.执行auditsysinit 重新初始化,查看日志,发现数据库表创建错误。

2. 进一步登录mysql手动创建表,发现对应的表无法创建,提示空间名已被占用

3. 进数据库文件,删除对应的表空间ID,这里注意观察一下,有问题的表只有id文件,没有数据库文件。

4. 删除对应无效ID后,重新执行 auditsysinit 重新初始化。数据已成功恢复

5. 重启center_server apiserver apiserver_mqtt schedulejob 跟数据库相关的服务

处理过程:

1、查看数据库表没有schedule。

2、尝试auditsysint初始化数据库:/usr/local/app/appinit/auditsysinit -c /etc/auditsys/center/center_server.yaml

查看初始化产生的日志有创建报错:日志文件位置:/etc/auditsys/center/latest_log

3、尝试手动创建schedule表,提示:ERROR 1813 (HY000): Tablespace ‘`auditsys`.`schedule`’ exists.

4、到数据库目录下找到对应有问题的表文件,删除对应的ibd文件,(routers permission_router表也有问题 但是已经废弃不用了)

文件位置:/usr/local/mysql/data/auditsys/

5、再次初始化数据库,并重启相关服务。

/usr/local/app/appinit/auditsysinit -c /etc/auditsys/center/center_server.yaml

systemctl restart center_server

systemctl restar schedulejob

systemctl restar apiserver

systemctl restar apiserver-mqtt