mydumper

最近更新时间: 2025-01-15 17:01:00

参数选项

  • -B, --database 导出单库
  • -T, --tables-list 以逗号分隔的多个表名
  • -O,--omit-from-file 包含要跳过的 database.table 条目列表的文件,每行一个(在应用正则表达式选项之前跳过)
  • -o, --outputdir 导出文件存放目录
  • -s, --statement-size 每条INSERT语句的大小,单位字节,默认 1000000
  • -r, --rows 尝试分割表,每个块的行数由该参数指定,该参数会屏蔽--chunk-filesize
  • -F, --chunk-filesize 尝试分割表,每个表的大小由该参数指定,单位MB,该参数不能和--load-data一起使用
  • --max-rows 限制表中每个块的行数,默认1000000
  • -c, --compress 将备份出来的数据文件,经压缩后存放
  • -e, --build-empty-files 空表也生成dump文件,此选项在V1.0D002版本之后废弃,统一用 ignore-emptytb
  • --ignore-emptytb 忽略空表不导出,此选项默认不开启,如需开启,设置 --ignore-emptytb=1
  • -x, --regex 'db.table' 正则匹配
  • -i, --ignore-engines 忽略以逗号分隔的多种存储引擎的数据表
  • -N, --insert-ignore 导出sql采用INSERT IGNORE
  • -m, --no-schemas 不导出表结构文件
  • -M, --table-checksums 转储表校验和与数据
  • -d, --no-data 不导出数据文件
  • --order-by-primary 如果不存在主键,则按主键或唯一键对数据进行排序
  • -G, --triggers 导出触发器
  • -E, --events 导出事件
  • -R, --routines 导出存储过程和函数
  • -W, --no-views 不导出视图
  • -k, --no-locks 不执行任何临时共享读锁. 警告:该参数会导致备份数据不一致
  • --no-backup-locks 不使用percona 特有的backup locks,还是使用传统的flush table with read lock
  • --less-locking 最小化在innodb引擎表上的锁持有时间
  • --long-query-retries 重试检查长查询,默认0(不重试)
  • --long-query-retry-interval 重试长查询检查前的等待时间,以秒为单位,默认 60
  • -l, --long-query-guard 设置长查询判定阈值, 默认60s,在执行flush tables with read lock前,如果开启了kill-long-queries,为了避免加全局读锁失败,会将当前执行时间超过60秒的sql强行结束
  • -K, --kill-long-queries 在执行flush tables with read lock前,kill长查询(默认行为是遇到长查询报错退出)
  • -D, --daemon 以守护进程模式运行
  • -X, --snapshot-count 快照数量,默认 2
  • -I, --snapshot-interval 每次dump的时间间隔 (单位为分钟), 需要 --daemon 参数, 默认 60
  • -L, --logfile log文件名,默认使用stdout
  • --tz-utc TIMESTAMP类型转换时区到UTC+0, 默认开启, 设置--skip-tz-utc可关闭.
  • --skip-tz-utc 不转换TIMESTAMP时区
  • --use-savepoints 采用savepoint以减少元数据锁使用, 需要 SUPER 权限
  • --success-on-1146 针对表不存在错误,采用warning而不是error
  • --lock-all-tables 使用 LOCK TABLE for all 替代 FTWRL
  • -U, --updated-since 使用 Update_time 仅导出过去U天有更新的表
  • --trx-consistency-only 将所有类型的表都当做innodb表备份
  • --complete-insert 构造insert语句带字段
  • --split-partitions 将分区转储到单独的文件中。 此选项覆盖分区表的 --rows 选项。
  • --set-names 设置名称,使用有风险,默认二进制
  • -h, --host 主机名
  • -u, --user 用户名
  • -p, --password 密码
  • -a, --ask-password 向用户索要密码
  • -P, --port TCP端口号
  • -S, --socket 连接采用socket文件
  • -t, --threads 备份线程数,默认4
  • -C, --compress-protocol 压缩协议
  • -V, --version 打印程序版本并退出
  • -v, --verbose 额外输出信息, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2
  • --load-data(原csv-output) 空参或设置为1时,输出csv格式,并不再输出sql格式,默认不开启,该参数不能和--trunk_filesize一起使用
  • --fields-escaped-by (原csv-escaped) 控制字符转义字符,仅支持单字符,默认"",设置为空则不进行转义 ,默认为""
  • --fields-enclosed-by (原csv-fields-enclosed) 字段包围符,仅支持单字符,默认为""
  • --fields-terminated-by (原csv-fields-terminated) 字段结束符,默认为"\t"
  • --lines-starting-by (原csv-lines-starting) 行起始符默认为""
  • --lines-terminated-by (原csv-lines-terminated) 行结束符,默认为"\n"
  • --statement-terminated-by 该参数很少会被使用到
  • --sync-wait 在 SESSION 级别设置的 WSREP_SYNC_WAIT 值
  • --hdfs-path 指定hdfs路径
  • --ignore-sysdb 忽略mysql,sysdb,sys库
  • --cos-bucket Bucket name in tencent cos storage service, 外部客户无需关注此选项
  • --cos-secretid Secret key in tencent cos storage service, 外部客户无需关注此选项
  • --cos-secretkey Secret ID in tencent cos storage service, 外部客户无需关注此选项
  • --cos-region Region name in tencent cos storage service, 外部客户无需关注此选项
  • --l5_server_name l5 server name, 外部客户无需关注此选项
  • --where 导出查询语句使用where条件,例如:--where="a=1 and b=2"
  • --whereCondition 选项where的别名
  • --no-check-generated-fields 不会执行与生成字段相关的查询。如果您已生成列,将导致恢复问题
  • --defaults-file 指定mysql default file
  • --ssl 使用 SSL 连接
  • --ssl-mode 与服务器的连接所需的安全状态:DISABLED、PREFERRED、REQUIRED、VERIFY_CA、VERIFY_IDENTITY
  • --key 密钥文件的路径名
  • --cert 证书文件的路径名
  • --ca 证书颁发机构文件的路径名
  • --capath 包含 PEM 格式的受信任 SSL CA 证书的目录的路径名
  • --cipher 用于 SSL 加密的允许密码列表
  • --tls-version 服务器允许哪些协议用于加密连接
  • --stream 写入文件后,它将通过 STDOUT 流式传输
  • --no-delete 流式操作完成后不会删除文件

举例

测试表:

CREATE TABLE `customer` (
`cust_id` int NOT NULL,
`name` varchar(200)  DEFAULT NULL,
`job_id` int DEFAULT NULL,
`job_name` varchar(300)  DEFAULT NULL,
PRIMARY KEY (`cust_id`),KEY `j_idx` (`name`) USING BTREE) ENGINE=InnoDB;

insert into customer(cust_id,name,job_id,job_name) values(100,'A',20,'C');
insert into customer(cust_id,name,job_id,job_name) values(200,'B',30,'NET');
insert into customer(cust_id,name,job_id,job_name) values(300,'C',40,'JAVA');
insert into customer(cust_id,name,job_id,job_name) values(400,'D',50,'PM');

文件导出到 hdfs下的目录:

su - tdsql 
./mydumper --host=10.0.1.9 --port=15002 --user=test1 --password=test1 --less-locking  --ignore-sysdb=1 --threads=4  --outputdir=/data/backup/data -B test -T customer  --no-schemas  --hdfs-path /recover

导出文件按行数切分:

./mydumper --host=10.0.1.9 --port=15002 --user=test1 --password=test1 --less-locking   --ignore-sysdb=1 --ignore-emptytb=1 --rows=50 --threads=4 --outputdir=/data/backup/data --complete-insert -B test -T customer --no-schemas

正则表达式,不备份包含 mysql、xa、query_rewrite 等关键字开头的数据库:

./mydumper  --host=10.0.1.9 --port=15002 --user=test1 --password=test1 --less-locking  --threads=1 --ignore-sysdb=1 --outputdir=/data/backup/data --regex='^(?!(mysql|xa|query_rewrite))'  --no-schemas

使用压缩方式导出数据:

./mydumper --host=10.0.1.9 --port=15002 --user=test1 --password=test1 --less-locking   --ignore-sysdb=1 --ignore-emptytb=1  --threads=1 --outputdir=/data/backup/data --complete-insert -B test -T customer --no-schemas  --compress=1

使用CSV格式导出数据:

./mydumper --host=172.27.25.11 --port=15002 --user=test1 --password=test1 -B test  --tables-list customer --load-data --fields-terminated-by="," --fields-enclosed-by='"'   --lines-starting-by="---" --lines-terminated-by="\n" --fields-escaped-by='\' -o /data/backup/data2

注意事项

  • --load-data 和 chunk_filesize 不能同时指定。
  • --database、--tables-list、--db-list 不能同时指定。
  • timestamp 类型默认导出会把时区转换到 UTC+0,可以通过--skip-tz-utc 改变这一行为,即不进行时区转换
  • 对于 big5、cp932、gbk、sjis、gb18031编码类型的表,由于编码字符集中含有和控制字符相等的字节,可能会出现导出后无法用 load data 导入的情况
  • --fields-escaped-by 设置转义字符,该转义的目的是为了避免字段内字符和格式控制字符冲突。如果设置为空,则不进行任何转义,如果数据和格式控制字符冲突,则可能会出现导出后无法用 load data 导入的情况,因此最好保持默认或者设置非空转移字符