Spider Functions

Spider 存储引擎提供了以下 4 个 UDF 函数,是与 Spider 存储引擎一起安装的 UDF:

SPIDER_DIRECT_SQL:在远程服务器中执行 sql(Execute SQL on the remote server)
SPIDER_BG_DIRECT_SQL:后台 SQL 执行(Background SQL execution)
SPIDER_COPY_TABLES:(复制表数据)Copy table data
SPIDER_FLUSH_TABLE_MON_CACHE:(刷新 Spider 监视服务器信息)Refreshing Spider monitoring server information

(UDF:User-Defined Functions,用户定义函数,随着 Spider 存储引擎的安装一并安装,是一种用新函数扩展 MariaDB 的方式,该新函数的工作方式类似于本机(内置)MariaDB 函数)

本节中,没有特殊说明,一般都是在 spider server 中执行的语句

SPIDER_DIRECT_SQL

语法:

SPIDER_DIRECT_SQL('sql', 'tmp_table_list', 'parameters')

说明:

一个与 Spider Storage Engine 一起安装的 UDF,此功能用于在远程服务器上执行 SQL 字符串 sql,如参数中所定义。 如果返回任何结果集,它们将存储在 tmp_table_list 中。

如果 SQL 成功执行,则该函数返回 1;如果失败,则返回 0。

示例:

-- 创建一个临时表
CREATE TEMPORARY TABLE test.res
(
  id int(10) unsigned NOT NULL,
  accountName varchar(20) NOT NULL DEFAULT '',
  name varchar(128) NOT NULL DEFAULT ''
) ENGINE=MEMORY;
-- 执行SPIDER_DIRECT_SQL语句
SELECT SPIDER_DIRECT_SQL('SELECT * FROM test.opportunities', 'res', 'srv "backend1", port "3306"');

执行SPIDER_DIRECT_SQL

-- 查询执行结果
SELECT * FROM test.res;

执行SPIDER_DIRECT_SQL结果

SPIDER_BG_DIRECT_SQL

语法:

SPIDER_BG_DIRECT_SQL('sql', 'tmp_table_list', 'parameters')

描述:

在远程服务器上后台执行给定的, 如参数列表中所定义的 SQL 语句;

如果查询返回结果集,则将结果存储在给定的临时表中。

当给定的 SQL 语句执行成功时,此函数返回被调用的 UDF 的数目。当给定的 SQL 语句失败时,它返回 0。

示例:

准备操作,在 backend2 的远程主机 MariaDB 上,给 test.opportunities 表添加一条数据:

INSERT INTO test.opportunities
(id, accountName, name, owner, amount, closeDate, stageName)
VALUES(1, 'ubut18test', 'spider', 'spider', 30, '2020-02-28', 'halo');

在 spider server 本机的 MariaDB 的 test 数据库新建一个临时表 res2:

-- 创建一个临时表
CREATE TEMPORARY TABLE if not exists test.res2
(
  id int(10) unsigned NOT NULL,
  accountName varchar(20) NOT NULL DEFAULT '',
  name varchar(128) NOT NULL DEFAULT ''
) ENGINE=MEMORY;

执行 SPIDER_BG_DIRECT_SQL 示例语句:

SELECT SPIDER_BG_DIRECT_SQL('SELECT * FROM test.opportunities', 'test.res2', 'srv "backend2", port "3307"')
AS "Direct Query";

执行 SPIDER_BG_DIRECT_SQL示例语句

查看结果,就是刚刚 backend2 新加的那条数据:

SELECT * FROM test.res2;

SPIDER_BG_DIRECT_SQL执行结果

SPIDER_COPY_TABLES(无果)

语法:

SPIDER_COPY_TABLES(spider_table_name, source_link_id, destination_link_id_list [,parameters])

说明:

此函数可以在不停止 MariaDB service 的情况下,把表数据从source_link_id复制到destination_link_id_list

如果 spider 表已被分区,那么表名就需要是table_name#P#partition_name格式。

(to be honest,这两个 id 还没有研究透彻,测试示例会报错,可以协助指出以下示例无法执行的原因,谢谢。)

示例:

例如有执行之前的按 List 分区操作,那么执行SELECT table_name FROM mysql.spider_tables;语句,可以看到类似的数据:

sprider list分区

而此时该表的数据应该是:

opportunitiesByList表数据

为了方便查看分区的效果,按照 bylist 建立分区的规则,向 opportunitiesByList 表插入一些数据:

INSERT INTO test.opportunitiesByList (id, accountName, name, owner, amount, closeDate, stageName)
VALUES
(4, 'spiderserver', 'spiderserver', 'Bill', 30, '2020-02-28', 'hall'),
(5, 'spiderserver', 'spiderserver', 'Bob', 30, '2020-02-28', 'hall'),
(6, 'spiderserver', 'spiderserver', 'Chris', 30, '2020-02-28', 'hall'),
(7, 'spiderserver', 'spiderserver', 'Maria', 30, '2020-02-28', 'hall'),
(8,'spiderserver', 'spiderserver', 'Olivier', 30, '2020-02-28', 'hall');
SELECT * FROM test.opportunitiesByList;

结果如下:

向 opportunitiesByList 表插入一些数据

而 pt1 分区的值:

pt1 分区的值

所以,如果要复制 opportunitiesByList 表数据,就例如:opportunitiesByList#P#pt1 的数据复制到 opportunitiesByList#P#px 中去:

select spider_copy_tables('test.opportunities','1','2');
select spider_copy_tables('test.opportunitiesByList#P#pt1','1','0');

#############

这个实际的用法,还是没有搞清楚,这两个< source_link_id > 到底是什么意思,执行上述语句,报错 SQL 错误 [12704][hy000]: (conn=74) Source table is not found,暂时没有找到相关资料。

#############

SPIDER_FLUSH_TABLE_MON_CACHE

语法:

SPIDER_FLUSH_TABLE_MON_CACHE()

描述:

此函数用于刷新监控服务器(monitoring server)的信息。返回 1。

示例:

SELECT SPIDER_FLUSH_TABLE_MON_CACHE();

SPIDER_FLUSH_TABLE_MON_CACHE执行结果

到这里就简单说完 spider 存储引擎的使用了,主要特点就是处理不同的 MariaDB 实例就像在处理同一个实例一样。

更多的内容,可以去官网学习了解:
https://mariadb.com/kb/en/spider/

补充:查看 MariaDB 使用硬盘空间情况

安装 DISKS 插件:

INSTALL SONAME 'disks'

使用:

SELECT * FROM Information_Schema.DISKS

使用disks插件查看mariadb硬盘占用

限制:

  • MariaDB 10.1.32 加入;
  • 从 MariaDB 10.4.7,MariaDB 10.3.17,MariaDB 10.2.26 和 MariaDB 10.1.41 开始,它需要 FILE 权限;
  • 该插件仅适用于 Linux。