mysqldump导入备份文件报错记录

梦莱2年前技术文章1495

mysqldump导入备份文件报错记录

【问题记录1】

目前遇到过两类报错,均主要是因为 GTID 引起,两类报错内容完全不同,但解决方法相同,报错内容具体如下:

第一类报错:

在自建数据库往云上数据库导入数据的时候容易出现下类报错:

 

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

从错误信息看,似乎是用户权限不够。但是我们使用的是 root 用户(最高权限用户),因此猜测不是权限问题,其实不然。出现报错的原因主要是因为处于安全考虑,RDS For MySQL 的最高权限用户 root 是没有 super 权限的,自建用户也不能有super权限,但是用户执行导入的 SQL 中,包含需要super权限的语句,所以会报错。

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

SET @@SESSION.SQL_LOG_BIN= 0;
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '';
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

第二类报错:

@@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty

 

报错含义为当前GTID_EXECUTED参数已经有值,而从集群导出来的dump文件中包含了SET @@GLOBAL.GTID_PURGED的操作,所以会产生如上的报错。

【解决方案1】

解决方案主要有以下三种:

1.--set-gtid-purged=off

dump导出时,添加--set-gtid-purged=off参数,避免将 gtid 信息导出

mysqldump -uroot -p --set-gtid-purged=off -all-databases  > XXX.sql

2.直接修改备份生成的dump文件,移除其中的一些行 (注意:在修改之前,建议将备份文件再做一次备份)

--将这些需要 super 权限执行的行注释掉
SET @@SESSION.SQL_LOG_BIN= 0;
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '';
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

3.reset master

这个操作可以将当前库的 GTID_EXECUTED 值置空,可以避免出现 GTID_EXECUTED 已有值导致报错的情况。

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

source  /tmp/dump.sql

第一类报错主要是权限问题,可以使用方案 一、二、四解决;第二类报错可以使用如上一、二、三方案解决。

【问题记录2】

 

mysqldump -hrm-bp1f0fhwl31dp211e7o.mysql.rds.aliyuncs.com -ugitadmin -p --single-transaction -R -E --databases yongyou_oa > yongyou_oa.sql
Enter password:
mysqldump: Couldn't execute 'SELECT COLUMN_NAME,                       JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"')                FROM information_schema.COLUMN_STATISTICS                WHERE SCHEMA_NAME = 'yongyou_oa' AND TABLE_NAME = 'addressbook';': Unknown table 'column_statistics' in information_schema (1109)

【解决方案2】

8.0 版的 mysqldump 默认启用的一个新标志,通过 - -column-statistics=0 来禁用他添加参数 column-statistics=0 即可


相关文章

ChaosBlade介绍

ChaosBlade介绍

ChaosBlade 是阿里巴巴开源的一款遵循混沌工程原理和混沌实验模型的实验注入工具,帮助企业提升分布式系统的容错能力,并且在企业上云或往云原生系统迁移过程中业务连续性保障。Chaosblade 是...

PromQL查询解析

一. 概述Prometheus除了存储数据外,还提供了一种强大的功能表达式语言 PromQL,允许用户实时选择和汇聚时间序列数据。表达式的结果可以在浏览器中显示为图形,也可以显示为表格数据,或者由外部...

Python 识别 MySQL 中的冗余索引

前言最近在搞标准化巡检平台,通过 MySQL 的元数据分析一些潜在的问题。冗余索引也是一个非常重要的巡检目,表中索引过多,会导致表空间占用较大,索引的数量与表的写入速度与索引数成线性关系(微秒级),如...

CDH-集群节点下线

CDH-集群节点下线

1、前期准备确认下线节点确认节点组件信息确认下线节点数据存储大小确定剩余节点存储大小如果下线节点数据存储大小大于剩余节点存储大小,则不能进行下线,可能存在数据丢失的情况2、操作首先确认待下线节点中是否...

ES部署以及扩容

ES部署以及扩容

单节点RPM包方式部署1、下载RPM包官网下载地址:Download Elasticsearch | Elastic默认下载的为最新版本,如果想要下载历史版本,点击此处查看历史版本此处安装ES7.X...

DBMS_MONITOR包跟踪10046

该包是从Oracle 10g开始提供的,Oracle官方支持。等于10046 level 12。--跟踪当前会话: EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE;...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。