事件背景
本周接到导出数据的需求,具体是导出mysql的一张表,事先看了下表大小为2.7G,当时觉得数据量比较少,所以直接用mysqldump导出没有加额外参数,正常情况下这种数据量级是没有任何问题的。
但偏偏事与愿违了T.T,由于我是从公司的网络通过VPN连接到阿里云RDS,这中间经过了一道互联网,导致导出速度极慢,极端情况会导致业务堵塞,好在及时发现异常即时终止了导出。
过程反思
mysqldump默认带有OPT参数,这样直接运行是lock-tables模式,数据量小的时候可以秒级导出。
其实这个命令我已经再熟悉不过了,但我却忽略了网络环境因素。
只要加上了–single-transaction参数就算再慢都不会影响业务,当时我觉得数据量小就懒的写了。
用某人的一句话告诫自己 —— 每一件小事都值得全力以赴!!
技术文档
OPT参数说明
MySQL默认开启opt模式
--opt是以下参数的简写
--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset
mysqldump --skip-add-drop-table # 这样在导出时不会带上 DROP TABLE IF EXISTS `tablename` 语句
mysqldump参数详解
--all-databases , -A
导出全部数据库。
mysqldump -uroot -p --all-databases
--all-tablespaces , -Y
导出全部表空间。
mysqldump -uroot -p --all-databases --all-tablespaces
--no-tablespaces , -y
不导出任何表空间信息。
mysqldump -uroot -p --all-databases --no-tablespaces
--add-drop-database
每个数据库创建之前添加drop数据库语句。
mysqldump -uroot -p --all-databases --add-drop-database
--add-drop-table
每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项)
mysqldump -uroot -p --all-databases (默认添加drop语句)
mysqldump -uroot -p --all-databases –skip-add-drop-table (取消drop语句)
--add-locks
在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(默认为打开状态,使用--skip-add-locks取消选项)
mysqldump -uroot -p --all-databases (默认添加LOCK语句)
mysqldump -uroot -p --all-databases –skip-add-locks (取消LOCK语句)
--allow-keywords
允许创建是关键词的列名字。这由表名前缀于每个列名做到。
mysqldump -uroot -p --all-databases --allow-keywords
--apply-slave-statements
在'CHANGE MASTER'前添加'STOP SLAVE',并且在导出的最后添加'START SLAVE'。
mysqldump -uroot -p --all-databases --apply-slave-statements
--character-sets-dir
字符集文件的目录
mysqldump -uroot -p --all-databases --character-sets-dir=/usr/local/mysql/share/mysql/charsets
--comments
附加注释信息。默认为打开,可以用--skip-comments取消
mysqldump -uroot -p --all-databases (默认记录注释)
mysqldump -uroot -p --all-databases --skip-comments (取消注释)
--compatible
导出的数据将和其它数据库或旧版本的MySQL 相兼容。值可以为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等,
要使用几个值,用逗号将它们隔开。它并不保证能完全兼容,而是尽量兼容。
mysqldump -uroot -p --all-databases --compatible=ansi
--compact
导出更少的输出信息(用于调试)。去掉注释和头尾等结构。可以使用选项:--skip-add-drop-table --skip-add-locks --skip-comments --skip-