mysqldump导入备份文件报错记录

梦莱2年前技术文章1383

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


相关文章

Flink sql 集成hive metastore

Flink sql 集成hive metastore

1、前置条件**确认hive metastore版本(本次版本3.1.2) **hive metastore 部署成功hive依赖jar包分发到每个flink节点:/flink-1.13.6    ...

Redis 命令行 redis-cli 介绍

前言redis-cli 是 Redis 自带的命令行工具,是运维和开发人员常用的工具,本篇文章将介绍它的使用技巧和一些有趣的功能。1. 连接 Redis 服务redis-cli 默认连接的是 127....

系统RDSCPU打满问题分析报告

系统RDSCPU打满问题分析报告

1. 问题概述在2023年9月01日09点13分,玳数运维组侧接收到业务侧反馈系统响应缓慢,与此同时运维群内新系统RDS 发出CPU打满的告警,告警通知如下: 2. 问题分析a. 数据库会话管理核查玳...

nginx服务企业应用

1、软件的分类1.1 常用来提供静态服务的软件Apache :这是中小型Web服务的主流,Web服务器中的老大哥,Nginx :大型网站Web服务的主流,曾经Web服务器中的初生牛犊,现已长大。Ngi...

Elasticsearch数据生命周期如何规划

Elasticsearch中的open状态的索引都会占用堆内存来存储倒排索引,过多的索引会导致集群整体内存使用率多大,甚至引起内存溢出。所以需要根据自身业务管理历史数据的生命周期,如近3个月的数据op...

k8s集群状态与日志查看

一、状态查看1. 查看 Pod 状态以及运行节点kubectl get pods -o widekubectl -n kube-system get pods -o wide2. 查看 Pod 事件k...

发表评论    

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