天天看点

RDS for MySQL Mysqldump 常见问题和处理RDS for MySQL Mysqldump 常见问题和处理

<a href="#1">gtid 特性相关</a>

<a href="#2">避免表级锁等待</a>

<a href="#3">设置导出字符集</a>

<a href="#4">其他导出时需要注意的选项</a>

<a href="#5">举例</a>

<a href="#6">rds for mysql 不支持的选项</a>

<a href="#7">rds for mysql 逻辑备份</a>

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 会提示下面的错误:

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

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

lock-all-tables

false

false,true

在数据导出期间放置 global read lock,所有库下的所有表在导出期间为只读。自动关闭 lock-tables 和 single-transaction 选项。rds 不支持该选项。

2

lock-tables

true

导出期间在导出表上放置表级锁。默认开启。可以通过指定 --skip-lock-tables 选项来关闭。

3

single-transaction

导出操作被放置在一个事务中执行。自动关闭 lock-tables 选项。

关于表级锁的情况,请参考:rds for mysql innodb表级锁等待

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

default-character-set

utf8

实例支持的字符集

mysqldump 到 rds 实例导出连接的字符集

no-defaults

na

除了.mylogin.cnf,不读取任何选项文件

defaults-file=file_name

读取指定的选项文件

add-drop-database

在 create database 语句前增加 drop database 语句

4

add-drop-table

在 create table 语句前增加 drop table 语句,默认开启,使用选项 --skip-add-drop-table 来关闭。

5

add-locks

在表相关语句前后增加 lock tables tab_name write; 和 unlock tables; 语句。这样在导入数据时可以加快数据导入。

6

compatible=name

ansi,postgresql,

oracle,mssql

增强与指定的数据库类型的兼容性

7

compact

启用 --skip-add-drop-table, --skip-add-locks, --skip-comments, --skip-disable-keys, --skip-set-charset 选项

8

databases

导出多个库。默认 mysqldump 将第一个名字识别为库,其后的名字识别为表。指定该选项后,mysqldump会将所有名称识别为库,并在每个库前增加 create database 和 use database 语句。

9

disable-keys

在插入数据前后增加 /!40000 alter table tab_name disable keys / 和 /!40000 alter table tab_name enable keys / 语句来加速插入。该选项仅对 myisam 引擎表的非唯一索引有效。

10

events

导出数据库内的计划事件(定时任务)

11

extended-insert

使用扩展的 insert 语句,一条 insert 语句插入多行。

12

hex-blob

以16进制导出 binary、varbinary、blob 类型数据。

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

13

ignore-table=db.tab

不导出某表或视图。格式:库名.表名(db.tab)。可以多次使用该选项来忽略多张表。

14

max-allowed-packet

24 mb

24 mb - 1 gb

mysqldump 和 rds 实例通信缓存最大值。默认24 mb。最大 1 gb。

15

no-create-db

输出中不包含 create database 语句

16

no-create-info

输出中不包含 create table 语句

17

no-data

不导出数据

18

opt

启用  --add-drop-table, --add-locks, --create-options --disable-keys, --extended-insert, --lock-tables, --quick, --set-charset; 可以通过指定 skip-opt 选项关闭默认 opt 选项。

19

dump-date

如果指定了 --comments 选项(默认开启),在输出的注释中显示导出日期时间。

20

routines

导出存储过程和函数(默认不导出)

21

result-file

将输出重定向到文件

22

set-charset

在导出文件中加上 set names default_chararacter_set

23

triggers

导出表上的 trigger

all-databases

false, true

导出所有数据库,包括 mysql

flush-logs

导出前在实例中执行 flush logs; 命令

flush-privileges

导出 mysql 系统库后,输出中包含 flush privileges; 命令

在数据导出期间放置 global read lock,所有库下的所有表在导出期间为只读。自动关闭 lock-tables 和 single-transaction 选项。

tab=dir_name

在指定的目录下生成 tbl_name.sql 文件(包含表创建语句)和 以 tab 作为分隔符的tbl_name.txt文本格式的数据文件。

--all-databases: rds for mysql 普通用户对 mysql 库中部分表没有权限,因此不能导出全部库表。

--flush-logs: rds for mysql 普通用户没有 reload 权限,因此不能执行 flush logs; 命令。

--flush-privileges:因为 rds for mysql 不支持 mysql 系统库的导出,因此没必要使用该选项。

--lock-all-tables:因为 rds for mysql 普通用户没有 reload 权限,因此不能使用该选项。

--tab=dir_name:该选项要求 mysqldump 和 rds for mysql 实例在同一物理机上,因此不支持。但该选项可以和 --no-data 选项搭配使用来获取表的创建语句。

rds for mysql 支持实例和单库级别的逻辑备份。

逻辑备份执行期间不会影响主实例的正常使用。

逻辑备份导入权限问题请参考:rds for mysql权限问题(错误代码:1227,1725)