寫在前面
在現實世界中,對數據進行導入導出非常頻繁的,比如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文件。
最后
接下來就是通過導入或者恢復工具,測試上面導出的文件。




