mysqldump导入备份文件报错记录

梦莱2年前技术文章1290

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 即可


相关文章

Kafka性能维度标准

如何判断一个kafka集群是否已经处于性能瓶颈,通常的判断条件有如下几点:维度1:磁盘IO读写磁盘性能是kafka重要的参数指标,如果磁盘IO到达性能瓶颈会直接导致业务故障。Kafka读写性能跟磁盘I...

sqlserver收缩事务日志失败

sqlserver收缩事务日志失败

一、背景2022.01.12 日晚上,sqlserver实例空间使用率达到85%开始告警。查看发现目前日志空间有较大增长,如下图所示:与客户方进行反馈,在1月13日中午进行事务日志的收缩操作,发现日志...

PostgreSQL 逻辑备份详解

前言当谈到关系型数据库的备份和恢复时,逻辑备份是一种备份方法,它备份数据库的逻辑结构和数据,而不是直接备份磁盘上的物理数据。这样做有许多好处,比如备份速度更快,可以选择性地备份数据库中的某些数据,以及...

数仓主流架构简介之一

数仓主流架构简介之一

一、Lambda架构Apache Storm的创建者Nathan Marz于 2011 年开发,旨在解决大规模实时数据处理的挑战。Lambda数据架构提供了一个可扩展、容错且灵活的系统来处理大量数据。...

gin框架连接mysql数据库连接池泄露

gin框架连接mysql数据库连接池泄露

1、故障爆发12月1号上午10点出头,我们收到阿里云监控告警:客户官网探测异常,如图所示:然后我们DBA查看了后端数据库实例,发现数据库连接已经被用尽了,导致服务出现异常,如图所示:当时我们和客户协商...

hive 通过元数据导出所有表信息

select db.NAME as db_name,tb.TBL_NAME as table_name,case tb.TBL_TYPE when 'MANAGED_TABLE...

发表评论    

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