【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
