文档

关于 SequoiaDB

快速入门

安装

基本操作

数据模型

SQL引擎

FileSystem引擎

系统架构

数据库管理

连接器

驱动

参考手册

故障排除

SAC 管控中心

Web服务

版本信息

使用

连接MySQL实例与数据库分布式存储引擎

  • 配置 SequoiaDB 连接地址

    默认的 SequoiaDB 连接地址为“localhost:11810”,如需修改可参考以下两种方式

    (1)通过bin/sdb_sql_ctl指定实例名修改

    # bin/sdb_sql_ctl chconf myinst --sdb-conn-addr=192.168.20.37:11810,192.168.20.38:11810

    (2)通过配置文件修改,参考配置说明

  • 登录 MySQL shell

    MySQL 支持基于 UNIX 域套接字文件和 TCP/IP 的连接方式:

    • UNIX 套接字文件连接
      进程间通信,不需要使用网络协议,比 TCP/IP 传输效率更高,但仅限于本地连接,连接时指定对应的套接字文件。

      $ cd /opt/sequoiasql/mysql
      $ bin/mysql -S database/3306/mysqld.sock -u root

      Note:

      SequoiaSQL-MySQL 实例默认无密码,所以无需输入 -p 选项。

    • TCP/IP 连接方式
      网络通信,可以本地连接(环回接口)和远程连接,同时可以灵活地配置和授权客户端 IP 的访问权限。

      • 本地连接

        $ cd /opt/sequoiasql/mysql
        $ bin/mysql -h 127.0.0.1 -P 3306 -u root
      • 远程连接
        MySQL 默认未授予远程连接的权限,所以首先需要在服务端对客户端 IP 进行访问授权,以下例子对所有的 IP 都授权访问。

        mysql> update mysql.user set host='%' where user='root';
        mysql> flush privileges;

        在客户端进行远程连接:

        $ /opt/sequoiasql/mysql/bin/mysql -h 192.168.20.53 -P 3306 -u root
  • 设置密码

    mysql> alter user root@'%' identified by 'xxxxxx';

    Note:

    设置密码后,后续登录 MySQL shell 的时候要指定 -p 参数,回车并输入密码。

  • 创建数据库实例

    mysql> create database cs;
    mysql> use cs;
  • 创建表

    mysql> create table cl(a int, b int, c text, primary key(a, b) ) ;
    mysql> create table cl1(a int, b int, unique index idx_a(a) ) ;
  • 基本数据操作

    mysql> insert into cl values(1, 101, "SequoiaDB test");
    mysql> insert into cl values(2, 102, "SequoiaDB test");
    mysql> insert into cl1 values(1, 99);
    mysql> select * from cl order by b asc limit 1;
    mysql> select * from cl, cl1 where cl.a=cl1.a;
    mysql> update cl set c="My test" where a=1;
    mysql> delete from cl where b=102;
  • 创建索引

    使用非索引字段("c")执行查询时,访问计划信息如下:

    mysql> explain select * from cl where c="test";
    +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+---------------------------------------------------------------+
    | id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                                                         |
    +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+---------------------------------------------------------------+
    |  1 | SIMPLE      | cl    | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    2 |    50.00 | Using where with pushed condition (`cs`.`cl`.`c` = 'test') |
    +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+---------------------------------------------------------------+
    1 row in set, 1 warning (0.00 sec)
    

    对“c”字段创建索引并执行相同查询时将会使用该索引,具体访问计划信息如下:

    mysql> alter table cl add index idx_c(c(20));
    Query OK, 0 rows affected (0.03 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> explain select * from cl where c="test";
    +----+-------------+-------+------------+------+---------------+-------+---------+-------+------+----------+---------------------------------------------------------------+
    | id | select_type | table | partitions | type | possible_keys | key   | key_len | ref   | rows | filtered | Extra                                                         |
    +----+-------------+-------+------------+------+---------------+-------+---------+-------+------+----------+---------------------------------------------------------------+
    |  1 | SIMPLE      | cl    | NULL       | ref  | idx_c         | idx_c | 23      | const |    1 |   100.00 | Using where with pushed condition (`cs`.`cl`.`c` = 'test') |
    +----+-------------+-------+------------+------+---------------+-------+---------+-------+------+----------+---------------------------------------------------------------+
    1 row in set, 1 warning (0.01 sec)
    
  • 存储过程

    mysql> delimiter //
    mysql> create procedure delete_match()
     -> begin
     -> delete from cl where a=1;
     -> end//
    mysql> delimiter ;
    mysql> call delete_match();
  • 视图

    mysql> create view
     -> v1
     -> as select
     -> cl.a,cl.c,cl1.b
     -> from
     -> cl,cl1
     -> where cl.a=cl1.a;
    mysql> select * from v1;

配置说明

引擎配置

参数名 类型 默认值 动态生效 作用范围 说明
sequoiadb_bulk_insert_size 整数 2000 Yes Global 批量插入时每批的插入记录数。
sequoiadb_conn_addr 字符串 "localhost:11810" Yes Global SequoiaDB连接地址,可配置多个,之间用逗号隔开。
sequoiadb_debug_log 布尔 OFF Yes Global 是否打印debug日志。
sequoiadb_execute_only_in_mysql 布尔 OFF Yes Global,
Session
DDL命令只在MySQL侧执行,不下压到SDB执行。
sequoiadb_optimizer_select_count 布尔 ON Yes Global 是否开启优化select count(*)行为。
sequoiadb_password 字符串 "" Yes Global SequoiaDB鉴权密码。
sequoiadb_replica_size 整数 1 Yes Global 写操作需同步的副本数。取值范围为[-1, 7]。具体可参考SequoiaDB的创建集合的ReplSize参数
sequoiadb_selector_pushdown_threshold 无符号整型 30 Yes Global,
Session
查询字段下压触发阈值,取值范围[0-100],单位:百分比。
sequoiadb_use_autocommit 布尔 ON Yes Global 是否启用自动提交模式(已弃用)。
sequoiadb_use_bulk_insert 布尔 ON Yes Global 是否启用批量插入。
sequoiadb_use_partition 布尔 ON Yes Global 是否启用自动分区。
sequoiadb_user 字符串 "" Yes Global SequoiaDB鉴权用户。

Note:

  • 配置多个SequoiaDB连接地址时,每次连接会从地址中随机选择。
  • 命令行中修改连接有关的配置,在建立新连接时才生效,不影响旧连接。有关配置包括sequoiadb_conn_addr, sequoiadb_user, sequoiadb_password,其他配置立即生效。
  • 自动分区默认启动,启动时,在mysql上创建表将同步在SequoiaDB上创建对应的分区表(hash分区,包含所有分区组)。
  • 自动分区时,分区键按顺序优先使用主键字段和唯一索引字段。如果两者都没有,则不做分区。
  • 自动分区时,主键或唯一索引只在建表时对应分区键。建表后添加删除主键或唯一索引都不会更改分区键。
  • sequoiadb_use_autocommit 配置项已弃用。
  • sequoiadb_selector_pushdown_threshold,查询语句中,查询字段下压的触发阈值。查询字段个数/表总字段个数的百分比小于等于该阈值进行下压,否则不下压。
  • sequoiadb_execute_only_in_mysql 开启后,DDL 语句只在 MySQL 侧执行,即只更改 MySQL 侧表元数据信息,而不会下压到 SDB 侧同步表 DDL 操作。

配置参数有三种修改方式。

(1)使用工具sdb_sql_ctl修改配置

 $ bin/sdb_sql_ctl chconf myinst --sdb-use-partition=OFF

(2)修改实例数据目录下的配置文件auto.cnf,在[mysqld]下添加/更改对应配置项。示例:

 sequoiadb_use_partition=OFF

Note:修改配置文件后需要重新启动MySQL服务

(3)通过MySQL命令行修改,示例:

 mysql> SET GLOBAL sequoiadb_use_partition=OFF;

Note:通过命令行方式进行的配置为临时有效,当重启MySQL服务后配置将失效。如果需要配置永久生效则必须通过修改配置文件。

自定义表配置

在mysql上创建表时,可以在 table_option 的 comment 中通过指定关键词 "sequoiadb" ,并紧跟一 json 对象以传入自定义的表配置参数。

table_option:
comment [=] "[string,] sequoiadb:{table_options:{...}}"

具体配置参数如下表:

参数名 类型 描述 是否必填
string 字符串 用户自定义注释字符串
table_options json 创建集合的相关参数。详见SequoiaDB创建集合选项
use_partition bool 是否创建分区表, 取值 false 即创建非分区表,并过滤 table_options 中与分区相关的参数

示例1:
在SequoiaDB上创建分区键为“{a:1,b:-1}”,分区类型为范围分区的集合cl1

 mysql> create table cl1(a int, b int, c text) engine = SequoiaDB comment="Sharding table for example, sequoiadb:{table_options:{ShardingKey:{a:1,b:-1},ShardingType:\"range\"}}";

示例2:
使用 "use_partition:false" 显式创建普通表时,会过滤掉与分区表相关的参数且创建普通表。

 mysql> create table cl2(a int, b int, primary key(a), unique key(b)) engine=sequoiadb comment='sequoiadb:{table_options:{"ShardingKey":{a:1}, ShardingType:"hash", Compressed:true, CompressionType:"lzw", AutoSplit: true}, use_partition:false} ';

该例子中会自动过滤掉ShardingKey、ShardingType参数。

示例3:
使用 "use_partition:false" 显式创建普通表时,优先级高于 sequoiadb_use_partition 配置项,即使其值为 ON 也只会强制创建普通表。

 mysql> create table cl3(a int, b int, primary key(a), unique key(b)) engine=sequoiadb comment='sequoiadb:{use_partition:false}';

在线修改 DDL

MySQL实例组件支持大多数 DDL 的在线修改。在线修改支持原表中(INPLACE)修改表属性,并且允许并发的 DML。可以通过 ALGORITHM 参数控制 ALTER TABLE 语句修改 DDL 时使用的算法。当 ALGORITHM = INPLACE 时,可以在线地修改表属性,而 ALGORITHM = COPY 时,则会把原表内容拷贝到新表,性能会下降。不指定 ALGORITHM 时会自动选择算法。如需在线修改 DDL,一般建议显式地指定 ALGORITHM = INPLACE。例子:

 mysql> alter table cl add index id_idx(id) algorithm=inplace;

建表选项

可以在线修改字符集(CHARACTER SET)和重命名(RENAME)。但不能修改备注(COMMENT),因为它可能包含了建表时的自定义表配置。

主键与索引

支持在线添加删除主键和(唯一)索引。

数据类型映射关系

MySQL 实例 JSON 对象 备注
BIT int/long 超出int范围则按long存储
BOOL int
TINYINT int
SMALLINT int
MEDIUMINT int
INT int/long 超出int范围则按long存储
BIGINT long/decimal 超出long范围则按DECIMAL存储
FLOAT double
DOUBLE double
DECIMAL decimal
YEAR int
DATE date
TIME double 'HHMMSS[.fraction]'格式的double值
DATETIME string 'YYYY-MM-DD HH:MM:SS[.fraction]'格式的字符串
TIMESTAMP timestamp
CHAR string
VARCHAR string
BINARY binary
VARBINARY binary
TINYBLOB binary
BLOB binary
MEDIUMBLOB binary
LONGBLOB binary 最大长度16MB
TINYTEXT string
TEXT string
MEDIUMTEXT string
LONGTEXT string 最大长度16MB
ENUM int
SET int
JSON binary
GEOMETRY 不支持
NULL - 不存储
回到顶部