老卫同学
发布于 2024-05-22 / 95 阅读
0
0

记一次Halo博客更新失败之后数据丢失问题

1Panel在备份应用之后,尝试恢复备份,执行数据库出现一下错误:

ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

查阅资料得到以下信息:

RDS不提供root账号或具有super权限的账号,避免误操作导致数据丢失泄露等无法挽回的损失。

目前RDS已经提供了高权限账号,只能使用高权限账号管理所有普通账号和数据库,具体参考高权限账号权限和Super权限区别

如果由于权限问题无法修改参数,可以到控制台修改,MySQL可以点此参考

使用mysqldump将数据导出到sql,再导入rds MySQL时。导入过程中可能会遇到以下错误:

ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

1.问题原因:MySQL导入用户的权限问题。

处于安全考虑,rds MySQL的最高权限用户root是没有super权限的,当前自建用户也不能有super权限。但是用户执行导入的sql中,包含需要super权限的语句,所以会报错。

如果源库开启了GTID特性,使用mysqldump 导出数据时,没有添加选项--set-gtid-purged=OFF,导出的sql中就有存在以下需要super权限执行的语句:

SET @@SESSION.SQL_LOG_BIN= 0;

SET @@GLOBAL.GTID_PURGED=´12df7754-09f3-11ee-b39e-00163e0a63ff:1-5871084,
b269b366-4f8c-11ec-8c9f-00163e18e6ca:1-4200896,
bab4a4f4-e33d-11ed-b2ac-00163e0aea84:1-599705,
cf435f17-b928-11eb-b359-00163e0abfc8:1-1924258,
ecb543ce-8d1a-11ed-bde3-00163e0937e3:1-1249183´;

2.解决办法

办法1:导出语句中添加选项**--set-gtid-purged=OFF**重新导出,再导入即可。

例如:mysqldump -h192.168.2.33 -uroot -p123456 --set-gtid-purged=OFF rchz>D:\oldwei\halo.sql

办法2:使用source方式导入,这种方式即使权限问题报错,剩余sql语句仍可继续执行,不影响最终数据。

mysql>source /tmp/halo.sql

注意:sql文件的路径和权限

问题解决:

其实在恢复备份过程中,只是数据库错误了,所以把备份下载下来,提出备份的sql文件,把extensions 表清空,然后单独取出sql中的insert语句,在数据库执行以下即可


评论