首批通过分布式安全可靠测评,为关键业务系统打造
使用示例
更新时间:2023-08-24 10:21:07
本篇旨在介绍 OBDUMPER 支持的常见业务场景并提供对应的使用示例。
下表为示例中使用的数据库信息:
| 数据库信息 | 示例值 |
|---|---|
| 集群名 | cluster_a |
| OceanBase DataBase Proxy (ODP) 主机地址 | 10.0.0.0 |
| OceanBase DataBase Proxy (ODP) 端口号 | 2883 |
| 集群的租户名 | mysql |
| sys 租户下 root/proxyro 用户名 | **u*** |
| sys 租户下 root/proxyro 用户的密码 | ****** |
| 业务租户下的用户账号(要求读写权限) | test |
| 业务租户下的用户密码 | ****** |
| Schema 名称 | USERA |
导出 DDL 定义文件
场景描述:将 Schema USERA 中所有已支持的对象定义语句导出到 /output 目录中(OceanBase 4.0.0.0 之前的版本要求提供 sys 租户的密码)。
示例语句:
[admin@localhost]> ./obdumper -h 10.0.0.0 -P 2883 -u test -p ****** --sys-user **u*** --sys-password ****** -c cluster_a -t mysql -D USERA --ddl --all -f /output
说明
--sys-user选项用于连接 sys 租户下拥有特定权限的用户。导出时如果未指定--sys-user选项,默认指定的是--sys-user root。
任务结果示例:
导出内容示例:
导出 CSV 数据文件
场景描述:将 Schema USERA 中所有表中的数据按照 CSV 格式导出到 /output 目录中(OceanBase 4.0.0.0 之前的版本要求提供 sys 租户的密码)。CSV 数据文件(后缀名 .csv)请参考 RFC 4180 规范,CSV 数据文件以纯文本形式存储,可通过文本编辑器或者 Excel 等工具直接打开。
示例语句:
[admin@localhost]> ./obdumper -h 10.0.0.0 -P 2883 -u test -p ****** --sys-user **u*** --sys-password ****** -c cluster_a -t mysql -D USERA --csv --table '*' -f /output
任务结果示例:
导出内容示例:
导出 SQL 数据文件
场景描述:将 Schema USERA 中所有表中的数据按照 SQL 格式导出到 /output 目录中(OceanBase 4.0.0.0 之前的版本要求提供 sys 租户的密码)。SQL 数据文件(后缀名 .sql)存储的是 Insert SQL 语句,可通过文本编辑器或者 SQL 编辑器等工具直接打开。
示例语句:
[admin@localhost]> ./obdumper -h 10.0.0.0 -P 2883 -u test -p ****** --sys-user **u*** --sys-password ****** -c cluster_a -t mysql -D USERA --sql --table '*' -f /output
任务结果示例:
导出内容示例:
导出 CUT 数据文件
场景描述: 将 Schema USERA 中所有表中的数据按照 CUT 格式导出到 /output 目录中(OceanBase 4.0.0.0 之前的版本要求提供 sys 租户的密码)。同时指定导出数据的列分隔字符串为 |@|。CUT 数据文件(后缀名 .dat)中的数据是以单个字符或者字符串分隔,可通过文本编辑器等工具直接打开。
示例语句:
./obdumper -h 10.0.0.0 -P 2883 -u test -p ****** --sys-user **u*** --sys-password ****** -c cluster_a -t mysql -D USERA --table '*' -f /output --cut --column-splitter '|@|' --trail-delimiter
任务结果示例:
导出内容示例:
自定义导出文件名
场景描述: 将 Schema USERA 中 table 表的数据按照 CSV 格式导出到 /output 目录中(OceanBase 4.0.0.0 之前的版本要求提供 sys 租户的密码)。同时指定导出的文件名称为 filetest。
示例语句:
./obdumper -h 10.0.0.0 -P 2883 -u test -p ****** --sys-user **u*** --sys-password ****** -c cluster_a -t mysql -D USERA --csv --table 'table' --file-name 'filetest.txt' -f /output
任务结果示例:
导出内容示例:
导出数据时使用控制文件
场景描述: 将 Schema USERA 中 table 表的数据按照 CSV 格式导出到 /output 目录中(OceanBase 4.0.0.0 之前的版本要求提供 sys 租户的密码)。同时指定控制文件的路径为 /output,为导出的数据进行预处理。
示例语句:
./obdumper -h 10.0.0.0 -P 2883 -u test -p ****** --sys-user **u*** --sys-password ****** -c cluster_a -t mysql -D USERA --table'table' -f /output --csv --ctl-path /output
说明
要求数据库中定义的表名与其对应的控制文件名大小写一致,否则 OBDUMPER 无法识别控制文件。控制文件的定义规则可参考 预处理函数。
导出表中指定列的数据
场景描述: 将 Schema USERA 中 table 表的数据按照 CSV 格式导出到 /output 目录中(OceanBase 4.0.0.0 之前的版本要求提供 sys 租户的密码)。同时指定 --exclude-column-names 选项忽略表中不需要被导出的列。
示例语句:
./obdumper -h 10.0.0.0 -P 2883 -u test -p ****** --sys-user **u*** --sys-password ****** -c cluster_a -t mysql -D USERA -f /output --table'table' --csv --exclude-column-names 'deptno'
导出自定义查询结果集
场景描述: 将 --query-sql 选项指定的查询语句执行的结果集按照 CSV 格式导出到 /output 目录中(OceanBase 4.0.0.0 之前的版本要求提供 sys 租户的密码)。
示例语句:
./obdumper -h 10.0.0.0 -P 2883 -u test -p ****** --sys-user **u*** --sys-password ****** -c cluster_a -t mysql -D USERA -f /output --csv --query-sql 'select deptno,dname from dept where deptno<3000'
说明
用户需要保证 SQL 查询语句的语法正确性以及查询性能。
公共云导出模式和数据
场景描述:用户无法提供 sys 租户密码时,将公共云 Schema USERA 中所有已定义的数据库对象和表数据导出到 /output 目录中。
示例语句:
[admin@localhost]> ./obdumper -h 10.0.0.0 -P 2883 -u test -p ****** -D USERA --ddl --csv --public-cloud --all -f /output
私有云导出模式和数据
场景描述:用户无法提供 sys 租户密码时,将私有云 Schema USERA 中所有已定义的数据库对象和表数据导出到 /output 目录中。
示例语句:
[admin@localhost]> ./obdumper -h 10.0.0.0 -P 2883 -u test -p ****** -c cluster_a -t mysql -D USERA --ddl --csv --no-sys --all -f /output
注意
在公共云或者私有云环境中无法提供 sys 租户密码时,导出数据库对象定义功能可能存在缺陷。例如:MySQL 租户无法导出序列定义;OceanBase 2.2.70 之前的版本,无法导出表组定义;OceanBase Oracle 2.2.30 及之前的版本,无法导出索引定义;OceanBase 2.2.70 之前的版本,无法导出唯一索引的分区信息;OceanBase Oracle 2270 (含) ~ 4.0.0.0 的版本,无法导出分区表的唯一索引定义。
设置会话级别变量
# This variable is used to init session.
# The default value is 3 min.
ob.query.timeout.for.init.session=3
# This variable is used to init session.
# The default value is 3 min.
ob.trx.timeout.for.init.session=3
# This variable is used to query metadata, such as
# for query database;
# for query row key, primary key, macro range;
# for query primary key;
# for query unique key;
# for query load status;
# The default value is 5 min.
ob.query.timeout.for.query.metadata=5
# This variable is used to dump record for CSV, CUT and SQL
# The default value is 24 hours
ob.query.timeout.for.dump.record=24
# This variable is used to dump record for query-sql
# The default value is 5 hours
ob.query.timeout.for.dump.custom=5
# This variable is used to execute DDL, such as load schema, truncate table
# The default value is 1 min
ob.query.timeout.for.exec.ddl=1
# This variable is used to execute DML, such as delete table
# The default value is 1 hour
ob.query.timeout.for.exec.dml=1
# This variable is used to dump record for CSV, CUT and SQL
# The default value is 24 hours
ob.trx.timeout.for.dump.record=24
# This variable is used to dump record for query-sql
# The default value is 5 hours
ob.trx.timeout.for.dump.custom=5
# This variable is used to dump record for CSV, CUT and SQL
# The default value is 24 hours
ob.net.read.timeout.for.dump.record=24
# This variable is used to dump record for query-sql
# The default value is 5 hours
ob.net.read.timeout.for.dump.custom=5
# This variable is used to dump record for CSV, CUT and SQL
# The default value is 24 hours
ob.net.write.timeout.for.dump.record=24
# This variable is used to dump record for query-sql
# The default value is 5 hours
ob.net.write.timeout.for.dump.custom=5
# This variable is used to set session variable ob_proxy_route_policy
# The default value is follower_first
ob.proxy.route.policy=follower_first
# This variable is used to set jdbc url option useSSL
# The default value is false
jdbc.url.use.ssl=false
# This variable is used to set jdbc url option useUnicode
# The default value is true
jdbc.url.use.unicode=true
# This variable is used to set jdbc url option socketTimeout
# The default value is 30 min
jdbc.url.socket.timeout=30
# This variable is used to set jdbc url option connectTimeout
# The default value is 3 min
jdbc.url.connect.timeout=3
# This variable is used to set jdbc url option characterEncoding
# The default value is utf8
jdbc.url.character.encoding=utf8
# This variable is used to set jdbc url option useCompression
# The default value is true
jdbc.url.use.compression=true
# This variable is used to set jdbc url option cachePrepStmts
# The default value is true
jdbc.url.cache.prep.stmts=true
# This variable is used to set jdbc url option noDatetimeStringSync
# The default value is true
jdbc.url.no.datetime.string.sync=true
# This variable is used to set jdbc url option useServerPrepStmts
# The default value is true
jdbc.url.use.server.prep.stmts=true
# This variable is used to set jdbc url option allowMultiQueries
# The default value is true
jdbc.url.allow.multi.queries=true
# This variable is used to set jdbc url option rewriteBatchedStatements
# The default value is true
jdbc.url.rewrite.batched.statements=true
# This variable is used to set jdbc url option useLocalSessionState
# The default value is true
jdbc.url.use.local.session.state=true
# This variable is used to set jdbc url option zeroDateTimeBehavior
# The default value is convertToNull
jdbc.url.zero.datetime.behavior=convertToNull
# This variable is used to set jdbc url option verifyServerCertificate
# The default value is false
jdbc.url.verify.server.certificate=false
# This variable is used to set jdbc url option usePipelineAuth
# The default value is false
jdbc.url.use.pipeline.auth=false
# This variable is used to set jdbc url option socketProxyHost
# The default value is null
jdbc.url.socks.proxy.host=null
# This variable is used to set jdbc url option socketProxyPort
# The default value is null
jdbc.url.socks.proxy.port=null