备份和恢复数据库

备份和恢复数据库

你可以使用数据库服务备份数据库,并且在对象存储服务里存放人工备份。之后,如果原始的数据库损坏,你可以使用人工备份去恢复数据库。恢复过程会创建一个数据库实例 。

此例展示了如何备份和恢复一个MySQL数据库。

  1. ** 备份数据库实例 **

    作为背景,假定你创建了具有以下特征的数据库实例

    • 数据库实例名称为:“guest1”
    • 规格类型标识:“10”
    • 根卷大小:2
    • 数据库: db1db2
    • 用户:用户``user1``的密码``password``

    首先,通过使用“ 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                      |
    +-------------+----------------------------------------------------+
    
  2. 恢复一个数据库实例

    假定现在你的’ guest1 ‘ 数据库实例已经损坏并且你需要恢复数据库实例。在这种情况下,你可以使用’ trove create ‘ 命令创建一个新的数据库实例,这个实例被称为’ guest2 ‘。

    • 您指定新的实例``guest2``有相同的类型(10),与源实例``guest1`` 相同的根卷大小(2)。
    • You use the --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}                     |
    +-------------------+----------------------------------------------+
    
  3. 验证备份

    现在核实新的’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 |
    +--------+------+-----------+
    
  4. 告知用户

    告诉正在访问禁用的``guest1``数据库实例的用户,他们现在可以访问``guest1``。提供他们``guest2``’的名字、IP地址,以及其它他们需要的信息。(您可以获取这些信息,通过命令`trove show` 。)

  5. 清除

    这时,你可以通过’ trove delete ‘命令删除失效的’ guest1 ‘实例

    $ trove delete INSTANCE_ID
    
Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.