GBase 8a删除加载日志loader_logs方法

GBase 8a通过LOAD方式加载时,如果有报错或者加载错误数据,会将加载日志和数据记录到连接节点的load_logs目录下。因为是用户数据,当前版本尚没有配置自动删除功能,而是建议用户在LOAD语句里将错误数据导出到用户自己指定的ftp/sftp目标服务器,自行管理。本文介绍在默认情况下,如何通过rsync命令快速清理这些日志。

环境

构造加载错误日志

弄了一个表结构和数据不一致的情况。

gbase> load data infile 'sftp://gbase:gbase1234@10.0.2.101/home/gbase/aggr_loc_peersigip_srvapp_hour_week_202211.csv' into table t1  fields terminated by '\t';
Query OK, 0 rows affected (Elapsed: 00:00:04.86)
Task 14 finished, Loaded 0 records, Skipped 276008 records

gbase> load data infile 'sftp://gbase:gbase1234@10.0.2.101/home/gbase/aggr_loc_peersigip_srvapp_hour_week_202210.csv' into table t1  fields terminated by '\t';
Query OK, 0 rows affected (Elapsed: 00:00:01.25)
Task 15 finished, Loaded 0 records, Skipped 559 records
gbase>

查看加载日志

加载日志(有错误数据时产生)默认放在加载连接节点的gcluster/log/gcluster/loader_logs下面。按照加载load的taskid号创建目录,内部是1个加载结果和有错误的各个分片的错误日志和对应错误数据。

[gbase@gbase_rh7_001 loader_logs]$ pwd
/opt/gbase/gcluster/log/gcluster/loader_logs
[gbase@gbase_rh7_001 loader_logs]$ ll
total 0
drwx------. 2 gbase gbase 140 Apr  1 10:30 14
drwx------. 2 gbase gbase 140 Apr  1 10:30 15
drwx------. 2 gbase gbase 140 Apr  1 10:30 16
drwx------. 2 gbase gbase 140 Apr  1 10:30 17
[gbase@gbase_rh7_001 loader_logs]$ ll 14
total 58988
-rw-------. 1 gbase gbase      272 Apr  1 10:30 14_loader_result.log
-rw-------. 1 gbase gbase 26264424 Apr  1 10:30 14_testdb_t1_n1_10.0.2.101_20220401103041.err
-rw-------. 1 gbase gbase 34128469 Apr  1 10:30 14_testdb_t1_n1_10.0.2.101_20220401103041.trc
[gbase@gbase_rh7_001 loader_logs]$ ll 15
total 124
-rw-------. 1 gbase gbase   264 Apr  1 10:30 15_loader_result.log
-rw-------. 1 gbase gbase 51650 Apr  1 10:30 15_testdb_t1_n1_10.0.2.101_20220401103051.err
-rw-------. 1 gbase gbase 67596 Apr  1 10:30 15_testdb_t1_n1_10.0.2.101_20220401103051.trc
[gbase@gbase_rh7_001 loader_logs]$

通过Rsync清理日志

一般如果文件不多,可以用

rm -fr *

来清理,如果再多,可以用

ls | xargs rm -fr

来清理,如果极多,或者如上的方法耗时很长,可以考虑用rsync的方法清理大量的目录和文件

语法

rsync --delete-before -d -a -H -v --progress --stats SOURCE  TARGET

其中有关参数

  • -delete-before 传输前进行删除操作,而不是传输中(–delete-during)
  • -d 不递归的传输目录
  • -a 归档,表示以递归方式传输文件
  • -H 保持硬链接的文件
  • -v 详细模式,输出些日志
  • –progress 同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、 同步的文件传输速度等
  • –stats 每个文件的传输状态
  • SOURCE 源文件
  • TARGET 目标文件

因为本文是介绍删除,那么源文件就是个空目录

创建空目录

如下在/tmp目录创建一个空目录,名字随意。

mkdir /tmp/BLANK

Rsync删除loader_log目录

因为是删除,所以不需要那些过程之类的参数,只使用–delete-before。同时是否递归目录,需要指定-d不递归,我们只有1级目录

注意,SOURCE使用的是/tmo/BLANK/ 代表是这个目录下的内容, 如果不带最后的/,会导致将BLANK目录同步到目标,而不是BLANK目录下的内容。

[gbase@gbase_rh7_001 gcluster]$ rsync --delete-before -d -v /tmp/BLANK/  /opt/gbase/gcluster/log/gcluster/loader_logs
building file list ... done
deleting 17/17_testdb_t1_n1_10.0.2.101_20220401103055.trc
deleting 17/17_testdb_t1_n1_10.0.2.101_20220401103055.err
deleting 17/17_loader_result.log
deleting 17/
deleting 16/16_testdb_t1_n1_10.0.2.101_20220401103053.trc
deleting 16/16_testdb_t1_n1_10.0.2.101_20220401103053.err
deleting 16/16_loader_result.log
deleting 16/
deleting 15/15_testdb_t1_n1_10.0.2.101_20220401103051.trc
deleting 15/15_testdb_t1_n1_10.0.2.101_20220401103051.err
deleting 15/15_loader_result.log
deleting 15/
deleting 14/14_testdb_t1_n1_10.0.2.101_20220401103041.trc
deleting 14/14_testdb_t1_n1_10.0.2.101_20220401103041.err
deleting 14/14_loader_result.log
deleting 14/

sent 22 bytes  received 12 bytes  68.00 bytes/sec
total size is 0  speedup is 0.00
[gbase@gbase_rh7_001 gcluster]$ ll loader_logs/
total 0
[gbase@gbase_rh7_001 gcluster]$

总结

实际测试,通过rsync删除目录的速度,远高于rm的方式。网上找到的资料,是rsync是多线程处理,而rm是单线程的。其中rm耗时40分钟的场景,用rsync只需要 18秒。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gbase 8a 是一款国产的高性能关系型数据库管理系统,与MySQL是两款不同的数据库软件,因此不能直接使用MySQL的驱动来连接gbase 8a。 不过,gbase 8a提供了自己的ODBC驱动,可以使用ODBC的方式来连接gbase 8a数据库。在Java中,我们可以使用JDBC-ODBC桥来连接gbase 8a数据库,具体步骤如下: 1. 安装gbase 8a ODBC驱动,可以从gbase官网下载或联系gbase技术支持获取下载链接。 2. 配置ODBC数据源,在控制面板中打开“ODBC数据源”窗口,添加一个gbase的数据源,填写相应的连接信息。 3. 在Java中使用JDBC-ODBC桥来连接gbase 8a数据库,示例代码如下: ``` String url = "jdbc:odbc:yourdataresource"; // 数据源名称 String user = "username"; // 数据库用户名 String password = "password"; // 数据库密码 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection conn = DriverManager.getConnection(url, user, password); ``` 在上述代码中,"jdbc:odbc:yourdataresource" 中的 "yourdataresource" 是ODBC数据源的名称,user 和 password 分别是gbase 8a数据库的用户名和密码。通过 Class.forName() 加载 JDBC-ODBC桥的驱动程序,在 DriverManager.getConnection() 方法中传入连接字符串、用户名和密码来获取连接对象。 4. 进行数据库操作,使用JDBC标准的API进行数据库操作,例如: ``` Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM tableName"); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); //处理查询结果 } rs.close(); stmt.close(); conn.close(); ``` 以上就是使用JDBC-ODBC桥连接gbase 8a数据库的基本步骤,希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值