我从(MySQL)数据库中删除了我的服务表。现在有portlet错误消息,表不存在。如何发起娱乐?我从未手动创建服务表。它们是自动创建的,但现在停止了。
*更新*
上面我指的是我的自定义portlet项目的自定义表。我有他们的SQL文件,当然可以针对服务器运行它们,但是想知道它应该如何正常完成?
答案 0 :(得分:1)
你还有安装文件吗?如果是,请在其中搜索表名。在Linux上,这将是
find /path/to/top/directory -type f -print0 | xargs -0r grep -il 'CREATE TABLE Xyz'
其中Xyz
是您要查找的表名。对于它列出的每个文件,搜索CREATE TABLE Xyz
和CREATE TABLE IF NOT EXISTS Xyz
。那应该找到丢失表的'create'语句。如果该表也有针对它的触发器,将需要进一步的工作。
如果您没有安装文件,但确实拥有所有binlog,则可以搜索(再次在linux中)那些
find /path/to/binlogs -type f -print0 \
| \
xargs -0r file \
| \
fgrep 'MySQL replication log' \
| \
cut -d: -f1 \
>/tmp/binlog.lst
for b in $(</tmp/binlog.lst); do
echo -n $b
mysqlbinlog $b | grep -li 'CREATE TABLE Xyz'
echo
done
但即使这些方法中的任何一种都有效,它也只能获得原始的“创建”语句。如果表中的安装或升级中有“alter table”,那么这是额外的搜索。
如果没有备份,我认为最好的办法是重新安装相同版本的Service Builder,然后将生成的表复制到当前安装中。
在您继续前进之前,请备份您当前拥有的内容,例如mysqldump --opt --all-databases >large_dump_file