商城网站建设方案 2017,中国铁塔公司招聘网站,英文网站排版,域名服务器有哪些2019独角兽企业重金招聘Python工程师标准 摘要#xff1a; RDS for MySQL Mysqldump 常见问题和处理 GTID 特性相关 避免表级锁等待 设置导出字符集 其他导出时需要注意的选项 举例 RDS for MySQL 不支持的选项 RDS for MySQL 逻辑备份 1. GTID 特性相关 MySQ… 2019独角兽企业重金招聘Python工程师标准 摘要 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-purgedON 从 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-filefile_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; 语句。这样在导入数据时可以加快数据导入。6compatiblenameNA 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-tabledb.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_set23triggersTRUEFALSE,TRUE导出表上的 Trigger 5. 举例 5.1 导出库 jacky 下的 teacher 表包括表上的触发器导出字符集是 utf8mb4 mysqldump --no-defaults -hxxx.mysql.aliyun.com -uuser_name -P3306 -ppass_word --set-gtid-purgedoff --default-character-setutf8mb4 --hex-blob --single-transaction --result-filejacky_teacher.sql jacky teacher
# -p 选项指定密码密码和选项间不要有空格
# -P 选项指定实例的端口
# -h 选项指定 RDS 实例的 URL 地址
# -u 选项指定使用的数据库用户
# 也可以使用下面的方式进行导出
mysqldump --no-defaults -hxxx.mysql.aliyun.com -uuser_name -P3306 -ppass_word --set-gtid-purgedoff --default-character-setutf8mb4 --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-purgedoff --hex-blob --single-transaction --routines --skip-add-locks --result-filejacky.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-purgedoff --hex-blob --single-transaction --routines --events --no-data --result-filejacky.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-purgedoff --hex-blob --single-transaction --no-create-db --no-create-info --skip-add-drop-table --result-filejacky.sql jacky
# --no-create-db — 输出中不包括库的创建语句
# --no-create-info — 输出中不包括表的创建语句
# --skip-add-drop-table — 输出中不包括表的删除语句 5.5 导出库 jackyjerryjason不包括表 jacky.teacher, jason.orders, jerry.sales mysqldump --no-defaults -hxxx.mysql.aliyun.com -uuser_name -P3306 -ppass_word --set-gtid-purgedoff --hex-blob --single-transaction --result-filejacky_jerry_jason.sql --ignore-tablejacky.teacher --ignore-tablejason.orders --ignore-tablejerry.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-purgedoff --compatiblemssql --routines --hex-blob --single-transaction --result-filejacky_mssql.sql jacky
# --compatiblemssql — 增加对 SQL SERVER 的语法兼容性 6. RDS for MySQL 不支持的选项 #选项名称默认值可选值作用1all-databasesFALSEFALSE, TRUE导出所有数据库包括 mysql2flush-logsFALSEFALSE, TRUE导出前在实例中执行 flush logs; 命令3flush-privilegesFALSEFALSE, TRUE导出 mysql 系统库后输出中包含 flush privileges; 命令4lock-all-tablesFALSEFALSE, TRUE在数据导出期间放置 global read lock所有库下的所有表在导出期间为只读。自动关闭 lock-tables 和 single-transaction 选项。5tabdir_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) --tabdir_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-purgedoff --single-transaction --tab/tmp --no-data jacky
# 不带 --no-data 选项希望导出数据时候的错误信息
mysqldump --no-defaults -uuser_name -ppass_word -hxxx.mysql.rds.aliyuncs.com -P3306 --set-gtid-purgedoff --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权限问题错误代码12271725 转载于:https://my.oschina.net/HeAlvin/blog/849035