你可以使用数据库服务备份数据库,并且在对象存储服务里存放人工备份。之后,如果原始的数据库损坏,你可以使用人工备份去恢复数据库。恢复过程会创建一个数据库实例 。
此例展示了如何备份和恢复一个MySQL数据库。
** 备份数据库实例 **
作为背景,假定你创建了具有以下特征的数据库实例
2
db1
和 db2
首先,通过使用“ trove list ” 命令获得 “guest1”数据库实例的标识编码
$ trove list
+--------------------------------------+--------+-----------+-------------------+--------+-----------+------+
| id | name | datastore | datastore_version | status | flavor_id | size |
+--------------------------------------+--------+-----------+-------------------+--------+-----------+------+
| 97b4b853-80f6-414f-ba6f-c6f455a79ae6 | guest1 | mysql | mysql-5.5 | ACTIVE | 10 | 2 |
+--------------------------------------+--------+-----------+-------------------+--------+-----------+------+
备份数据实例通过使用’ trove backup-create ‘命令来完成。此例中C称备份为’ backup1 ‘且以‘97b4b853-80f6-414f-ba6f-c6f455a79ae6’代替’INSTANCE_ID’
注解
这个命令语法仅适用于python-troveclient 1.0.6版本及以后的版本。早先版本需要您把备份名字作为第一个参数传递。
$ trove backup-create INSTANCE_ID backup1
+-------------+--------------------------------------+
| Property | Value |
+-------------+--------------------------------------+
| created | 2014-03-18T17:09:07 |
| description | None |
| id | 8af30763-61fd-4aab-8fe8-57d528911138 |
| instance_id | 97b4b853-80f6-414f-ba6f-c6f455a79ae6 |
| locationRef | None |
| name | backup1 |
| parent_id | None |
| size | None |
| status | NEW |
| updated | 2014-03-18T17:09:07 |
+-------------+--------------------------------------+
注意,命令返回包括原实例的标识编码(’instance_id’)以及人工备份的标识编码(’id’)两部分。
之后,使用’ trove backup-list ‘ 命令获得以下信息:
$ trove backup-list
+--------------------------------------+--------------------------------------+---------+-----------+-----------+---------------------+
| id | instance_id | name | status | parent_id | updated |
+--------------------------------------+--------------------------------------+---------+-----------+-----------+---------------------+
| 8af30763-61fd-4aab-8fe8-57d528911138 | 97b4b853-80f6-414f-ba6f-c6f455a79ae6 | backup1 | COMPLETED | None | 2014-03-18T17:09:11 |
+--------------------------------------+--------------------------------------+---------+-----------+-----------+---------------------+
您可以用“trove backup-show”命令以及通过为“8af30763-61fd-4aab-8fe8-57d528911138”的“BACKUP_ID” 获得关于备份的附加信息
$ trove backup-show BACKUP_ID
+-------------+----------------------------------------------------+
| Property | Value |
+-------------+----------------------------------------------------+
| created | 2014-03-18T17:09:07 |
| description | None |
| id | 8af...138 |
| instance_id | 97b...ae6 |
| locationRef | http://10.0.0.1:.../.../8af...138.xbstream.gz.enc |
| name | backup1 |
| parent_id | None |
| size | 0.17 |
| status | COMPLETED |
| updated | 2014-03-18T17:09:11 |
+-------------+----------------------------------------------------+
恢复一个数据库实例
假定现在你的’ guest1 ‘ 数据库实例已经损坏并且你需要恢复数据库实例。在这种情况下,你可以使用’ trove create ‘ 命令创建一个新的数据库实例,这个实例被称为’ guest2 ‘。
10
),与源实例``guest1`` 相同的根卷大小(2
)。--backup
argument to indicate that this new
instance is based on the backup artifact identified by
BACKUP_ID
. In this example, replace BACKUP_ID
with
8af30763-61fd-4aab-8fe8-57d528911138
.$ trove create guest2 10 --size 2 --backup BACKUP_ID
+-------------------+----------------------------------------------+
| Property | Value |
+-------------------+----------------------------------------------+
| created | 2014-03-18T17:12:03 |
| datastore | {u'version': u'mysql-5.5', u'type': u'mysql'}|
|datastore_version | mysql-5.5 |
| flavor | {u'id': u'10', u'links': [{u'href': ...]} |
| id | ac7a2b35-a9b4-4ff6-beac-a1bcee86d04b |
| name | guest2 |
| status | BUILD |
| updated | 2014-03-18T17:12:03 |
| volume | {u'size': 2} |
+-------------------+----------------------------------------------+
验证备份
现在核实新的’guest2’实例与原’guest1’实例具有相同特性。
通过获得“guest2”新实例的标识开始
$ trove list
+-----------+--------+-----------+-------------------+--------+-----------+------+
| id | name | datastore | datastore_version | status | flavor_id | size |
+-----------+--------+-----------+-------------------+--------+-----------+------+
| 97b...ae6 | guest1 | mysql | mysql-5.5 | ACTIVE | 10 | 2 |
| ac7...04b | guest2 | mysql | mysql-5.5 | ACTIVE | 10 | 2 |
+-----------+--------+-----------+-------------------+--------+-----------+------+
使用‘ trove show ’命令显示新guest2实例相关信息。通过”ac7a2b35-a9b4-4ff6-beac-a1bcee86d04b”guest2的“INSTANCE_ID”。
$ trove show INSTANCE_ID
+-------------------+--------------------------------------+
| Property | Value |
+-------------------+--------------------------------------+
| created | 2014-03-18T17:12:03 |
| datastore | mysql |
| datastore_version | mysql-5.5 |
| flavor | 10 |
| id | ac7a2b35-a9b4-4ff6-beac-a1bcee86d04b |
| ip | 10.0.0.3 |
| name | guest2 |
| status | ACTIVE |
| updated | 2014-03-18T17:12:06 |
| volume | 2 |
| volume_used | 0.18 |
+-------------------+--------------------------------------+
注意,在“guest1”实例中,如果数据存储、规格类型标识码、磁盘卷大小具有相同值
使用:’ trove database-list ‘ 去核实原数据库(’db1’ 和 ‘dab2’)在已恢复实例中是否存在。
$ trove database-list INSTANCE_ID
+--------------------+
| name |
+--------------------+
| db1 |
| db2 |
| performance_schema |
| test |
+--------------------+
使用’ trove user-list ‘命令核实原用户(’user1’)在已恢复的实例中是否存在。
$ trove user-list INSTANCE_ID
+--------+------+-----------+
| name | host | databases |
+--------+------+-----------+
| user1 | % | db1, db2 |
+--------+------+-----------+
告知用户
告诉正在访问禁用的``guest1``数据库实例的用户,他们现在可以访问``guest1``。提供他们``guest2``’的名字、IP地址,以及其它他们需要的信息。(您可以获取这些信息,通过命令`trove show` 。)
清除
这时,你可以通过’ trove delete ‘命令删除失效的’ guest1 ‘实例
$ trove delete INSTANCE_ID
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.