管理 Trove 实例上的数据库和用户

假设您已安装 Trove 服务并上传了包含您选择的数据存储的镜像。本节介绍如何在 MySQL 5.7 实例中管理用户和数据库。

目前,数据库和用户 API 仅受 mysql 数据存储支持。

对于数据库用户管理,有两种方法

  1. 如果 Trove 服务配置文件中为数据存储启用了 root_on_create 选项,则在创建实例后会返回 root 用户密码,可以直接用于访问数据库。

  2. 如果 root_on_create=False,推荐的方法是获取 root 密码 (POST /v1.0/{project_id}/instances/{instance_id}/root 或在 CLI 中使用 openstack database root enable) 并直接与数据库服务通信进行数据库和用户管理。

管理 root 用户

对于所有数据存储,用户可以启用 root 并获取 root 密码以进行进一步的数据库操作。

$ openstack database root enable f22ce0d9-8c9c-403a-8599-2269761a66de
+----------+--------------------------------------+
| Field    | Value                                |
+----------+--------------------------------------+
| name     | root                                 |
| password | I5nPpBj1qf1eGR1idQorj1szppXGpYyYNj4h |
+----------+--------------------------------------+

如果需要,可以使用 openstack database root disable <instance_id> 命令禁用 root 用户。

通过 Trove CLI 进行数据库和用户管理

Trove 提供 API 以管理 mysql 数据存储的 用户和数据库。

$ openstack database user list db-instance
+------+------+-----------+
| Name | Host | Databases |
+------+------+-----------+
| test | %    | testdb    |
+------+------+-----------+
$ openstack database user create db-instance newuser userpass --databases testdb
$ openstack database user list db-instance
+---------+------+-----------+
| Name    | Host | Databases |
+---------+------+-----------+
| newuser | %    | testdb    |
| test    | %    | testdb    |
+---------+------+-----------+
$ mysql -h 172.24.4.199 -u newuser -p testdb
Enter password:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| testdb             |
+--------------------+
2 rows in set (0.00 sec)

$ openstack database db create db-instance newdb
$ openstack database db list db-instance
+--------+
| Name   |
+--------+
| newdb  |
| sys    |
| testdb |
+--------+

$ mysql -h 172.24.4.199 -u newuser -p newdb
Enter password:
ERROR 1044 (42000): Access denied for user 'newuser'@'%' to database 'newdb'

管理对数据库的访问

使用 Trove API,您可以授予和撤销现有用户的数据库访问权限。

$ openstack database user grant access db-instance newuser newdb

$ openstack database user show access db-instance newuser
+--------+
| Name   |
+--------+
| newdb  |
| testdb |
+--------+

$ mysql -h IP_ADDRESS -u newuser -p newdb
Enter password:

$ openstack database user show access db-instance test
+--------+
| Name   |
+--------+
| testdb |
+--------+

$ mysql -h IP_ADDRESS -u test -p newdb
Enter password:
ERROR 1044 (42000): Access denied for user 'test'@'%' to database 'newdb'

$ openstack database user revoke access db-instance newuser newdb

$ mysql -h IP_ADDRESS -u newuser -p newdb
Enter password:
ERROR 1044 (42000): Access denied for user 'newuser'@'%' to database 'newdb'

删除数据库

最后,Trove 提供 API 用于删除数据库。

$ openstack database db list db-instance
+--------+
| Name   |
+--------+
| newdb  |
| sys    |
| testdb |
+--------+

$ openstack database db delete db-instance testdb

$ openstack database db list db-instance
+--------+
| Name   |
+--------+
| newdb  |
| sys    |
+--------+

$ mysql -h IP_ADDRESS -u test -p testdb
Enter password:
ERROR 1049 (42000): Unknown database 'testdb'