数据库启动、SQL 使用、对象管理与常用运维操作
在每台服务器上正确安装Indievow软件并且创建数据目录之后,就可以启动数据库服务。
进入Indievow安装目录:cd ~/indievow
主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服务的数量;
命令格式:
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,必须为数字;
命令格式:
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,必须为数字;
以一个逻辑集群组成的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
以三个逻辑集群组成的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
在数据库系统初始化完成后,可以执行以下命令连接Indievow数据库:
mysql -h192.168.1.7 -P2880 -uadmin -padmin
参数含义:
-h:CG所在服务器的IP地址;
-P:启动CG服务命令-z参数所指定的MySQL协议服务端口;
-u:Indievow数据库用户名,admin为预置超级用户;
-p:Indievow数据库用户的密码,admin用户的缺省密码为admin
在数据库系统初始化完成后,可以执行以下命令连接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已自己部署的为准 下图为参考)
以下举例部分常见的使用
详情请参考《Indievow 分布式数据库 SQL 使用手册》
数据定义语句
创建新的数据库,语法格式为:
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)
删除数据库,语法格式为:
DROP DATABASE 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)
创建新的数据表,语法格式为:
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];
说明:
修改已存在表的设计,支持增加列、删除列、表重命名和列重命名。
增加列: 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数据库中的表及其索引,语法格式为:
DROP TABLE [IF EXISTS] tbl_name1 [, tbl_name2];
说明:
mysql> drop table customer,testbl;
Query OK, 0 rows affected (1.68 sec)
数据操作语句
向数据表中添加一条或多条数据记录,新插入的数据记录必须包含所有主键列的值。语法格式为:
INSERT INTO tbl_name[(col_name, ...)] VALUES (col_value, ...)[,( col_value, ...), …] ;
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, ...)
说明:
/*+I_MULTI_BATCH*/指定采用多批次插入策略,允许插入超过2M的数据量,但不保证语句执行的原子性;如果某一批次插入不成功,则这一批次前面的数据都会插入成功,并会返回成功插入了几批数据以及一共插入多少条数据;
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)
向数据表中添加一条数据记录,与INSERT语句的区别在于,如果数据记录的主键已经存在于数据表中,则修改对应列的值为新值,如不存在则插入该条数据记录。语法格式为:
REPLACE INTO tbl_name [(col_name, ...)] VALUES (col_value, ...);
说明:
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)
修改数据表中符合条件数据记录的列值,语法格式为:
UPDATE [/*+UD_MULTI_BATCH*/] tbl_name
SET col1 = col_value1 [col2=col_value2] WHERE where_condition;
说明:
mysql> update customer set address='New York',last_login=now() where id=2;
Query OK, 1 row affected (0.07 sec)
删除数据表中符合条件的数据记录,语法格式为:
DELETE [/*+UD_MULTI_BATCH*/] FROM tbl_name [WHERE where_condition];
说明:
查询数据表中的内容,语法格式为:
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}];
说明:
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)