用户管理
这里用户指租户里的用户,跟传统 MySQL 里的用户概念一样。 OceanBase MySQL 租户创建用户有两个方法:
create user
创建用户。grant
语句自动创建用户。
示例:
MySQL [oceanbase]> create user user01 identified by 'zfkrcOl5MG'; Query OK, 0 rows affected (0.024 sec) MySQL [oceanbase]> grant all privileges on test.* to user01 ; Query OK, 0 rows affected (0.013 sec) MySQL [oceanbase]> grant all privileges on test.* to user02 identified by 'dQuybvRxM8'; Query OK, 0 rows affected (0.028 sec)
OceanBase MySQL 租户不支持更新用户元数据的密码字段。
查看用户权限用语句 show grants
。
示例:
MySQL [oceanbase]> show grants for user01; +----------------------------------------------+ | Grants for user01@% | +----------------------------------------------+ | GRANT USAGE ON *.* TO 'user01' | | GRANT ALL PRIVILEGES ON `test`.* TO 'user01' | +----------------------------------------------+ 2 rows in set (0.001 sec) MySQL [oceanbase]> show grants for user02; +----------------------------------------------+ | Grants for user02@% | +----------------------------------------------+ | GRANT USAGE ON *.* TO 'user02' | | GRANT ALL PRIVILEGES ON `test`.* TO 'user02' | +----------------------------------------------+ 2 rows in set (0.001 sec)
数据库管理
OceanBase MySQL 租户下可以建多个数据库(database
),表只能在具体的数据库下新建。
示例:
MySQL [test]> create database tpccdb; Query OK, 1 row affected (0.012 sec) MySQL [test]> show databases; +--------------------+ | Database | +--------------------+ | oceanbase | | information_schema | | mysql | | test | | tpccdb | +--------------------+ 5 rows in set (0.002 sec) create table ware(w_id int , w_ytd decimal(12,2) , w_tax decimal(4,4) , w_name varchar(10) , w_street_1 varchar(20) , w_street_2 varchar(20) , w_city varchar(20) , w_state char(2) , w_zip char(9) , unique(w_name, w_city) , primary key(w_id) ); create table cust (c_w_id int NOT NULL , c_d_id int NOT null , c_id int NOT null , c_discount decimal(4, 4) , c_credit char(2) , c_last varchar(16) , c_first varchar(16) , c_middle char(2) , c_balance decimal(12, 2) , c_ytd_payment decimal(12, 2) , c_payment_cnt int , c_credit_lim decimal(12, 2) , c_street_1 varchar(20) , c_street_2 varchar(20) , c_city varchar(20) , c_state char(2) , c_zip char(9) , c_phone char(16) , c_since date , c_delivery_cnt int , c_data varchar(500) , index icust(c_last, c_d_id, c_w_id, c_first, c_id) , FOREIGN KEY (c_w_id) REFERENCES ware(w_id) , primary key (c_w_id, c_d_id, c_id) );
OceanBase MySQL 租户支持外键。不过在分布式数据库里,如果读写并发很高,不推荐在数据库层面使用外键约束。外键可能会给性能带来负面影响,会增加不必要的阻塞和死锁。
复制表的结构用 like
,包括主键、唯一键、索引名称都会复制。在 MySQL 语法里,主键名\唯一约束\索引名在一个表内不能重复,但是不同表之间可以重复。
create table t1 like ware;
复制表的结构和数据用 create table ... as select
。不过要注意,这个复制的是表的基本数据类型,对于主键、唯一约束、索引信息等不会复制。
create table t2 as select * from ware; MySQL [test]> show create table t1\G *************************** 1. row *************************** Table: t1 Create Table: CREATE TABLE `t1` ( `w_id` int(11) NOT NULL, `w_ytd` decimal(12,2) DEFAULT NULL, `w_tax` decimal(4,4) DEFAULT NULL, `w_name` varchar(10) DEFAULT NULL, `w_street_1` varchar(20) DEFAULT NULL, `w_street_2` varchar(20) DEFAULT NULL, `w_city` varchar(20) DEFAULT NULL, `w_state` char(2) DEFAULT NULL, `w_zip` char(9) DEFAULT NULL, PRIMARY KEY (`w_id`), UNIQUE KEY `w_name` (`w_name`, `w_city`) BLOCK_SIZE 16384 GLOBAL ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = COMPACT COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 1 row in set (0.003 sec) MySQL [test]> show create table t2\G *************************** 1. row *************************** Table: t2 Create Table: CREATE TABLE `t2` ( `w_id` int(11) NOT NULL, `w_ytd` decimal(12,2) DEFAULT NULL, `w_tax` decimal(4,4) DEFAULT NULL, `w_name` varchar(10) DEFAULT NULL, `w_street_1` varchar(20) DEFAULT NULL, `w_street_2` varchar(20) DEFAULT NULL, `w_city` varchar(20) DEFAULT NULL, `w_state` char(2) DEFAULT NULL, `w_zip` char(9) DEFAULT NULL ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = COMPACT COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 1 row in set (0.002 sec)
观察上面两个表结构,主键、唯一键和索引不同。
附录:
- 3.1 查看 OceanBase 集群资源的使用情况
- 3.2 如何创建和连接 MySQL 租户
- 3.3 如何连接租户
- 3.4 如何对租户参数(或变量)进行设置
- 3.5 如何使用 MySQL 租户做常见数据库开发
- 3.6 如何使用 OceanBase 分区表进行水平拆分
- 3.7 (高级)如何使用 OceanBase 表分组
- 3.8(高级)如何使用 OceanBase 复制表
- 3.9 常见问题
结束语
加入教程直播群方式一:钉钉群号3255 4020
加入教程直播群方式二:扫码下方二维码加入