您可以通过PolarDB提供的OSSOUTFILE功能,将数据库内的数据表导出为CSV文件,并存储在OSS引擎上。
前提条件
您的PolarDB集群需满足如下条件之一:
内核版本为MySQL 8.0.1,且修订版本为8.0.1.1.30及以上。
内核版本为MySQL 8.0.2,且修订版本为8.0.2.2.8及以上。
如何确认集群版本,详情请参见查询版本号。
注意事项
参数说明
参数 | 说明 |
参数 | 说明 |
loose_oss_outfile_buffer_size | 每个OSSOUTFILE线程可以占用的内存大小。取值范围:102400~536870912。默认值为134217728。单位:Byte。一般来说,占用内存越大,导出速度越快。 |
loose_max_oss_outfile_threads | PolarDB可以同时启动的OSSOUTFILE线程数量。取值范围:1~100。默认值为1。单位:个。 您可以使用 集群版本为PolarDB MySQL版8.0.1.1.38及以上的版本时,该参数已失效。 |
使用OSSOUTFILE功能导出CSV格式的数据文件到OSS引擎过程中占用集群最大的总内存为:
loose_max_oss_outfile_threads * loose_oss_outfile_buffer_size
尽量不要使OSSOUTFILE功能占用的总内存超过节点内存的5%,否则可能会影响当前节点上的其他业务。
使用说明
语法
SELECT * FROM table_name INTO OSSOUTFILE 'outfile_path' COLUMNS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' NULL_MARKER BY 'NULL' LINES TERMINATED BY '\n';
COLUMNS TERMINATED BY
:表示每个字段之间的分隔符。OPTIONALLY ENCLOSED BY
:表示字段两端的标识符,加上OPTIONALLY后,只会在字符串类型的字段两端加标识符,否则会在所有类型的字段两端加标识符。NULL_MARKER BY
:表示NULL值输出到文本的字符。NULL的输出值有如下三种定义方式,优先级从高到低:NULL_MARKER:直接定义NULL的输出值,
NULL_MARKER
可以定义为任意值,优先级最高。ESCAPED BY:只能写单字符,NULL的输出值为字符+N。例如,
ESCAPED BY '\'
,则NULL会被输出为\N,优先级第二。NULL(默认):如果以上两者都没有,则默认NULL的输出值为字符串“NULL”,优先级最低。NULL的两端没有
ENCLOSED
标识符。
LINES TERMINATED BY
:每一行之间的分隔符。
详情请参见MySQL官方文档。
参数说明
参数 | 说明 |
参数 | 说明 |
outfile_path | 主要标识输出到OSS的文件位置,包含如下几部分内容:
上述三者之间用 |
table_name | 表名称。 |
操作步骤
创建OSS Server
CREATE SERVER outserver FOREIGN DATA WRAPPER oss OPTIONS ( EXTRA_SERVER_INFO '{"oss_endpoint": "oss-cn-zhangjiakou-internal.aliyuncs.com", "oss_bucket": "polardb", "oss_access_key_id": "*******", "oss_access_key_secret": "********", "oss_prefix":"B_outfile"}');
此处以高版本创建OSS Server语句为例。实际操作时,请根据您集群的内核版本进行调整。
oss_endpoint
需为内网地址,规则格式为oss-{xxx}-internal.aliyuncs.com
。
导出至OSS
以上传的OSS文件oss://polardb/B_outfile/tpch/1t/parallel-lineitem.CSV
为例:
bucket名称:polardb。
路径及文件名称:
B_outfile/tpch/1t/parallel-lineitem.CSV
为例。
SELECT * FROM lineitem INTO OSSOUTFILE 'outserver/tpch/1t/parallel-lineitem.CSV' COLUMNS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' NULL_MARKER BY 'NULL' LINES TERMINATED BY '\n';
查询任务占用内存数与线程数
若您的集群内核版本为8.0.1.1.38及以上版本时,您可以通过以下命令查看当前导出任务实时占用的总内存数和总线程数。
查看导出任务实时占用的总内存数,单位为字节。
SHOW STATUS LIKE "%Oss_outfile_memory_used%";
查看导出任务实时占用的总线程数。
SHOW STATUS LIKE "%Oss_outfile_threads_running%";
当您使用的是集群地址执行导出任务时,必须保证SHOW STATUS
命令和导出命令在同一个节点执行,才能查询当前节点中导出命令占用的内存资源信息。
后续步骤
常见问题
- 本页导读 (1)
- 前提条件
- 注意事项
- 参数说明
- 使用说明
- 操作步骤
- 创建OSS Server
- 导出至OSS
- 查询任务占用内存数与线程数
- 后续步骤
- 常见问题
- 导出至OSS时,出现报错信息:ERROR 1086 (HY000): File 'xxxx' already exists
- 导出至OSS时,出现报错信息:OSS error: error message : The bucket you access does not belong to you., error code: AccessDenied