RDS for MySQL Mysqldump常见问题及处理

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

摘要: RDS for MySQL Mysqldump 常见问题和处理   GTID 特性相关 避免表级锁等待 设置导出字符集 其他导出时需要注意的选项 举例 RDS for MySQL 不支持的选项 RDS for MySQL 逻辑备份 1. GTID 特性相关 MySQL 5.6 引入了 GTID 特性,因此随 5.6 版本分发的 mysqldump 工具增加了 --set-gtid-purged 选项。

RDS for MySQL Mysqldump 常见问题和处理

  • GTID 特性相关
  • 避免表级锁等待
  • 设置导出字符集
  • 其他导出时需要注意的选项
  • 举例
  • RDS for MySQL 不支持的选项
  • RDS for MySQL 逻辑备份

1. GTID 特性相关

MySQL 5.6 引入了 GTID 特性,因此随 5.6 版本分发的 mysqldump 工具增加了 --set-gtid-purged 选项。

#选项名称默认值可选值作用

1

set-gtid-purged

AUTO

ON, OFF, AUTO

是否输出 SET @@GLOBAL.GTID_PURGED 子句

  • ON:在 mysqldump 输出中包含 SET @@GLOBAL.GTID_PURGED 语句。
  • OFF:在 mysqldump 输出中不包含 SET @@GLOBAL.GTID_PURGED 语句。
  • AUTO:默认值;对于启用 GTID 实例,会输出 SET @@GLOBAL.GTID_PURGED 语句;对于没有启动或者不支持 GTID 的实例,不输出任何 GTID 相关信息。

因此对于使用 MySQL 5.6 及以上版本带有的 mysqldump 工具进行 RDS for MySQL 实例数据导出时设置该选项为 OFF。

注:

如果 mysqldump 设置 set-gtid-purged=ON  从 RDS for MySQL 5.5 或 5.1 版本实例导出数据,mysqldump 会提示下面的错误:

Error: Server has GTIDs disabled.
或者
mysqldump: Couldn’t execute ‘SELECT @@GTID_MODE’: Unknown system variable ‘GTID_MODE’ <1193>

  

2. 避免表级锁等待

mysqldump 默认会启用 lock-tables 选项,对要导出的表加表级锁,阻止表上的 DML 操作。

RDS for MySQL 实例默认支持的 InnoDB 和 TokuDB 引擎均支持事务,建议使用  single-transaction 选项进行导出,而不要设置 lock-all-tables 或 lock-tables 选项。

#选项名称默认值可选值作用
1lock-all-tablesFALSEFALSE,TRUE在数据导出期间放置 global read lock,所有库下的所有表在导出期间为只读。自动关闭 lock-tables 和 single-transaction 选项。RDS 不支持该选项。
2lock-tablesTRUEFALSE,TRUE导出期间在导出表上放置表级锁。默认开启。可以通过指定 --skip-lock-tables 选项来关闭。
3single-transactionFALSEFALSE,TRUE导出操作被放置在一个事务中执行。自动关闭 lock-tables 选项。

关于表级锁的情况,请参考:RDS for MySQL InnoDB表级锁等待

 

3. 设置导出字符集

如果不指定,mysqldump 默认使用 UTF8 字符集进行导出。

#选项名称默认值可选值作用
1default-character-setUTF8实例支持的字符集mysqldump 到 RDS 实例导出连接的字符集

 

4. 其他导出时需要注意的选项

#选项名称默认值可选值作用
1no-defaultsNANA除了.mylogin.cnf,不读取任何选项文件
2defaults-file=file_nameNANA读取指定的选项文件
3add-drop-databaseFALSEFALSE,TRUE在 create database 语句前增加 drop database 语句
4add-drop-tableTRUEFALSE,TRUE在 create table 语句前增加 drop table 语句,默认开启,使用选项 --skip-add-drop-table 来关闭。
5add-locksTRUEFALSE,TRUE在表相关语句前后增加 lock tables tab_name write; 和 unlock tables; 语句。这样在导入数据时可以加快数据导入。
6compatible=nameNA

ansi,postgresql,

oracle,mssql

增强与指定的数据库类型的兼容性
7compactFALSEFALSE,TRUE启用 --skip-add-drop-table, --skip-add-locks, --skip-comments, --skip-disable-keys, --skip-set-charset 选项
8databasesTRUEFALSE,TRUE导出多个库。默认 mysqldump 将第一个名字识别为库,其后的名字识别为表。指定该选项后,mysqldump会将所有名称识别为库,并在每个库前增加 create database 和 use database 语句。
9disable-keysTRUEFALSE,TRUE在插入数据前后增加 /!40000 ALTER TABLE tab_name DISABLE KEYS / 和 /!40000 ALTER TABLE tab_name ENABLE KEYS / 语句来加速插入。该选项仅对 MyISAM 引擎表的非唯一索引有效。
10eventsFALSEFALSE,TRUE导出数据库内的计划事件(定时任务)
11extended-insertTRUEFALSE,TRUE使用扩展的 Insert 语句,一条 Insert 语句插入多行。
12hex-blobFALSEFALSE,TRUE

以16进制导出 Binary、VarBinary、BLOB 类型数据。

如果跨版本迁移数据,建议增加该选项。

13ignore-table=db.tabTRUEFALSE,TRUE不导出某表或视图。格式:库名.表名(db.tab)。可以多次使用该选项来忽略多张表。
14max-allowed-packet24 MB24 MB - 1 GBmysqldump 和 RDS 实例通信缓存最大值。默认24 MB。最大 1 GB。
15no-create-dbFALSEFALSE,TRUE输出中不包含 create database 语句
16no-create-infoFALSEFALSE,TRUE输出中不包含 create table 语句
17no-dataFALSEFALSE,TRUE不导出数据
18optTRUEFALSE,TRUE启用  --add-drop-table, --add-locks, --create-options --disable-keys, --extended-insert, --lock-tables, --quick, --set-charset; 可以通过指定 skip-opt 选项关闭默认 opt 选项。
19dump-dateTRUEFALSE,TRUE如果指定了 --comments 选项(默认开启),在输出的注释中显示导出日期时间。
20routinesFALSEFALSE,TRUE导出存储过程和函数(默认不导出)
21result-fileTRUEFALSE,TRUE将输出重定向到文件
22set-charsetTRUEFALSE,TRUE在导出文件中加上 set names default_chararacter_set
23triggersTRUEFALSE,TRUE导出表上的 Trigger

5. 举例

5.1 导出库 jacky 下的 teacher 表,包括表上的触发器,导出字符集是 utf8mb4

mysqldump --no-defaults -hxxx.mysql.aliyun.com -uuser_name -P3306 -ppass_word --set-gtid-purged=off --default-character-set=utf8mb4 --hex-blob --single-transaction --result-file=jacky_teacher.sql jacky teacher
# -p 选项指定密码,密码和选项间不要有空格
# -P 选项指定实例的端口
# -h 选项指定 RDS 实例的 URL 地址
# -u 选项指定使用的数据库用户
# 也可以使用下面的方式进行导出
mysqldump --no-defaults -hxxx.mysql.aliyun.com -uuser_name -P3306 -ppass_word --set-gtid-purged=off --default-character-set=utf8mb4 --hex-blob --single-transaction jacky teacher > jacky_teacher.sql

 

5.2 导出库 jacky,包括存储过程和函数,不含 lock tables 和 unlock tables 语句

mysqldump --no-defaults -hxxx.mysql.rds.aliyuncs.com -uuser_name -ppass_word -P3306 --set-gtid-purged=off --hex-blob --single-transaction --routines --skip-add-locks --result-file=jacky.sql jacky
# --routines — 导出库涉及的存储过程和函数
# --skip-add-locks — 输出中不包括 lock tables table_name write; 和 unlock tables; 语句

  

5.3 导出库 jacky,包括存储过程、函数、触发器、事件,不包括数据

mysqldump --no-defaults -hxxx.mysql.rds.aliyuncs.com -uuser_name -ppass_word -P3306 --set-gtid-purged=off --hex-blob --single-transaction --routines --events --no-data --result-file=jacky.sql jacky
# 触发器选项 --triggers 默认开启,因此不需要指定
# --events — 导出库涉及的定时事件(计划任务)
# --no-data — 不导出数据

 

5.4 导出库 jacky,不包括 库、表创建语句,不包括 drop table 语句

mysqldump --no-defaults -hxxx.mysql.rds.aliyuncs.com -uuser_name -ppass_word -P3306 --set-gtid-purged=off --hex-blob --single-transaction --no-create-db --no-create-info --skip-add-drop-table --result-file=jacky.sql jacky
# --no-create-db — 输出中不包括库的创建语句
# --no-create-info — 输出中不包括表的创建语句
# --skip-add-drop-table — 输出中不包括表的删除语句

 

5.5 导出库 jacky,jerry,jason,不包括表 jacky.teacher, jason.orders, jerry.sales

mysqldump --no-defaults -hxxx.mysql.aliyun.com -uuser_name -P3306 -ppass_word --set-gtid-purged=off --hex-blob --single-transaction --result-file=jacky_jerry_jason.sql --ignore-table=jacky.teacher --ignore-table=jason.orders --ignore-table=jerry.sales --databases jacky jerry jason
# --ignore-table — 指定不进行导出的表
# --databases — 指定要进行导出的数据库名称

 

5.6 导出库 jacky,包括存储过程和函数,尽量兼容 SQL SERVER 语法

mysqldump --no-defaults -hxxx.mysql.aliyun.com -uuser_name -P3306 -ppass_word --set-gtid-purged=off --compatible=mssql --routines --hex-blob --single-transaction --result-file=jacky_mssql.sql jacky
# --compatible=mssql — 增加对 SQL SERVER 的语法兼容性

 

6. RDS for MySQL 不支持的选项

#选项名称默认值可选值作用
1all-databasesFALSEFALSE, TRUE导出所有数据库,包括 mysql
2flush-logsFALSEFALSE, TRUE导出前在实例中执行 flush logs; 命令
3flush-privilegesFALSEFALSE, TRUE导出 mysql 系统库后,输出中包含 flush privileges; 命令
4lock-all-tablesFALSEFALSE, TRUE在数据导出期间放置 global read lock,所有库下的所有表在导出期间为只读。自动关闭 lock-tables 和 single-transaction 选项。
5tab=dir_nameNANA在指定的目录下生成 tbl_name.sql 文件(包含表创建语句)和 以 tab 作为分隔符的tbl_name.txt文本格式的数据文件。
  • --all-databases: RDS for MySQL 普通用户对 mysql 库中部分表没有权限,因此不能导出全部库表。
# 错误信息:
mysqldump: Couldn’t execute ‘show create table slow_log‘: SHOW command denied to user ‘xxx’@’xx.xx.xx.xx’ for table ‘slow_log’ (1142)

 

  • --flush-logs: RDS for MySQL 普通用户没有 Reload 权限,因此不能执行 flush logs; 命令。
# 错误信息
mysqldump: Couldn’t execute ‘FLUSH TABLES’: Access denied; you need (at least one of) the RELOAD privilege(s) for this operation (1227)

 

  • --flush-privileges:因为 RDS for MySQL 不支持 mysql 系统库的导出,因此没必要使用该选项。
  • --lock-all-tables:因为 RDS for MySQL 普通用户没有 Reload 权限,因此不能使用该选项。
# 错误信息
mysqldump: Couldn’t execute ‘FLUSH TABLES’: Access denied; you need (at least one of) the RELOAD privilege(s) for this operation (1227)

 

  • --tab=dir_name:该选项要求 mysqldump 和 RDS for MySQL 实例在同一物理机上,因此不支持。但该选项可以和 --no-data 选项搭配使用来获取表的创建语句。
# 和 --no-data 选项搭配,获取 jacky 库下每个表的创建语句文件 tab_name.sql
mysqldump --no-defaults -uuser_name -ppass_word -hxxx.mysql.rds.aliyuncs.com -P3306 --set-gtid-purged=off --single-transaction --tab=/tmp --no-data jacky
# 不带 --no-data 选项(希望导出数据)时候的错误信息:
mysqldump --no-defaults -uuser_name -ppass_word -hxxx.mysql.rds.aliyuncs.com -P3306 --set-gtid-purged=off --single-transaction --tab=/tmp jacky
mysqldump: Got error: 1045: Access denied for user ‘xxx’@’%’ (using password: YES) when executing ‘SELECT INTO OUTFILE’

 

7. RDS for MySQL 逻辑备份

  • RDS for MySQL 支持实例和单库级别的逻辑备份。
  • 逻辑备份执行期间不会影响主实例的正常使用。
  • 逻辑备份导入权限问题请参考:RDS for MySQL权限问题(错误代码:1227,1725)

转载于:https://my.oschina.net/HeAlvin/blog/849035

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI求解PDE

一、波动方程的PINN解法: Guo Y, Cao X, Liu B, et al. Solving partial differential equations using deep learning and physical constraints[J]. Applied Sciences, 2020, 10(17): 5917. 二、二维的Navier–Stokes方程组的PINN解法 矢量形式的不可压缩Navier-Stokes方程…

使用CADisplayLink实现UILabel动画特效

在开发时&#xff0c;我们有时候会遇到需要定时对UIView进行重绘的需求&#xff0c;进而让view产生不同的动画效果。 本文项目 效果图 初探 CADisplayLink 定时对View进行定时重绘可能会第一时间想到使用NSTimer&#xff0c;但是这样的动画实现起来是不流畅的&#xff0c;因为在…

《ASP.NET Core 6框架揭秘》实例演示[27]:ASP.NET Core 6 Minimal API的模拟实现

Minimal API仅仅是在基于IHost/IHostBuilder的服务承载系统上作了小小的封装而已&#xff0c;它利用WebApplication和WebApplicationBuilder这两个类型提供了更加简洁的API&#xff0c;同时提供了与现有API的兼容。[本文节选《ASP.NET Core 6框架揭秘》第17章]一、基础模型二、…

Mysql的关联查询语句

一 内连接( inner join&#xff09; 1、多表中同时符合某种条件的数据记录的集合 (取两表公共部分) 2、inner join 可以缩写成 join 例如: select * from A,B WHERE A.idB.id 或者 select * from A inner join B on A.idB.id 内连接分为三类:{ &#xff08;1&#xff0…

高性能Server---Reactor模型

无处不在的C/S架构 在这个充斥着云的时代,我们使用的软件可以说99%都是C/S架构的&#xff01; 你发邮件用的Outlook,Foxmail等你看视频用的优酷&#xff0c;土豆等你写文档用的Office365,googleDoc&#xff0c;Evernote等你浏览网页用的IE,Chrome等(B/S是特殊的C/S)……C/S架构…

计算机控制系统的试题,计算机控制系统练习题(1)

21. 给出多通道复用一个D/A转换器的原理示意图。 答&#xff1a;22. 什么是信号重构&#xff1f;答&#xff1a;把离散信号变为连续信号的过程&#xff0c;称为信号重构&#xff0c;它是采样的逆过程。23. 写出零阶保持器的传递函数&#xff0c;引入零阶保持器对系统开环传递函…

springmvc_3(将数据放入map中)

jsp页面 结果 转载于:https://www.cnblogs.com/mohehpc/p/6491376.html

怎样用原生js配合css的transition写个无缝滚动

之所以想要写原生js配合css转换的无缝滚动&#xff0c;是因为之前在简书上看到一哥们写的一篇文章&#xff0c;说是在网上找了一堆js配合css transition属性写的轮播插件&#xff0c;可惜没有无缝的效果&#xff0c;结果他用原生js重写了一个可以无缝滚动的。好吧&#xff0c;我…

聊聊策略模式

1、简介策略模式就是把各个平等的具体实现进行抽象、封装成为独立的算法类&#xff0c;然后通过上下文和具体的算法类来进行交互。各个策略算法都是平等的&#xff0c;地位是一样的&#xff0c;正是由于各个算法的平等性&#xff0c;所以它们才是可以相互替换的。虽然我们可以动…

小学计算机课每周几节,小学信息技术课时多少

满意答案小学信息技术课程标准一、课程任务和教学目标中小学信息技术课程的主要任务是&#xff1a;培养学生对信息技术的兴趣和意识&#xff0c;让学生了解和掌握信息技术基本知识和技能&#xff0c;了解信息技术的发展及其应用对人类日常生活和科学技术的深刻影响。通过信息技…

张旭升20162329 2006-2007-2 《Java程序设计》第一周学习总结

20162329 2006-2007-2 《Java程序设计》第一周学习总结 教材学习内容总结 通过打书上的代码熟悉了Java编程的基本过程 教材学习中的问题和解决过程 1.因为我的虚拟机不可用所以我在Windows中安装了bash和git&#xff0c;但是由于Windows下bash中没有中文而且我英语又不是很好所…

《图解 HTTP》读书笔记(未完待续)

ARP 协议&#xff08;Address Resolution Protocol&#xff09;一种以解析地址的协议&#xff0c;根据通信双方的 IP 地址就可以查出对应的 MAC 地址。MAC&#xff08; Media Access Control Address&#xff09;地址是指网卡所属的固定的地址MIME&#xff0c;多部分对象集合&a…

SQL查询的安全方案

1.使用预处理语句防sql注入 2.写入数据库的数据要进行特殊字符转义 3.错误信息不返回给用户,记录到日志 4.定期做数据备份 5.不给查询用户root权限,合理分配权限 6.关闭远程访问数据库权限 7.修改root口令,不使用默认口令,使用较复杂口令 8.删除多余的用户 9.改变root用户的名称…

.NET 实现启动时重定向程序运行路径及 Windows 服务运行模式部署

日常工作中有时候会遇到需要将程序直接在服务器上运行&#xff0c;而不依赖于 IIS 托管的情况&#xff0c;直接运行有两种方式&#xff0c;一种是部署为 服务模式&#xff0c;另一种则是 直接启动 .NET 发布之后的 exe 文件以 控制台模式运行&#xff0c;控制台模式运行主要问题…

iOS runtime实战应用:关联对象

在开始之前建议先阅读iOS runtime的基础理解篇&#xff1a;iOS内功篇&#xff1a;runtime 有筒子在面试的时候&#xff0c;遇到这样一个问题&#xff1a;“如何給NSArray添加一个属性&#xff08;不能使用继承&#xff09;”&#xff0c;筒子立马蒙逼了&#xff0c;不能用继承&…

黑龙江科技大学计算机考研复试科目,2020年黑龙江科技大学计算机应用技术考研经验分享...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼育明考研备考策略随着IT业的迅猛发展&#xff0c;各高校计算机专业报名火爆&#xff0c;甚至文科学生跨专业报考时都会选择计算机。计算机专业竞争日趋激烈&#xff0c;那么如何在充分发挥公共科目优势的同时&#xff0c;尽量缩小专…

Mysql数据库安全性问题【防注入】

一、SQL注入实例 后台的插入语句代码&#xff1a; $unsafe_variable $_POST[user_input]; mysql_query("INSERT INTO table (column) VALUES ($unsafe_variable)"); 当POST的内容为&#xff1a; value); DROP TABLE table;--以上的整个SQL查询语句变成&#xff1…

Unexpected end of JSON input while parsing near错误解决方式(网上的方法)

原本是想创建一个create-react-app来着&#xff0c;但是在创建的中间会出现Unexpected end of JSON input while parsing near... 的错误。 在网上找到了一些方法&#xff0c;首先是清空npm的缓存。 npm cache clean --force 氮素&#xff0c;然并卵。near后面的内容变化了一下…

解决Qt5 Creator无法切换输入法(fcitx),Ubuntu中不能使用搜狗输入法录入汉字问题...

2016年6月8日修正&#xff0c;ubuntu 16.04 Qt5.7.0 以及 Qt5.6.1均测试通过在Qt5.3之前&#xff0c;我发布过解决办法 解决Qt5 Creator无法切换输入法&#xff08;fcitx&#xff09;&#xff0c;不能录入汉字问题&#xff0c;Qt5.4以及Qt5.5&#xff0c;旧办法失效&#xff0c…

目前市场上用于个人计算机的硬盘尺寸是,第5章-硬盘(计算机组装与维护).docx

ADDIN CNKISM.UserStyle一、选择题1.磁盘存储器的主要技术指标有多项&#xff0c;下面不属于硬盘指标的是( )。A.存储容量B.单碟容量C.转速D.带宽2.硬盘的平均寻道时间通常以毫秒为单位测量&#xff0c;是指( )。A.磁头从一个柱面移到另一个随机距离远的柱面所需的平均时间B.…