neutron数据库的版本化管理
openstack使用neutron-db-manage这个工具来管理neutron的数据库。如果我们对neutron的数据库要做一些修改,比如简单的增加一张表,删除一张表等,就需要使用这个工具了。
下面简单介绍一下如何使用这个工具:
1.neutron-db-manager current
通过使用这个命令来查看当前neutron数据库的版本状况
1 # neutron-db-manage current 2 Running current for neutron ... 3 INFO [alembic.runtime.migration] Context impl MySQLImpl. 4 INFO [alembic.runtime.migration] Will assume non-transactional DDL. 5 5b1229d495d7 (head) 6 644861cf5d9f (head) 7 OK 8 Running current for neutron-fwaas ... 9 INFO [alembic.runtime.migration] Context impl MySQLImpl. 10 INFO [alembic.runtime.migration] Will assume non-transactional DDL. 11 4b47ea298795 (head) 12 67c8e8d61d5 (head) 13 OK
上述结果中显示了两个subproject的版本信息,分别是neutron和neutron-fwaas。
结果中每个subproject都有两条版本号信息,我们拿neutron这个subproject为例简单说明一下。
1 5b1229d495d7 (head)
这个是expand分支的版本信息,后面的(head)表明当前版本是最新版本。
expand这个分支代表的是所有对数据库进行的扩充操作。
比如你给数据库增加了一张表,那么这个操作引起的版本号变更就会体现在这个分支上。
1 644861cf5d9f (head)
这个是contract分支的版本信息,后面一样的,(head)表明当前版本是最新版本。
contract这个分支代表的是所有对数据库进行的缩减操作(例如删除表操作)。
2.neutron-db-manage revision
这个命令是为数据库变更创建一个修订文件,同时它也会生成一个新的版本和版本号,所以在应用该修订文件之前前,对应分支的版本号不再显示为head状态(有更新的版本未应用)。
它有几个参数
- -m
为新版本设定一些备注信息,方便版本管理 - --autogenerate/--expand/--contract(三选一,无法同时存在)
--autogenerate表示让工具自动创建修订文件,包括填充修订文件中对应的修改内容(会去自动比较当前数据库和neutron的数据库模板文件)。
使用该参数后,工具会自动识别分支类型(expand/contract),但是如果扩充和缩减操作同时存在,那么使用该参数会报错,需要分别使用--expand和--contract。
--expand,创建一个空修订文件,为expand分支生成新的版本和版本号,用户需要手动添加修改内容到修订文件中。
--contract,创建一个空修订文件,为contract分支生成新的版本和版本号,用户需要手动添加修改内容到修订文件中。
3.neutron-db-manager upgrade
这条命令是应用修订文件,并更新版本号。
upgrade后面可以跟三个参数:heads/--expand/--contract
heads
例如: neutron-db-manage upgrade heads
这会应用所有的修订文件,包括expand分支和contract分支,并更新到最新版本。
- --expand
应用expand分支的修订文件,并更新到最新版本 - --contract
应用contract分支的修订文件,并更新到最新版本
4.其他
如果有多个subproject的情况下,上述的命令都可以使用subproject参数来选择,例如:neutron-db-manage --subproject neutron current
摘自: http://910216.com/archives/neutron-db-manage.html