写在前面
在现实世界中,对数据进行导入导出非常频繁的,比如oracle有expdp、impdp对数据进行二进制格式的导入导出,也有sqluldr2.bin(非Oracle出品)和sqllloader提供文本文件格式的导出导入,mysql中有mysqldump、select .. into outfile对格式化的文本文件以及SQL语句进行导入导出,Oceanbase有obdumper和obloader等等,可见所有的数据库都有自己的逻辑导入导出工具,因为逻辑备份、数据迁移都会用到这些工具。
学习环境
NODE1(主库) | NODE2(从库) | |
Hostname | pkt_mogdb1 | pkt_mogdb2 |
IP | 10.80.9.249 | 10.80.9.250 |
磁盘 | 20G | 20G |
内存 | 2G | 2G |
数据导出
1、创建测试表
使用《MogDB学习笔记-从0开始》创建的数据库和模式连接主库操作,可以使用命令 gs_om -t status --detail确定那台服务器是主库
[omm@pkt_mogdb1 ~]$ gs_om -t status --detail [ Cluster State ] cluster_state : Normal redistributing : No current_az : AZ_ALL [ Datanode State ] node node_ip port instance state ------------------------------------------------------------------------------------------ 1 pkt_mogdb1 10.80.9.249 26000 6001 /opt/mogdb/data/data P Primary Normal 2 pkt_mogdb2 10.80.9.250 26000 6002 /opt/mogdb/data/data S Standby Normal |
其中state显示P primary的为主库,如果安装了MogHA高可用软件,可以直接连接VIP进行操作。
创建两个测试表dump_tables和dump_tables_1
[omm@pkt_mogdb1 data]$ gsql -d db_mogdb -h 10.80.9.249 -U zkh -p 26000 -W Zkh12345678 db_mogdb=>create table dump_tables as select * from pg_catalog.pg_tables; db_mogdb=> create table dump_tables_1 as select * from pg_catalog.pg_tables; db_mogdb=> select count(*) from dump_tables; count ------- 128 (1 row) |
登录从库查看同步情况
[omm@pkt_mogdb2 ~]$ gsql -d db_mogdb -h 10.80.9.250 -U zkh -p 26000 -W Zkh12345678 gsql ((MogDB 3.0.0 build 62408a0f) compiled at 2022-06-30 14:21:11 commit 0 last mr ) Non-SSL connection (SSL connection is recommended when requiring high-security) Type "help" for help. db_mogdb=> select count(*) from dump_tables; count ------- 128 (1 row) |
可见从库还是比较稳定,因为今天出差导致网络变化MogHA出现问题,从库状态变成了need repair的状态,于是通过gs_ctr build data_dir重建了从库,担心从库有问题,所以重新验证了一下。
2、数据导出命令gs_dump
根据官方文档中https://docs.mogdb.io/zh/mogdb/v3.0/5-gs_dump的描述,支持导出4中文件格式,接下来将对这四种格式一一进行测试,查看文件内容。
- 测试一:文本文件格式
通过指定-F参数 p表示导出文本文件格式,默认也是这种格式
3.1、导出库中的所有信息包括表结构和数据
[omm@pkt_mogdb1 data]$ gs_dump -p 26000 db_mogdb -f dump1.sql |
这个命令是导出了数据库中用户定义的数据库对象,比如模式、表的ddl语句
文件中导出的表结构如下:
数据格式如下:
通过文件格式查看,这种文件形式是无法给其他异构数据库直接使用。
3.2、导出库中的所有表结构
[omm@pkt_mogdb1 data]$ gs_dump -p 26000 db_mogdb --schema-only -f dump2.sql |
3.3、导出库中的所有表数据
[omm@pkt_mogdb1 data]$ gs_dump -p 26000 db_mogdb -a -f dump3.sql |
3.4、导出某个表
[omm@pkt_mogdb1 data]$ gs_dump -p 26000 db_mogdb -U zkh -W Zkh12345678 --table=dump_tables -f dump3.sql |
注意:导出表示需要指定-u参数,这样会去指定的模式中去查找,否则会提示表不存在
3.5、导出表数据为sql语句格式
以上几种导出方式都是按照cope的方式导出,也可以指定导出insert格式的结构,这样如果数据量小的话可以在其他异构数据库中执行。
gs_dump -p 26000 db_mogdb -U zkh -W Zkh12345678 --table=dump_tables -f dump4.sql --insert |
查看文件内容如下都是insert语句
4、测试二:自定义归档模式
通过F指定c参数导出自定义归档模式,支持从导出文件中恢复所有或所选数据库对象,使用gs_restore可以选择要从自定义归档导出文件中导入相应的数据库对象,这种格式是二进制格式。
如果数据量打建议不要使用文本格式的文件,建议使用这种格式。当然这种格式也只是针对与MogDB/openguass使用.
4.1、导出整个数据库
[omm@pkt_mogdb1 ~]$ gs_dump -h 10.80.9.249 -p 26000 -U zkh -W Zkh12345678 db_mogdb -F c -f /home/omm/datadump |
4.2、导出某个表
gs_dump -h 10.80.9.249 -p 26000 -U zkh -W Zkh12345678 db_mogdb -F c -f /home/omm/datadump/dumpc2 --table=dump_tables |
4.3、只导出某个表数据
gs_dump -h 10.80.9.249 -p 26000 -U zkh -W Zkh12345678 db_mogdb -a -F c -f /home/omm/datadump/dumpc3 --table=dump_tables |
5、测试三:目录归档格式
通过-F参数指定d选项,此选项会创建一个目录.
5.1、导出整个数据库
[omm@pkt_mogdb1 ~]$ gs_dump -h 10.80.9.249 -p 26000 -U zkh -W Zkh12345678 db_mogdb -F d -f /home/omm/datadump |
- 测试四:tar归档模式
通过-F参数指定t选项,tar归档文件支持从导出文件中恢复所有或所选数据库对象。tar归档格式不支持压缩且对于单独表大小应小于8GB。
6.1、导出整个数据库
[omm@pkt_mogdb1 ~]$ gs_dump -h 10.80.9.249 -p 26000 -U zkh -W Zkh12345678 db_mogdb -F t -f /home/omm/datat.tar |
加压生成的datat.tar
[omm@pkt_mogdb1 ~]$ tar -xvf datat.tar toc.dat 4755.dat 4757.dat 4758.dat 4756.dat restore.sql |
其中restore.sql是ddl语句,其余的是每个表对应一个二进制dat文件。
最后
接下来就是通过导入或者恢复工具,测试上面导出的文件。