当前位置:首页 > 文档 > 基本操作
基本操作
独游(Indievow)分布式数据库文档:基本操作
INDIEVOW DISTRIBUTED DATABASE DOCUMENTATION

基本操作

数据库启动、SQL 使用、对象管理与常用运维操作

1. 启动

在每台服务器上正确安装Indievow软件并且创建数据目录之后,就可以启动数据库服务。

1.1 数据库服务启动命令

进入Indievow安装目录:cd ~/indievow

1.1.1 MG启动命令

主MG启动命令格式:


bin/manEng -r 192.168.1.2:2500 -R 192.168.1.2:2500 -i eth0 -U 3 -u 3 -C 1

备MG启动命令格式:


bin/manEng -r 192.168.1.3:2500 -R 192.168.1.2:2500 -i eth0 -C 1

参数含义:

-r:所启动MG服务的IP地址和端口;

-R:系统主MG服务的IP地址和端口;

-i:绑定的网卡名;

-C:系统中所属逻辑集群ID,必须为数字;

-U:指定系统中MG服务的数量;

-u:指定系统中TG服务的数量;

1.1.2 TG启动命令

命令格式:


bin/transEng -r 192.168.1.2:2500 -p 2700-m 2701 -i eth0 -C 1

参数含义:

-r:系统主MG服务的IP地址和端口;

-p:所启动TG服务的端口号;

-m:所启动TG服务的内部端口号;

-i:绑定的网卡名;

-C:系统中所属逻辑集群ID,必须为数字;

1.1.3 DG启动命令

命令格式:


bin/datEng -r 192.168.1.2:2500 -p 2600 -n indiehdfs -i eth0 -C 1

参数含义:

-r:系统主MG服务的IP地址和端口;

-p:所启动DG服务的端口号;

-n:指定应用名,应当与建DG数据目录时所设定的应用名一致;

-i:绑定的网卡名;

-C:系统中所属逻辑集群ID,必须为数字;

1.1.4 CG启动命令

CG启动命令格式:


calEng -r 192.168.1.2:2500 -p 2800 -z 2880 -i eth0 -C 1

参数含义:

-r:系统主MG服务的IP地址和端口;

-p:所启动DG服务的端口号;

-z:所启动CG的MySQL协议服务端口号;

-i:绑定的网卡名;

-C:系统中所属逻辑集群ID,必须为数字;

1.2 单集群启动示例

以一个逻辑集群组成的Indievow数据库系统为例,集群号为1,使用三台服务器,在每台服务器上都启动MG、TG、CG和DG服务,其中主MG所在的服务器上启动CG被设置为。指定主MG为192.168.1.4:2500。

以admin用户登录所有服务器,在安装目录 /home/admin/indievow 下执行启动命令。

Server 1(主MG所在服务器)


bin/manEng -r 192.168.1.4:2500 -R 192.168.1.4:2500 -i eth0 -U 3 -u 3 -C 1

bin/transEng -r 192.168.1.4:2500 -p 2700 -m 2701 -i eth0 -C 1

bin/datEng -r 192.168.1.4:2500 -p 2600 -n indiehdfs -i eth0 -C 1

bin/calEng -r 192.168.1.4:2500 -p 2800 -z 2880 -i eth0 -C 1

Server 2


bin/manEng -r 192.168.1.3:2500 -R 192.168.1.4:2500 -i eth0 -C 1

bin/transEng -r 192.168.1.4:2500 -p 2700 -m 2701 -i eth0 -C 1

bin/datEng -r 192.168.1.4:2500 -p 2600 -n indiehdfs -i eth0 -C 1

bin/calEng -r 192.168.1.4:2500 -p 2800 -z 2880 -i eth0 -C 1

Server 3


bin/manEng -r 192.168.1.7:2500 -R 192.168.1.4:2500 -i eth0 -C 1

bin/transEng -r 192.168.1.4:2500 -p 2700 -m 2701 -i eth0 -C 1

bin/datEng -r 192.168.1.4:2500 -p 2600 -n indiehdfs -i eth0 -C 1

bin/calEng -r 192.168.1.4:2500 -p 2800 -z 2880 -i eth0 -C 1

如果有其它服务器加入到集群中,可以在这些服务器上启动DG和CG服务,命令如下:


bin/datEng -r 192.168.1.4:2500 -p 2600 -n indiehdfs -i eth0 -C 1

bin/calEng -r 192.168.1.4:2500 -p 2800 -z 2880 -i eth0 -C 1

注:MG和TG已经达到设定数目;

在所有服务器上执行完毕命令后,在确认所有服务进程都已启动,在任意一台服务的安装目录下执行以下命令进行数据库系统的初始化:


bin/mg_admin -r 192.168.1.4 -p 2500 -t 6000000000 boot_strap

1.3 多集群启动示例

以三个逻辑集群组成的Indievow数据库系统为例,集群号分别为1、2、3,可以分别部署在三个机房中。每个逻辑集群使用两台服务器,启动MG、TG、CG和DG共五个服务,其中MG/TG/部署于一台服务器,CG/DG部署于另一台服务器,指定主MG为182.119.80.62:8000。

以admin用户登录所有服务器,在安装目录/home/admin/indievow下执行启动命令。

集群1:

Server1


bin/manEng -r 182.119.80.62:8000 -R 182.119.80.62:8000 -i bond0 -U 3 -u 3 -C 1

bin/transEng -r 182.119.80.62:8000 -p 8001 -m 8002 -i bond0 -C 1

Server2


bin/datEng -r 182.119.80.62:8000 -p 8005 -n indiehdfs -i bond0 -C 1

bin/calEng -r 182.119.80.62:8000 -p 8003 -z 8004 -i bond0 -C 1

集群2:

Server1


bin/manEng -r 182.119.80.63:8000 -R 182.119.80.62:8000 -i bond0 -C 2

bin/transEng -r 182.119.80.62:8000 -p 8001 -m 8002 -i bond0 -C 2

Server2


bin/datEng -r 182.119.80.62:8000 -p 8005 -n indiehdfs -i bond0 -C 2

bin/calEng -r 182.119.80.62:8000 -p 8003 -z 8004 -i bond0 -C 2

集群3:

Server1


bin/manEng -r 182.119.80.64:8000 -R 182.119.80.62:8000 -i bond0 -C 3

bin/transEng -r 182.119.80.62:8000 -p 8001 -m 8002 -i bond0 -C 3

Server2


bin/datEng -r 182.119.80.62:8000 -p 8005 -n indiehdfs -i bond0 -C 3

bin/calEng -r 182.119.80.62:8000 -p 8003 -z 8004 -i bond0 -C 3

在所有服务器上执行完毕命令后,在确认所有服务进程都已启动,在任意一台服务的安装目录下执行以下命令进行数据库系统的初始化:


bin/mg_admin -r 182.119.80.62 -p 8000 -t 6000000000 boot_strap

1.4 使用MySQL客户端

在数据库系统初始化完成后,可以执行以下命令连接Indievow数据库:


mysql -h192.168.1.7 -P2880 -uadmin -padmin

参数含义:

-h:CG所在服务器的IP地址;

-P:启动CG服务命令-z参数所指定的MySQL协议服务端口;

-u:Indievow数据库用户名,admin为预置超级用户;

-p:Indievow数据库用户的密码,admin用户的缺省密码为admin

2 登录使用

2.1 登录客户端

在数据库系统初始化完成后,可以执行以下命令连接Indievow数据库:


mysql -h182.119.80.62 -P8004 -uadmin -padmin

参数含义:

-h:CG所在服务器的IP地址;

-P:启动CG服务命令-z参数所指定的MySQL协议服务端口;

-u:Indievow数据库用户名,admin为预置超级用户;

-p:Indievow数据库用户的密码,admin用户的缺省密码为admin

登录成功如下图:

(ip和port已自己部署的为准 下图为参考)

2.2 SQL使用

以下举例部分常见的使用

详情请参考《Indievow 分布式数据库 SQL 使用手册》

数据定义语句

2.2.1 CREATE DATABASE

创建新的数据库,语法格式为:


CREATE DATABASE db_name;

说明:

数据库名长度不能超过15个字符,包括字母、数字、下划线,首字符可以是字母或下划线;


mysql> create database sales;

Query OK, 0 rows affected (0.12 sec)



mysql> show databases;

+----------+

| Database |

+----------+

| TANG     |

| sales    |

+----------+

2 rows in set (0.00 sec)

2.2.2 DROP DATABASE

删除数据库,语法格式为:


DROP DATABASE db_name;

说明:

  • 当db_name所指定的数据库不存在时,语句会报错;
  • 删除数据库之前需要先删除库中全部的数据表,否则无法删除数据库;
  • 删除数据库可能会导致会话的默认数据库为空值,此时需要为会话重新指定默认数据库,否则该会话无法在默认数据库下创建表;

mysql> use sales;

Database changed

mysql> show tables;

Empty set (0.00 sec)



mysql> drop database sales;

Query OK, 1 row affected (0.09 sec)



mysql> select database();

+------------+

| database() |

+------------+

|            |

+------------+

1 row in set (0.00 sec)



mysql> use test;

Database changed

mysql> select database();

+------------+

| database() |

+------------+

| test       |

+------------+

1 row in set (0.00 sec)

2.2.3 CREATE TABLE

创建新的数据表,语法格式为:


CREATE TABLE [IF NOT EXISTS] tbl_name (

col_name data_type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT],

…… ,

PRIMARY KEY (col_name1, col_name2...) ) [table_options_list];

说明:

  • 建表时必须指定主键,但不支持全主键的表;
  • 表名长度限256个字符,包括字母、数字、下划线,首字符必须是字母;
  • 列名长度限128个字符,包括字母、数字、下划线,首字符可以是字母或下划线;
  • 每张表的列数限制为最大496列;
  • 如果指定IF NOT EXISTS,即使创建的表已经存在,也不报错;不指定时,若创建的表已经存在则报错;
  • Indievow数据库在执行合并操作时不允许创建表;

2.2.4 ALTER TABLE

修改已存在表的设计,支持增加列、删除列、表重命名和列重命名。

增加列: ALTER TABLE tbl_name ADD [COLUMN] col_name data_type;


mysql> alter table customer add phone varchar(11);

Query OK, 0 rows affected (0.28 sec)



mysql> desc customer;

+------------+---------------+-----------+------+------+---------+-------+

| Field      | Type          | Collation | Null | Key  | Default | Extra |

+------------+---------------+-----------+------+------+---------+-------+

| id         | int32         | NULL      |    0 |    1 | NULL    |       |

| name       | varchar(10)   | NULL      |    0 |    0 | NULL    |       |

| address    | varchar(50)   | NULL      |    1 |    0 | NULL    |       |

| last_login | timestamp     | NULL      |    1 |    0 | NULL    |       |

| remmark    | varchar(1024) | NULL      |    1 |    0 | N/A     |       |

| phone      | varchar(11)   | NULL      |    1 |    0 | NULL    |       |

+------------+---------------+-----------+------+------+---------+-------+



6 rows in set (0.00 sec)

删除列: ALTER TABLE tbl_name DROP [COLUMN] col_name;


mysql> alter table customer drop phone;

Query OK, 0 rows affected (0.33 sec)



mysql> desc customer;

+------------+---------------+-----------+------+------+---------+-------+

| Field      | Type          | Collation | Null | Key  | Default | Extra |

+------------+---------------+-----------+------+------+---------+-------+

| id         | int32         | NULL      |    0 |    1 | NULL    |       |

| name       | varchar(10)   | NULL      |    0 |    0 | NULL    |       |

| address    | varchar(50)   | NULL      |    1 |    0 | NULL    |       |

| last_login | timestamp     | NULL      |    1 |    0 | NULL    |       |

| remmark    | varchar(1024) | NULL      |    1 |    0 | N/A     |       |

+------------+---------------+-----------+------+------+---------+-------+

5 rows in set (0.00 sec)

表重命名:

ALTER TABLE tbl_name RENAME TO new_tbl_name;

RENAME TABLE tbl_name TO new_tbl_name;


mysql> rename table customer to customer_bak;

Query OK, 0 rows affected (0.27 sec)



mysql> alter table customer_bak rename to customer;

Query OK, 0 rows affected (0.25 sec)

列重命名:


ALTER TABLE tbl_name RENAME [COLUMN] col_name TO new_col_name;



mysql> alter table customer RENAME last_login TO login;

Query OK, 0 rows affected (0.27 sec)

说明:

  • 若在列上已经创建索引,则该列不能被删除;
  • 数据表的列名修改后,索引中相应的列名不会做修改;
  • Indievow数据库执行合并操作时不允许修改表结构;

2.2.5 DROP TABLE

删除Indievow数据库中的表及其索引,语法格式为:


DROP TABLE [IF EXISTS] tbl_name1 [, tbl_name2];

说明:

  • 指定IF EXISTS选项时,即使要删除的表不存在也不报错;不指定时,若要删除的表不存在则报错;
  • 需要同时删除多个表时,多个表名用逗号分隔;
  • Indievow数据库执行合并操作时不允许删除表;

mysql> drop table customer,testbl;

Query OK, 0 rows affected (1.68 sec)

数据操作语句

2.2.6 INSERT

向数据表中添加一条或多条数据记录,新插入的数据记录必须包含所有主键列的值。语法格式为:

  • 插入一条或多条记录

INSERT INTO tbl_name[(col_name, ...)] VALUES (col_value, ...)[,( col_value, ...), …] ;
  • 插入子查询的结果集(子查询结果集为32MB,最大为64MB)

INSERT INTO tbl_a[(a1, a2, ..., am)] SELECT b1, b2, ..., bm FROM tbl_b WHERE …;
  • 分批次插入子查询的结果集(不能保证语句执行的原子性)

INSERT INTO tbl_a[(a1, a2, ..., am)]

SELECT /*+I_MULTI_BATCH*/ b1, b2,…, bm FROM table_b WHERE … ;
  • 在插入语句中引用序列的值

INSERT INTO tbl_name(col1, ...) VALUES(NEXTVAL/PREVVAL FOR seq_name, ...)

说明:

  • 在插入语句中使用子查询时,子查询的输出列数应当等于插入语句所指定的待插入列数,并且对应列的数据类型必须兼容,对应于主键列的值不能为空;
  • 目前Indievow数据库存在数据包大小限制,在CG和TG之间传输的单个数据包大小上限是2M,每个事务所产生的事务日志大小上限也是64MB。这个限制决定了执行批量插入时,如果插入数据量超过2M,则需要使用多批次插入策略,每个批次作为一个事务执行。这种策略会把一条插入语句拆分成多个事务执行,不保证插入语句执行的原子性;因此Indievow数据库提供了两种INSERT ... SELECT ... 语句模式,一种模式可以保证语句执行的原子性,但只允许插入2M以内的数据量,如果超出则报错;另一种模式通过hint /*+I_MULTI_BATCH*/指定采用多批次插入策略,允许插入超过2M的数据量,但不保证语句执行的原子性;如果某一批次插入不成功,则这一批次前面的数据都会插入成功,并会返回成功插入了几批数据以及一共插入多少条数据;
  • 在插入语句中可以使用序列产生的值。需要注意的是,在一条插入语句中同一个序列的所有的PREVVAL返回的都是同一个值。

mysql> create or replace sequence cust_id as integer start with 1 increment by 1;

Query OK, 1 row affected (0.02 sec)

mysql> insert into customer values(nextval for cust_id,'Jerry','Disney Avennue',now());

Query OK, 1 row affected (0.08 sec)

mysql> insert into customer values(nextval for cust_id,'Jerry','Disney Avennue',now()),

    -> (nextval for cust_id,'Alice','Disney Avennue',now()),

    -> (nextval for cust_id,'Bob','Disney Avennue',now());

Query OK, 3 rows affected (0.09 sec)

mysql> select * from customer;

+------+-------+----------------+----------------------------+

| id   | name  | address        | last_login                 |

+------+-------+----------------+----------------------------+

|    1 | Tom   | Disney Avennue | 2018-05-13 13:29:42.200672 |

|    2 | Jerry | Disney Avennue | 2018-05-13 13:29:42.200672 |

|    3 | Alice | Disney Avennue | 2018-05-13 13:29:42.200672 |

|    4 | Bob   | Disney Avennue | 2018-05-13 13:29:42.200672 |

+------+-------+----------------+----------------------------+

4 rows in set (0.01 sec)

2.2.7 REPLACE

向数据表中添加一条数据记录,与INSERT语句的区别在于,如果数据记录的主键已经存在于数据表中,则修改对应列的值为新值,如不存在则插入该条数据记录。语法格式为:


REPLACE INTO tbl_name [(col_name, ...)] VALUES (col_value, ...);

说明:

  • 现版本已经支持REPLACE使用序列进行插入修改;
  • 与INSERT语句不同,REPLACE语句在执行时直接将数据从CG发送给 TG,不会向DG请求数据来判断是否存在主键冲突,因此REPLACE语句的性能要优于INSERT语句;

mysql> select * from customer;

+------+-------+----------------+----------------------------+

| id   | name  | address        | last_login                 |

+------+-------+----------------+----------------------------+

|    1 | Tom   | Disney Avennue | 2018-05-13 13:29:42.200672 |

|    2 | Jerry | Disney Avennue | 2018-05-13 13:29:42.200672 |

|    3 | Alice | Disney Avennue | 2018-05-13 13:29:42.200672 |

|    4 | Bob   | Disney Avennue | 2018-05-13 13:29:42.200672 |

+------+-------+----------------+----------------------------+

4 rows in set (0.01 sec)



mysql> select * from customer;

+------+-------+----------------+----------------------------+

| id   | name  | address        | last_login                 |

+------+-------+----------------+----------------------------+

|    1 | Micky | Disney Avennue | 2018-05-13 13:29:42.200672 |

|    2 | Jerry | Disney Avennue | 2018-05-13 13:29:42.200672 |

|    3 | Alice | Disney Avennue | 2018-05-13 13:29:42.200672 |

|    4 | Bob   | Disney Avennue | 2018-05-13 13:29:42.200672 |

+------+-------+----------------+----------------------------+

4 rows in set (0.00 sec)

2.2.8 UPDATE

修改数据表中符合条件数据记录的列值,语法格式为:


UPDATE [/*+UD_MULTI_BATCH*/]  tbl_name

SET col1 = col_value1 [col2=col_value2] WHERE where_condition;

说明:

  • 通过hint /*+UD_MULTI_BATCH*/可以指定采用多批次更新策略,允许更新超过64MB的数据量,但不保证语句执行的原子性;更新大量数据时,需要根据机器性能调整超时时间,避免语句因执行超时而失败;
  • Indievow数据库只支持对单表进行更新操作,在where_condition中可以使用序列的PREVVAL值,但不能使用序列的NEXTVAL值;

mysql> update customer set address='New York',last_login=now() where id=2;

Query OK, 1 row affected (0.07 sec)

2.2.9 DELETE

删除数据表中符合条件的数据记录,语法格式为:


DELETE [/*+UD_MULTI_BATCH*/] FROM tbl_name [WHERE where_condition];

说明:

  • 通过hint /*+UD_MULTI_BATCH*/可以指定采用多批次删除策略,允许删除超过64MB的数据量,但不保证语句执行的原子性;删除大量数据时,需要根据机器性能调整超时时间,避免语句因执行超时而失败;
  • Indievow数据库只支持对单表进行删除操作,在where_condition中可以使用序列的PREVVAL值,但不能使用序列的NEXTVAL值;

2.2.10 SELECT

查询数据表中的内容,语法格式为:


SELECT  [ ALL | DISTINCT ]  select_list [AS other_name]

FROM  table_name

[WHERE where_conditions ]

[GROUP BY group_by_list ]

[HAVING search_confitions ]

[ORDER  BY  order_list [ASC | DESC ] ]

[LIMIT {[offset,] row_count | row_count OFFSET offset}];

说明:

  • 目前Indievow支持在SELECT查询语句的where子句中使用列别名,但是支持在GROUP BY ,ORDER BY,HAVING子句中使用列别名
  • SELECT查询语句的from子句中出现多张表或子查询结果集时,每张表(或子查询结果集)都至少根据一个等值连接条件与其他表(或子查询结果集)连接。
  • LIMIT子句强制SELECT语句返回指定的记录数,参数row_count和offset必须是整数常量,row_count指定返回的记录数,offset指定返回记录的偏移量,初始记录的偏移量是0(不是1);

mysql> select id,name from customer order by id desc;

+------+-------+

| id   | name  |

+------+-------+

|    4 | Bob   |

|    3 | Alice |

|    2 | Jerry |

|    1 | Micky |

+------+-------+

4 rows in set (0.01 sec)



mysql> select id,name from customer limit 2;

+------+-------+

| id   | name  |

+------+-------+

|    1 | Micky |

|    2 | Jerry |

+------+-------+

2 rows in set (0.01 sec)



mysql> select id,name from customer limit 1,2;

+------+-------+

| id   | name  |

+------+-------+

|    2 | Jerry |

|    3 | Alice |

+------+-------+

2 rows in set (0.00 sec)
© 2026 上海独游网络有限公司 版权所有|地址:上海市普陀区云岭西路600弄5号3层(集中登记地)|沪ICP备2026048507号-1