管理 Trove 实例上的数据库和用户¶
假设您已安装 Trove 服务并上传了包含您选择的数据存储的镜像。本节介绍如何在 MySQL 5.7 实例中管理用户和数据库。
目前,数据库和用户 API 仅受 mysql 数据存储支持。
对于数据库用户管理,有两种方法
如果 Trove 服务配置文件中为数据存储启用了
root_on_create选项,则在创建实例后会返回 root 用户密码,可以直接用于访问数据库。如果
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'