[TOC] # 通过命令行备份 ## 备份前准备 1. 使用 sys 租户的 root 用户登录数据库。 2. 根据业务需要,配置 backup\_region 配置项。 该配置项用于控制数据备份的 Region。配置后,系统会优先执行指定 Region 的调度备份任务;如果不配置,则会执行所有 Region 的调度备份任务。 3. 配置备份目的地。 在进行备份前,需要执行`ALTER SYSTEM`语句配置备份的目的地。目前,OceanBase 数据库支持 NFS 、 OSS 文件系统和腾讯云 COS 作为备份目的地 。 例如: * NFS ~~~ obclient> ALTER SYSTEM SET backup_dest='file:///data/nfs/backup'; ~~~ * OSS ~~~ obclient> ALTER SYSTEM SET backup_dest='oss://antsys-oceanbasebackup/backup_rd/?host=cn-hangzhou-alipay-b.oss-cdn.aliyun-inc.com&access_id=xxx&access_key=xxx'; ~~~ * 腾讯云 COS ~~~ obclient> ALTER SYSTEM SET backup_dest='cos://backup-1304745170/backup_rd/20210127?host=cos.ap-nanjing.myqcloud.com&access_id=xxx&access_key=xxx&appid=xxx'; ~~~ 4. (可选)开启归档日志压缩功能。 执行以下语句开启归档日志压缩,默认使用压缩算法 lz4\_1.0。 ~~~ obclient> ALTER SYSTEM SET backup_log_archive_option='compression= enable'; ~~~ 日志压缩支持动态修改压缩算法,目前支持的压缩算法有:zstd\_1.3.8 和 lz4\_1.0。如果需要使用其他压缩算法,则可以执行以下命令: ~~~ obclient> ALTER SYSTEM SET backup_log_archive_option='compression= zstd_1.3.8'; obclient> ALTER SYSTEM SET backup_log_archive_option='compression= lz4_1.0'; ~~~ **说明** 开启后,后续如果需要关闭归档日志压缩功能,可执行`ALTER SYSTEM SET backup_log_archive_option='compression= disable';`语句关闭。 5. (可选)配置备份模式。 备份支持 optional 模式和 mandatory 模式: * optional 模式表示以用户业务优先。在该模式下,当备份(日志归档)来不及的情况下,日志可能来不及备份就回收了,可能会发生备份断流。 * mandatory 模式表示以备份优先。在该模式下如果备份跟不上用户数据的写入,可能会导致用户无法写入。 默认为 optional 模式,两种模式之间可以切换。切换配置模式的示例命令如下: ~~~ obclient> ALTER SYSTEM SET backup_log_archive_option = 'optional'; obclient> ALTER SYSTEM SET backup_log_archive_option = 'mandatory'; ~~~ **说明** 您也可以使用`ALTER SYSTEM SET backup_log_archive_option = 'optional compression= enable';`命令同时配置备份模式并开启归档日志压缩功能。 6. 执行以下语句,启动 OceanBase 数据库的归档功能。 ~~~ obclient> ALTER SYSTEM ARCHIVELOG; ~~~ 启动成功后,OceanBase 数据库会自动将集群产生的事务日志定期备份到之前指定的备份目的地。 7. 执行以下语句,确认日志备份任务是否已开始。 ~~~ obclient> SELECT * FROM CDB_OB_BACKUP_ARCHIVELOG_SUMMARY; ~~~ 当`STATUS`为`DOING`时,表示日志备份任务已开始。 ## 全量备份 1. 使用 sys 租户的 root 用户登录数据库。 2. 在执行全量备份前,执行以下语句,对集群进行一次合并。 ~~~ obclient> ALTER SYSTEM MAJOR FREEZE; ~~~ 3. 执行以下语句,查看合并进度。 ~~~ obclient> SELECT * FROM __all_zone WHERE name='merge_status'; ~~~ 结果如下所示: ~~~ +----------------------------+----------------------------+-------+--------------+-------+------+ | gmt_create | gmt_modified | zone | name | value | info | +----------------------------+----------------------------+-------+--------------+-------+------+ | 2020-05-26 17:50:11.107352 | 2020-05-26 17:50:45.871523 | | merge_status | 0 | IDLE | | 2020-05-26 17:50::11.109678 | 2020-05-26 17:50:55.780264 | zone1 | merge_status | 0 | IDLE | +----------------------------+----------------------------+-------+--------------+-------+------+ ~~~ 当`info`为`IDLE`时,则表示合并结束。 4. 执行以下语句,进行集群的全量备份。 ~~~ obclient> ALTER SYSTEM BACKUP DATABASE; ~~~ 备份过程中,您可以通过执行以下语句,在视图中查看备份任务的状态和详细信息: * 查看正在备份的任务 ~~~ obclient> SELECT * FROM CDB_OB_BACKUP_PROGRESS; ~~~ 示例结果如下: ~~~ obclient> SELECT * FROM CDB_OB_BACKUP_PROGRESS; +-------------+--------+-------------+-----------+-----------------+-------------------+------------------------+--------------------------+-------------+--------------+----------------------------+----------------------------+---------+ | INCARNATION | BS_KEY | BACKUP_TYPE | TENANT_ID | PARTITION_COUNT | MACRO_BLOCK_COUNT | FINISH_PARTITION_COUNT | FINISH_MACRO_BLOCK_COUNT | INPUT_BYTES | OUTPUT_BYTES | START_TIME | COMPLETION_TIME | STATUS | +-------------+--------+-------------+-----------+-----------------+-------------------+------------------------+--------------------------+-------------+--------------+----------------------------+----------------------------+---------+ | 1 | 3 | I | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 2020-09-16 11:51:21.743752 | 2020-09-16 11:51:22.624217 | RUNNING | | 1 | 3 | I | 1001 | 119 | 0 | 0 | 0 | 0 | 0 | 2020-09-16 11:51:21.743752 | 2020-09-16 11:51:22.281717 | RUNNING | | 1 | 3 | I | 1002 | 5317 | 0 | 0 | 0 | 0 | 0 | 2020-09-16 11:51:21.743752 | 2020-09-16 11:51:22.064521 | RUNNING | +-------------+--------+-------------+-----------+-----------------+-------------------+------------------------+--------------------------+-------------+--------------+----------------------------+----------------------------+---------+ 3 rows in set (0.01 sec) ~~~ * 查看备份任务的历史 ~~~ obclient> SELECT * FROM CDB_OB_BACKUP_SET_DETAILS; ~~~ 示例结果如下: ~~~ obclient> SELECT * FROM CDB_OB_BACKUP_SET_DETAILS; +-------------+-----------+--------+-------------+-----------------+----------------------------+----------------------------+------------------+------+------------+-------------+------------+--------------+-------------------+-------------------+----------------------+---------------------------+--------------------+ | INCARNATION | TENANT_ID | BS_KEY | BACKUP_TYPE | ENCRYPTION_MODE | START_TIME | COMPLETION_TIME | ELAPSED_SECONDES | KEEP | KEEP_UNTIL | DEVICE_TYPE | COMPRESSED | OUTPUT_BYTES | OUTPUT_RATE_BYTES | COMPRESSION_RATIO | OUTPUT_BYTES_DISPLAY | OUTPUT_RATE_BYTES_DISPLAY | TIME_TAKEN_DISPLAY | +-------------+-----------+--------+-------------+-----------------+----------------------------+----------------------------+------------------+------+------------+-------------+------------+--------------+-------------------+-------------------+----------------------+---------------------------+--------------------+ | 1 | 1 | 2 | D | NONE | 2020-09-16 08:12:15.982675 | 2020-09-16 08:17:19.874385 | 0 | NO | | FILE | NO | 0 | 0.0000 | NULL | 0.00MB | 0.00MB/S | 00:05:03.891710 | | 1 | 1 | 3 | I | NONE | 2020-09-16 11:51:21.743752 | 2020-09-16 12:00:06.640995 | 0 | NO | | FILE | NO | 0 | 0.0000 | NULL | 0.00MB | 0.00MB/S | 00:08:44.897243 | | 1 | 1001 | 2 | D | NONE | 2020-09-16 08:12:15.982675 | 2020-09-16 08:12:22.288826 | 0 | NO | | FILE | NO | 0 | 0.0000 | NULL | 0.00MB | 0.00MB/S | 00:00:06.306151 | | 1 | 1001 | 3 | I | NONE | 2020-09-16 11:51:21.743752 | 2020-09-16 11:51:34.535564 | 0 | NO | | FILE | NO | 0 | 0.0000 | NULL | 0.00MB | 0.00MB/S | 00:00:12.791812 | | 1 | 1002 | 2 | D | NONE | 2020-09-16 08:12:15.982675 | 2020-09-16 08:17:18.426037 | 0 | NO | | FILE | NO | 0 | 0.0000 | NULL | 0.00MB | 0.00MB/S | 00:05:02.443362 | | 1 | 1002 | 3 | I | NONE | 2020-09-16 11:51:21.743752 | 2020-09-16 12:00:05.837062 | 0 | NO | | FILE | NO | 0 | 0.0000 | NULL | 0.00MB | 0.00MB/S | 00:08:44.093310 | +-------------+-----------+--------+-------------+-----------------+----------------------------+----------------------------+------------------+------+------------+-------------+------------+--------------+-------------------+-------------------+----------------------+---------------------------+--------------------+ 6 rows in set (0.00 sec) ~~~ `CDB_OB_BACKUP_SET_DETAILS`中,部分字段的说明如下表所示。 <table cols="2" id="table-g4u-f4y-xip" class="table"><colgroup colname="col1" colnum="1" colwidth="1*" id="colgroup-qyz-bgc-ynj" style="width:33.33333333333333%"></colgroup><colgroup colname="col2" colnum="2" colwidth="2*" id="colgroup-m02-dch-m08" style="width:66.66666666666666%"></colgroup><thead id="thead-xlr-tcu-yb7" class="thead"><tr id="tr-b2t-93f-owi"><th id="td-ft1-1zz-7s3"><p id="p-2ti-3hm-72g">字段</p></th><th id="td-c38-wum-stq"><p id="p-ml9-s6e-b3r">说明</p></th></tr></thead><tbody id="tbody-rde-gue-olo" class="tbody"><tr id="tr-7zj-r2s-f9y"><td namest="col1" nameend="col1" morerows="0" id="td-4rr-dfj-rjt"><p id="p-hux-sjs-o9l">OUTPUT_BYTES</p></td><td namest="col2" nameend="col2" morerows="0" id="td-n4t-wza-hel"><p id="p-0ea-cc4-ydl">表示写在外部存储介质的数据量,单位为 Bytes</p></td></tr><tr id="tr-5rm-cpf-u6a"><td id="td-udy-w8z-wpo"><p id="p-qhp-jul-4js">OUTPUT_RATE_BYTES</p></td><td id="td-ho7-np0-eai"><p id="p-3fw-c20-ga3">表示 1 秒内上传的数据量,单位为 Bytes</p></td></tr><tr id="tr-t7z-xdt-bqf"><td namest="col1" nameend="col1" id="td-mrw-3p4-xqd"><p id="p-998-ooo-tot">COMPRESSION_RATIO</p></td><td namest="col2" nameend="col2" id="td-gwv-2mx-v4i"><p id="p-vrl-k5i-uqb">表示压缩比例,计算公式:<code data-tag="code" class="code">COMPRESSION_RATIO = OUTPUT_BYTES / INPUT_BYTES</code></p><p id="p-kk6-hn1-xni">其中,<code data-tag="code" class="code">INPUT_BYTES</code> 是 OBServer 本次需要备份的数据的大小,故可以通过 <code data-tag="code" class="code">COMPRESSION_RATIO</code> 的值计算出 INPUT_BYTES 的值,即 <code data-tag="code" class="code">INPUT_BYTES = OUTPUT_BYTES / COMPRESSION_RATIO</code></p></td></tr><tr id="tr-vrq-4ql-jqy"><td namest="col1" nameend="col1" id="td-fnq-okd-892"><p id="p-0zg-dkz-jv4">OUTPUT_BYTES_DISPLAY</p></td><td namest="col2" nameend="col2" id="td-tzi-hgo-6pt"><p id="p-l4b-951-vq6">对于 <code data-tag="code" class="code">OUTPUT_BYTES</code> 单位转换之后的展示,单位为 MB 、GB、TB 和 PB 中的一种</p></td></tr><tr id="tr-s2w-9r3-nl6"><td namest="col1" nameend="col1" id="td-jwg-ott-8xp"><p id="p-ntm-r65-klu">OUTPUT_RATE_BYTES_DISPLAY</p></td><td namest="col2" nameend="col2" id="td-dgo-o5c-bet"><p id="p-xl8-we9-21z">对于 <code data-tag="code" class="code">OUTPUT_RATE_BYTES</code> 单位转换之后的展示,单位为 MB 、GB、TB 和 PB 中的一种</p></td></tr><tr id="tr-j0o-q9d-etv"><td namest="col1" nameend="col1" id="td-ks1-mom-zxy"><p id="p-t1u-67j-6sk">TIME_TAKEN_DISPLAY</p></td><td namest="col2" nameend="col2" id="td-6ih-oyj-31j"><p id="p-6h4-000-mat">以 <code data-tag="code" class="code">TIMESTAMP</code> 的方式展示 COMPLETION_TIME - START_TIME</p></td></tr></tbody></table> ## 增量备份 增量备份是从上一个全量备份开始,备份所有修改过的宏块。建议在执行增量备份前确保已经有全量备份存在。 1. 使用 sys 租户的 root 用户登录数据库。 2. 执行以下语句,启动增量备份。 ~~~ obclient> ALTER SYSTEM BACKUP INCREMENTAL DATABASE; ~~~